這個程序主要體現了directx的一個基本的框架。
1. 在初始化D3D設備后,開始設置頂點緩存,將要顯示的點輸入,
2.用函數D3DXMatrixPerspectiveFovLH 求投影矩陣,該函數根據視域體的屬性求出投影矩陣
3.設置頂點渲染的方法,
device->CreateVertexBuffer(3 * sizeof(Vertex), D3DUSAGE_WRITEONLY, D3DFVF_XYZ, D3DPOOL_MANAGED, &Triangle, 0);
Vertex* vertices;
Triangle->Lock(0, 0,(void**)&vertices, 0);
vertices[0] = Vertex(-1.0f, 0.0f, 2.0f);
vertices[1] = Vertex(0.0f, 1.0f, 2.0f);
vertices[2] = Vertex(1.0f, 0.0f, 2.0f);
Triangle->Unlock();
D3DXMATRIX proj;
D3DXMatrixPerspectiveFovLH(&proj, D3DX_PI * 0.5f, (float)800 / (float)600, 1.0f, 1000.0f);
device->SetTransform(D3DTS_PROJECTION, &proj);
device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);4.在消息循環函數中
while(msg.message != WM_QUIT)
{
if(::PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) /**///////////////這里有個疑惑,什么時候if語句不成立呢
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
else
{
float currTime = (float)timeGetTime();
float timeDelta = (currTime - lastTime)*0.001f;
ptr_display(timeDelta);
lastTime = currTime;
}
}
device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffffffff, 1.0f, 0);
device->BeginScene();
device->SetStreamSource(0, Triangle, 0, sizeof(Vertex)); //將Vertexbuffer中的頂點倒入到流當中
device->SetFVF(Vertex::FVF); //設置頂點的格式 FVF已被我賦值為 FVF_XYZ
device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); //圖元類型 三角形 個數為一個
device->EndScene();
// Swap the back and front buffers.
device->Present(0, 0, 0, 0);

