我最近開始在C++中學習DirectX編程,並且遇到了一個小問題。在DirectX中放置幀之間的延遲
問題是,我的練習要求我將DirectX應用程序中的顏色從一個更改爲另一個。我有一個函數,這是否:
void render_frame(void)
{
// start the random generator
srand(time(NULL));
// clear the window to random color
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(rand() % 255, rand() % 255, rand() % 255), 1.0f, 0);
// begin/end/display scene
d3ddev->BeginScene();
d3ddev->EndScene();
d3ddev->Present(NULL, NULL, NULL, NULL);
}
它的工作原理,但它是依賴於時間()延遲,我不知道是否有在Direct3D圖書館更好的對應。例如,如果我能在鏈與特定的顏色和延遲調用此函數爲了這樣的:
void render_frame_red(void);
delay(1000);
void render_frame_blue(void);
delay(1000);
我知道函數睡眠()存在於標準庫,但它確實凍結我的應用程序窗口(我可以」在延遲期間與它進行交互)。也許我可以將時間設置爲不同的tickrate,以便隨時更新我想要的時間?
我知道這是一件小事,我可能會稍後在我的3D編程之旅中想出它,但如果我更瞭解DirectX中的工作方式,它不會受到傷害。
只能在程序中調用一次srand()。 –
是的,那是我的不好。我通常在我的main()函數(在這種情況下是WinMain())開始時調用它。 – RPAnimation
@NeilButterworth其實一次在線程中。甚至可以使用':: std :: random_device'。至於問題,DirectX根本不處理時間。現在,所有相關功能都存在於DXGI中(請參閱[IDXGISwapChain](https://msdn.microsoft.com/en-us/library/windows/desktop/bb174569(v = vs.85).aspx))和系統定時器。 – VTT