1.D3D的创建过程:(InitD3D)
D3D对象g_pD3D通过Direct3DCreate9(D3D_SDK_VERSION)创建
而后创建D3D设备g_pd3dDevice由g_pD3D->CreateDevice(...)创建.
2.绘图: (Render)
先清除后置缓冲并设置为背景色用g_pd3dDevice->Clear(...)
渲染: SUCCEEDED(g_pd3dDevice->BeginScene())
g_pd3dDevice->EndScene();
最后显示后置缓冲画面:
g_pd3dDevice->Present(...);
3.绘图操作的安排(利用消息循环中空闲时间)
常将Render()函数放于WinMain()消息循环内部.
获取消息用PeekMessage(...) ----相比于GetMessage(),PeekMessage()在未得到消息时仍将占用一段时间片.即可利用此间空闲时间.
if(PeekMessage(...)){
TransalteMessage(...);
DispatchMessage(...);
}
else{
Render(); //利用空闲时间绘图
}
4.顶点缓冲
用户定义自由顶点格式(FVF)而后通过g_pd3dDevice->CreateVertexBuffer(...)创建顶点缓冲
疑问手: 顶点缓冲的创建是否就是申请一片内存空间? 还有其它什么作用在这个函数里?
创建顶点缓冲有一个指向顶点的指针输出..
(注意这里传入的是VOID**,为什么要这样,想知道的话好好了解一个函数参数的拷贝,呵呵)
锁住内存区?: g_pVB->Lock(...)
然后memcpy(...)将自己定义的一个顶点数组拷贝过来.
再UnLock()
怎么绘制出顶点缓冲内的东西?
在Render()里,BeginScene()后作如下操作:
1) 使包含顶点信息的顶点缓冲绑定到一个设备数据流 g_pd3dDevice->SetStreamSource(...)
2) 向D3D指定顶点着色信息,大多数情况只指定FVF格式. g_pd3dDevice->SetFVF(...)
3) 调用输出几何信息的DrawPrimitive()函数 g_pd3dDevice->DrawPrimtive(...)