DX繪製流水線

繪製流水線

 

頂點格式。

、頂點格式(定義結構體)可以有多種,關鍵就在於結構定義好後,要用靈活頂點格式(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

攝像機位於(53-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。。最終還是玩不了。延遲略高。。今天把繪製部分看完。順便結合淺墨的文章實踐下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章