開始看directx了,發現學ogre,還是現弄懂directx會比較好點。
這個程序主要體現了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);
posted on 2008-09-18 20:30
AstaTus 閱讀(273)
評論(0) 編輯 收藏 引用 所屬分類:
DIRECTX9