《DirectX 9.0 3D游戏开发编程基础》 第二章 绘制流水线 读书笔记
模型的表示
場景:物品或模型的集合
任何物品都可以用三角形網(wǎng)絡(luò)逼近表示。我們經(jīng)常用以下術(shù)語描述三角形網(wǎng)絡(luò):多邊形(polygons)、圖元(primitives)、網(wǎng)絡(luò)幾何單元(mesh geometry)。
描述三角形:指定三個頂點
描述物品:三角形單元列表
頂點格式
可以創(chuàng)建我們所希望包含的頂點信息,如位置,顏色等,如下所示
Code Snippet頂點結(jié)構(gòu)定義好之后,就需要用靈活頂點格式(FVF)標(biāo)記組合來描述頂點的組織結(jié)構(gòu)。如下所示
#define FVF_COLOR (D3DFVF_XYZ | DEDFVF_DIFFUSE)? //包含了位置信息和漫反射信息
#define FVF_NORMAL_TEX (D3DFVF_XYZ | D3dFVF_NORMAL | D3DFVF_TEX1) //包含了位置、法線、紋理坐標(biāo)。
靈活頂點格式約定:標(biāo)記指定順序與頂點結(jié)構(gòu)中相應(yīng)類型數(shù)據(jù)保持一致
三角形單元
三角形單元包含了我們所希望繪制的每個獨立三角形的數(shù)據(jù)。如下圖所示產(chǎn),并指定每個三角形單元的頂點。
Vertex rect[6] = {v0,v1,v2,v0,v2,v3}
索引
原理:頂點列表包含了全部獨立的頂點,索引包含了指向頂點列表的索引,這些索引規(guī)定了為構(gòu)建三角形單元,各頂點應(yīng)按何種方式來組織。上圖中的例子可以這樣創(chuàng)建
Vertex vertexList[4] = {v0,v1,v2,v3}
WORD indexList[6] = {0,1,2,0,2,3} //其中0,1,2 都上vertexlist的下標(biāo)。
虛擬攝像機
那些位于視域體之外的物品是不可見的,在進(jìn)一步處理時就應(yīng)將其丟棄。丟棄這類數(shù)據(jù)運算過程稱為裁剪。
繪制流水線
定義:建立了3d場景的幾何描述,并設(shè)置好虛擬攝像機,我們下面的任務(wù)就是在顯示器中建立該場景的2d表示。為了實現(xiàn)這一目標(biāo)實施的一系列去算統(tǒng)稱為繪制流水線
DirectX坐標(biāo)變換:IDirect3DDevice9->SetTransform(變換類型,變換矩陣)。例如為了實現(xiàn)自局部坐標(biāo)系到世界坐標(biāo)系的變換,我們可以這樣寫
Device->SetTransform(D3DTS_WORD, & worldMatrix)
局部坐標(biāo)系:、
定義:用于定義構(gòu)成物品三角形列表的坐標(biāo)系。如下圖是在自身坐標(biāo)系中定義的茶壺
世界坐標(biāo)系
位于局部坐標(biāo)系中的物品通過一個稱為世界變換的去算過程到世界坐標(biāo)系。通常包括平移、旋轉(zhuǎn)等。
假如我們想讓一個立方體位于世界坐標(biāo)系中的點(-3,2,6)上,讓一個球體位于(5,2,-1) 上,可以如下實現(xiàn)
Code Snippet觀察坐標(biāo)系
為簡化運算將攝像機變換至至世界坐標(biāo)系原點,并使其光陣與z軸同向。同時空間中的所有幾何體都隨著攝像機一同進(jìn)行變換,以保證攝像機視場恒定? 。這種變換稱為取景變換。我們稱變換后的幾何體位于觀察坐標(biāo)系中。
取景變換矩陣可以用如下函數(shù)得到
?
假如攝像機們于(5,3,10),其觀察點為世界坐標(biāo)系原點。我們可以這樣創(chuàng)建取景變換矩陣
Code Snippet取景變換需要用IDirect3DDevice9:: SetTransform來設(shè)定,其中用于變換的類參數(shù)需要指定為D3DTS_VIEW;
Device->SetTransform(D3DTS_VIEW,&V)
背面消隱
通俗來講就是看不見物體的背面,我們將背面加以剔除,這稱為背面消隱。
哪些是背面朝向:默認(rèn)狀態(tài)下Dirct3d認(rèn)為頂點順時針(觀察坐標(biāo)系中)的三角形單元是正面朝向的。頂點排列順序為逆時針的是背面朝向的
如果某些原因?qū)е卤趁嫦[方式不能滿足應(yīng)用要求,我們可以修改繪制狀態(tài)來達(dá)到目的
Devoce->SetRenderState(D3DRS_CULLMODE,Value)
其中 Value可取以下值:D3DCULL_NONE 完全禁用背面消隱。 D3DCULL_CW 只用順時針繞序的三角形進(jìn)行消隱。 D3DCULL_CCW 默認(rèn)值。
光照
裁剪
投影
觀察坐標(biāo)系中我們的任務(wù)是獲取3d場景的2d表示。從n維變?yōu)閚-1維的過程稱為投影。實現(xiàn)投影有多多種方式 ,我們只對其中一種感興趣,即透視投影。透視投影會產(chǎn)生“透視縮短”的效果,即近大遠(yuǎn)小。我們將使用以下函數(shù)其功能是依據(jù)視域體的描述信息創(chuàng)建一個投影矩陣。
視口變換
定義:將頂點坐標(biāo)從投影窗口投影窗口轉(zhuǎn)換到屏幕的一個矩形區(qū)域中。
光柵化
為了繪制每一個三形單元 ,如何計算構(gòu)成三角形單元的每個像素的顏色值。
總結(jié)
以上是生活随笔為你收集整理的《DirectX 9.0 3D游戏开发编程基础》 第二章 绘制流水线 读书笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: __dopostback
- 下一篇: 用C#中的string.Replace有