Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z ramką renderowania
#1
Ok, zacząłem programowanie w DirectX, sprawdź to źródło, nie mogę tego ustawić w tym samym czasie zmienić kolor RGB i zmienić kształt obiektu z D3DPT_TRIANGLELIST do D3DPT_TRIANGLE FAN. W tym źródle kolor nie zmienia się w czasie rzeczywistym, tylko po naciśnięciu lewego lub prawego przycisku i zmianie kształtu obiektu za pomocą F1 lub F2. I jeśli wstawię render_frame (); pętli bez żadnego klucza, Nie mogę zmienić Kształtu, ponieważ widzę D3DPT_TRIANGLEFAN tylko podczas naciskania F1, kiedy wypuszczam F1, ponownie pokazuje się D3DPT_TRIANGLELIST, nawet w tym przypadku mogę zmienić kolor obiektu w czasie rzeczywistym. Prosimy o pomoc:       Kod:   #include <windows.h> #define KEY_DOWN (kod vk) ((GetAsyncKeyState (kod_kodu) i 0x8000)? 1: 0) // # define KEY_UP (kod_kodu) ((GetAsyncKeyState (kod_kodu) i 0x8000)? 0: 1) #include <windowsx.h> #include <d3d9.h> int b, g, r; #define SCREEN_HEIGHT 768 #define SCREEN_WIDTH 1024 // # pragma comment (lib, "d3d9.lib") LPDIRECT3D9 d3d; LPDIRECT3DDEVICE9 d3ddev; LPDIRECT3DVERTEXBUFFER9 t_buffer = NULL; void initD3D (HWND hWnd); void render_frame (void); void cleanD3D (void); void init_graphics (void); void get_key (void); struct CUSTOMVERTEX {FLOAT X, Y, Z, RHW; DWORD COLOR;}; #define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE) LRESULT CALLBACK WindowProc (HWND hWnd, komunikat UINT, WPARAM wParam, LPARAM lParam); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {HWND hWnd; WNDCLASSEX wc; ZeroMemory (i wc, sizeof (WNDCLASSEX)); toaleta . cbSize = sizeof (WNDCLASSEX); toaleta . styl = CS_HREDRAW | CS_VREDRAW; toaleta . lpfnWndProc = (WNDPROC) WindowProc; toaleta . hInstance = hInstance; toaleta . hCursor = LoadCursor (NULL, IDC_ARROW); toaleta . hbrBackground = (HBRUSH) COLOR_WINDOW; toaleta . lpszClassName = L "ProzorKlasa1"; RegisterClassEx (& wc); hWnd = CreateWindowEx (NULL, L "ProzorKlasa1", L "Systatov DirectX Program", WS_EX_TOPMOST | WS_POPUP, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, NULL, NULL, hInstance, NULL); ShowWindow (hWnd, nCmdShow); initD3D (hWnd); MSG msg; while (TRUE) {DWORD starting_point = GetTickCount (); if (PeekMessage (& msg, NULL, 0, 0, PM_REMOVE)) {jeśli (msg. komunikat == WM_QUIT) przerwa; TranslateMessage (& msg); DispatchMessage (& msg); Weź klucz (); if (KEY_DOWN (VK_ESCAPE)) PostMessage (hWnd, WM_DESTROY, 0, 0); } while ((GetTickCount () - starting_point <25)); } cleanD3D (); return msg. wParam; } LRESULT CALLBACK WindowProc (HWND hWnd, komunikat UINT, WPARAM wParam, LPARAM lParam) {switch (message) {case WM_DESTROY: {PostQuitMessage (0); return 0; } złamać ; } return DefWindowProc (hWnd, message, wParam, lParam); } void initD3D (HWND hWnd) {d3d = Direct3DCreate9 (D3D_SDK_VERSION); D3DPRESENT_PARAMETERS d3dpp; ZeroMemory (& d3dpp, sizeof (d3dpp)); d3dpp. Windowed = FALSE; d3dpp. SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp. hDeviceWindow = hWnd; d3dpp. BackBufferHeight = SCREEN_HEIGHT; d3dpp. BackBufferWidth = SCREEN_WIDTH; d3dpp. BackBufferFormat = D3DFMT_X8R8G8B8; d3d -> CreateDevice (D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, & d3dpp, & d3ddev); init_graphics (); powrót ; } void cleanD3D (void) {t_buffer -> Release (); d3ddev -> Release (); d3d -> Release (); powrót ; } void render_frame (void) {d3ddev -> Wyczyść (0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB (0, 0, 0), 1.0f, 0); d3ddev -> BeginScene (); d3ddev -> SetFVF (CUSTOMFVF); d3ddev -> SetStreamSource (0, t_buffer, 0, sizeof (CUSTOMVERTEX)); d3ddev -> DrawPrimitive (D3DPT_TRIANGLELIST, 0, 2); d3ddev -> EndScene (); d3ddev -> Present (NULL, NULL, NULL, NULL); powrót ; } void init_graphics () {CUSTOMVERTEX t_vert [] = {{320.0f, 100.0f, 0.5f, 1.0f, D3DCOLOR_XRGB (250, 0, b),}, {520.0f, 400.0f, 0.5f, 1.0f, D3DCOLOR_XRGB (0, 250, b),}, {120.0f, 400.0f, 0.5f, 1.0f, D3DCOLOR_XRGB (0, 0, b),},}; d3ddev -> CreateVertexBuffer (3 * sizeof (CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, & t_buffer, NULL); VOID * pVoid; t_buffer -> Lock (0, 0, (void **) & pVoid, 0); memcpy (pVoid, t_vert, sizeof (t_vert)); t_buffer -> Odblokuj (); powrót ; } void get_key () {if (GetAsyncKeyState (VK_LEFT)) {g - = 5; b - = 5; init_graphics (); } if (GetAsyncKeyState (VK_RIGHT)) {g + = 5; b + = 5; init_graphics (); } if (GetAsyncKeyState (VK_F1)) {d3ddev -> Wyczyść (0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB (0, 0, 0), 1.0f, 0); d3ddev -> BeginScene (); d3ddev -> SetFVF (CUSTOMFVF); d3ddev -> SetStreamSource (0, t_buffer, 0, sizeof (CUSTOMVERTEX)); d3ddev -> DrawPrimitive (D3DPT_TRIANGLEFAN,
Reply
#2
Naprawiłem to, ale dzięki
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)