繪製流水線
頂點格式。
、頂點格式(定義結構體)可以有多種,關鍵就在於結構定義好後,要用靈活頂點格式(Flexible Vertex Format,FVF)標記的組合來描述頂點的結構
#define FVF_COLOR (D3DFVF_XYZ | D3DFVF_DIFFUSE.。。。)
標記與結構體內數據順序一致
世界座標系
讓一個立方體中心位於世界座標系中的點(x,y,z)上
創建用來讓立方體變換的矩陣
D3DXMATRIX cubeWorldMatrix;
D3DMatrixTranslation(&cubeWorldMatrix, x , y , z );
設置立方體的變換, 立方體應該還是畫在世界座標系的中心。只不過在此之前把世界座標系中心進行了位置變換
Device->SetTransform(D3DTS_WORLD , & cubeWorldMatrix);
drawCube();
觀察座標系
世界空間中的所有幾何體隨着攝像機一同進行變換。。變換後的幾何體位於觀察座標系中(view space)
攝像機位於(5,3,-10),其觀察點位世界座標系原點
創建取景變換矩陣:
定義各個位置
D3DXVECTOR3 position( 5.0f, 3.0f, -10.0f);攝像機在世界座標系中的位置
D3DXVRCTOR3 targetPont(0.0f, 0.0f, 0.0f);世界座標系中的被觀察點
D3DXVECTOR3 worldUp( 0.0f, 1.0f, 0.0f);世界座標系中向上的方向向量
定義取景變換矩陣
D3DXMATRIX V;
D3DXMatrixLookAtLH(&V, &position, &targetPoint,, &worldUp);
設定取景變換
Device->SetTransform(D3DT_VIEW, &V);
背面消隱
默認在觀察座標系中,頂點排列順序爲順時針的三角形單元式正面朝向
更改繪製狀態(消隱)
Device->SetRenderState(D3DRS_CULLMODE, Value);
Value可取以下值
D3DCULL_NONE 禁用背面消隱
D3DCULL_CW 順時針消隱
D3DCULL_CCW 逆時針消隱(默認)
透視投影(perspective projection)
D3DXMATRIX proj;
D3DMatrixPerspectiveFovLH
(
&proj,
PI*0.5f,視域角
(float)width/(float)height, 縱橫比(屏幕)
1.0f,近裁剪面到座標原點距離
1000.0f遠裁剪面到座標原點距離
);
Device->SetTransform(D3DTS_PROJECTION, &proj);
視口變換(viewport transform)
將頂點座標從投影窗口轉換到屏幕的一個矩形區域中(視口)
設置視口
D3DVIEWPORT9 vp=
{
0 父窗口位置,
0,
640, 父窗口大小
480,
0, 深度緩衝中的最小深度值
1 深度緩衝中的最大深度值
}
光柵化
幾何圖元變爲二維圖像
2013.11.20 昨晚本來想把幾何體繪製也給看完的。。沒想到朋友叫我去歐服和他玩LOL。。最終還是玩不了。延遲略高。。今天把繪製部分看完。順便結合淺墨的文章實踐下