Direct3D的程序结构


DirectX SDK提供的例程均使用Win32编程模式。在此模式下,用户需要自己编写(或管理)WinMain主函数,并负责创建主窗口。

下面是WinMain的程序结构:

... ...
//创建主窗口,也就是Direct3D窗口
HWND hWnd = CreateWindow(... ...
//初始化Direct3D
InitD3D();
//建模
InitGeometry();
//进入消息循环
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{ //如果有消息,则处理消息
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
//如果没有消息,就调用Render
Render();
}
//释放接口
Cleanup();
... ...
采用这种结构时,只要程序处于空闲(Idle)状态,就会调用渲染函数,运行效率比MFC好得多,适合编写对实时性要求比较高的程序。
此前的例程都是借助定时器产生的WM_TIMER消息来控制实体的运动,改用Win32模式后,Render的调用是随机发生的,那么如何控制实体运动呢?VC提供了一个函数clock,用于返回程序的运行时间。我们在Render中调用clock,把它的返回值做为实体的运动时间,然后通过运动学方程推算出实体位置。

你可能感兴趣的:(编程,timer,null,mfc,Direct3D)