2017-09-12 25 views
0

최근에 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를 라이브러리에 더 나은 대응이 있는지 궁금하다. '내가 할 수있는 (표준 라이브러리에있는 I)가 (이 함수의 수면을 알고

void render_frame_red(void); 
delay(1000); 
void render_frame_blue(void); 
delay(1000); 

을하지만, 말 그대로 내 응용 프로그램 창을 동결 예를 들어 나는이 같은 체인의 특정 색상과 지연을 위해이 함수를 호출 할 수 있다면 지연 동안 그것과 상호 작용하지 마라). 어쩌면 나는 다른 tickrate에 시간을 정할 수 있기 때문에 원하는만큼 자주 업데이트 할 것입니다.

나는 그것이 작은 것이고 나중에 3D 프로그래밍을 사용하여 여행을 떠올리 겠지만, DirectX에서 어떻게 작동하는지 더 많이 알면 큰 어려움이 없을 것입니다.

+0

프로그램에서 한 번만 srand()를 호출하십시오. –

+0

네, 저의 잘못입니다. 나는 보통 main() 함수 (이 경우에는 WinMain())의 시작 부분에서 호출합니다. – RPAnimation

+0

@NeilButterworth 실제로 스레드에서 한 번. 아니면':: std :: random_device'를 사용하십시오. 질문에 관해서는, DirectX는 시간을 전혀 다루지 않습니다. 이제는 관련된 모든 기능이 DXGI에 존재합니다 ([IDXGISwapChain] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb174569(v=vs.85) .aspx) 참조) 및 시스템 타이머. – VTT

답변

0

Direct3D의 일반적인 모델은 프레임을 가능한 한 빨리 렌더링 한 다음 프로그램에서 애니메이션을 처리하는 시간 기반 작업을 수행하는 것입니다. 전통적인 GDI 스타일 그리기는 Direct3D로 할 수 있지만 일을 더 어렵게 만듭니다.

즉, 애니메이션과 효과를 제어하려면 frame-count 대신 clock-time을 사용하십시오. Direct3D 렌더링을위한 좋은 타이머 솔루션은 this blog post을 참조하십시오. BTW

는 사용되지 않는 다이렉트 SDK의 코드 지원에 크게 의존하고 ( MSDN 참조) 고대 도우미 라이브러리 D3DX9를 배포하는 기존 DirectSetup을 필요로 기존 Direct3D를 9 학습에 시간을 투자하지 않는다. DirectX 11을 사용하십시오. DirectX Tool Kit을 참조하십시오.

+0

이 두 가지 주요 차이점은 무엇입니까? DirectX SDK는 더 이상 업데이트되지 않지만 같은 뿌리를 기반으로하는 SDK는 아닌 것으로 알고 있습니다. (문법, GPU와의 통신, 기술 등) 현대 개발자들은 DirectX Tool Kit을 사용하여 게임을하고 있습니까? 저는 기초가없는 질문을하지만, 더 이상 사용되지 않는 SDK에서 연구를 시작하기 전에 반드시 확인해야합니다. – RPAnimation

+0

@RPAnimation'DirectX SDK'는 꽤 자주 업데이트되었지만'Windows SDK'의 일부가되었습니다. 이 별개의'DirectX SDK '는 추천되지 않는 레거시 SDK입니다. 'DirectX Tool Kit'은 개발을 간소화 할 수있는 지원 라이브러리입니다 (또한 매우 자주 업데이트됩니다). – VTT

+0

다른 주제에 대한 내 블로그의 DirectX SDK 상태에 대한 게시물이 수십 가지 있습니다. 위의 MSDN 링크로 시작하여 [blog] (https://blogs.msdn.microsoft.com/chuckw/tag/dxsdk/)를보십시오. 대부분의 게임 개발자는 기존 게임 엔진 (DirectX 11/12 사용)을 사용하거나 이미 DirectX를 사용하여 자체 엔진을 작성할 수 있습니다. _DirectX Tool Kit_은 지원되지 않는 DirectX SDK의 사용을 피하는 지원되는 오픈 소스 라이브러리를 기반으로 C++에서 DirectX 11을 배울 수있는 방법으로 지적했습니다. 대부분의 다른 온라인 자습서는이 점에서 구식입니다. –