網(wǎng)格模型高級技術(shù)(19) 摘要:
一個網(wǎng)格模型中可以包含多個動畫集,在渲染網(wǎng)格時通過動畫控制器可以在各個動畫集之間進行切換,從而可以在渲染網(wǎng)格模型時根據(jù)具體情況播放不同的動畫。這里將具有多個骨骼動畫的網(wǎng)格模型稱為"多骨骼動畫網(wǎng)格模型",當然骨骼動畫網(wǎng)格模型也完全可以具有蒙皮信息,下面的示例程序演示了渲染多骨骼動畫網(wǎng)格模型時骨骼動畫之間的切換,骨骼動畫間的切換是通過動畫控制器來完成的。
網(wǎng)格模型高級技術(shù)(18) 摘要: cSkinMesh類的實現(xiàn)與cAnimMesh的實現(xiàn)基本相同,區(qū)別在以下幾點。
首先是在load_from_xfile()中增加了對網(wǎng)格模型骨骼矩陣的保存,接下來是DrawMeshContainer()的實現(xiàn),該函數(shù)負責當前網(wǎng)格容器中具體網(wǎng)格模型的渲染.
網(wǎng)格模型高級技術(shù)(17) 摘要: 蒙皮骨骼動畫網(wǎng)格模型接口是對上一節(jié)骨骼動畫網(wǎng)格模型接口的擴展,添加了處理蒙皮信息的功能。
為了在網(wǎng)格模型中包含蒙皮信息,需要進一步擴展D3DXMESHCONTAINER_DERIVEED。
網(wǎng)格模型高級技術(shù)(16) 摘要:
Direct3D通過索引頂點混合,擴展了使用多個混合矩陣對頂點進行混合的支持。在索引頂點混合中,混合矩陣被保存在矩陣調(diào)色板(可以看成一個矩陣數(shù)組)中,使用矩陣索引來引用特定的混合矩陣。矩陣索引使用8位無符號整數(shù)表示,由每個頂點提供,因為Direct3D中限定每個頂點最多受到4個混合矩陣的影響,所以每個頂點最多具有4個矩陣索引,每個頂點的矩陣索引被組合成一個DWORD類型的整數(shù)存儲和表示。因為每個頂點最多受4個混合矩陣的影響,所以在渲染一個三角形時最多可能需要使用12個混合矩陣,在這種情況下,矩陣調(diào)色板中最少需要包含12個混合矩陣。
網(wǎng)格模型高級技術(shù)(15) 摘要:
在骨骼動畫網(wǎng)格模型中,骨骼的變動導致軀體網(wǎng)格模型的改變,于是就有了骨骼動畫。網(wǎng)格模型是由一個個頂點構(gòu)成的,如果任意一個頂點只受一塊骨骼影響,那么網(wǎng)格模型在運動時很容易出現(xiàn)裂縫,特別是在一些結(jié)合部位,如肩關(guān)節(jié)、肘關(guān)節(jié)等。盡管可以使用縫合技術(shù)縮小這些裂痕,但當關(guān)節(jié)的旋轉(zhuǎn)比較極端時,例如前臂繞肘關(guān)節(jié)旋轉(zhuǎn)120度時,就會在肘關(guān)節(jié)處出現(xiàn)一個較大的剪缺。這是因為只有一個多邊形跨越在上臂和前臂之間的整個間隙,間隙越大,裂縫就越大,最終的渲染效果也越差。
網(wǎng)格模型高級技術(shù)(14) 摘要:
使用cAnimMesh類包含3個步驟,首先在回調(diào)函數(shù)OnCreateDevice()中創(chuàng)建cAnimMesh類的實例,接著在回調(diào)函數(shù)
OnFrameRender()中渲染網(wǎng)格模型,最后在回調(diào)函數(shù)OnDestroy()中釋放網(wǎng)格模型。
網(wǎng)格模型高級技術(shù)(13) 摘要:
類cAnimMesh是最關(guān)鍵的一個類,所有與骨骼動畫相關(guān)的具體實現(xiàn)細節(jié)都封裝在該類中,該類還定義了類cAllocateHierarchy的一個對象m_alloc_hierarchy,該對象完成從文件中加載動畫網(wǎng)格模型的骨骼層次結(jié)構(gòu)、動畫數(shù)據(jù)以及其他用于繪制模型的幾何數(shù)據(jù)。
網(wǎng)格模型高級技術(shù)(12) 摘要:
為了方便加載.x文件中的框架和網(wǎng)格模型數(shù)據(jù),Direct3D提供了一個ID3DXAllocateHierarchy接口,該接口中有4個純虛函數(shù):用來創(chuàng)建框架的CreateFrame(),創(chuàng)建網(wǎng)格容器的CreateMeshContainer(),銷毀框架的DestroyFrame(),銷毀網(wǎng)格容器的DestroyMeshContainer()。應(yīng)用程序會在相應(yīng)的時機自動調(diào)用這些對應(yīng)的函數(shù),以構(gòu)建或者銷毀對應(yīng)的框架或網(wǎng)格模型。
網(wǎng)格模型高級技術(shù)(11) 摘要:
骨骼動畫是目前最流行也最復雜的角色動畫,它包含以下幾個重要元素:骨骼、動畫。骨骼動畫思想的起源很簡單,自然界中的大多數(shù)動物都擁有一套骨骼,身體的皮毛血肉都依附于骨骼,當骨骼開始運動的時候,依附于對應(yīng)骨骼的皮毛血肉都隨骨骼一起運動。在三維圖形編程領(lǐng)域,角色的軀體是由網(wǎng)格模型來表示的,網(wǎng)格模型通常由大量三角形圖元組成,而三角形又是由頂點組成的。為了模仿現(xiàn)實世界中角色自身的動作,就需要為角色網(wǎng)格模型添加一套骨骼,同時需要確定哪些頂點依附于哪塊骨骼,這樣當骨骼運動時就能牽引依附骨骼的頂點一起運動,這就是骨骼動畫的基本原理。
網(wǎng)格模型高級技術(shù)(10) 摘要:
使用類CDXUTMeshFile進行網(wǎng)格模型的繪制,首先在OnCreateDevice()里創(chuàng)建CDXUTMeshFile對象,接著在
OnFrameRender()里渲染網(wǎng)格模型,最后在OnDestroyDevice()里釋放該對象所申請的資源。
網(wǎng)格模型高級技術(shù)(9) 摘要:
使用CDXUTMesh進行網(wǎng)格模型的繪制,首先在OnCreate()函數(shù)中創(chuàng)建CDXUTMesh對象,接著在OnFrameRender()中繪制(先繪制不透明的網(wǎng)格,再繪制半透明的網(wǎng)格)。
網(wǎng)格模型高級技術(shù)(8) 摘要:
漸變(tweening)網(wǎng)格模型是Direct3D中實現(xiàn)模型動畫最簡單的方式和途徑,它的原理也非常簡單。例如對于場景內(nèi)的某個網(wǎng)格模型,最初只記錄
t0時刻和t1時刻該網(wǎng)格模型的狀態(tài)(即這兩個時刻網(wǎng)格模型中所有頂點的位置),對于t0到t1這段時間內(nèi)的任意時刻t_current,根據(jù)該時刻距離
t0和t1時刻的遠近,實時地分配給這兩個網(wǎng)格模型不同的權(quán)重,然后按照這兩個網(wǎng)格模型中頂點的不同位置和它們各自的權(quán)重進行插值,計算出
t_current時刻整個網(wǎng)格模型中所有頂點的位置,從而實現(xiàn)動畫效果。
網(wǎng)格模型高級技術(shù)(7) 摘要:
增強網(wǎng)格模型是運行鑲嵌技術(shù)將原始網(wǎng)格模型的三角形面進行細分,形成更加精細(三角形面更多)的網(wǎng)格模型,這對于逐頂點進行的光照效果會更好。網(wǎng)格模型鑲嵌技術(shù)主要用在層次細節(jié)場景中當模型距離觀察者較近時,使模型的顯示更精細。
增強網(wǎng)格模型可以通過對原始網(wǎng)格模型進行鑲嵌細分模型得到,Direct3D提供了功能函數(shù)D3DXTessellateNPatches()來完成這一工作。該函數(shù)根據(jù)指定的參數(shù),由顯卡的鑲嵌器(tessellator)對網(wǎng)格模型中的多邊形進行細分,從而使原來的三維物體表面變得更加光滑細致。
網(wǎng)格模型高級技術(shù)(6) 摘要: 層次細節(jié)網(wǎng)格模型(progress
mesh)是一種特殊的網(wǎng)格模型,它的頂點數(shù)據(jù)以樹狀形式組織,可以隨意增加或降低模型的復雜程度,從而比普通的網(wǎng)格模型具有更大的靈活性,層次細節(jié)網(wǎng)格模型對于層次細節(jié)場景的渲染非常理想。當模型距離觀察者較遠時可以降低模型的復雜程度,提高渲染速度。而當模型距離觀察者較近時可以使用復雜的模型,從而提高視覺效果。Direct3D用ID3DXPMesh來表示層次細節(jié)網(wǎng)格模型對象,而不是ID3DXMesh。
網(wǎng)格模型高級技術(shù)(5) 摘要:
Direct3D對加載到內(nèi)存中的網(wǎng)格模型提供了優(yōu)化功能,通過網(wǎng)格模型優(yōu)化可以明顯提高三維模型的渲染速度,這對渲染速度要求較高的三維圖形程序和游戲具有非常重要的現(xiàn)實意義。
對于程序員而言,對網(wǎng)格模型進行優(yōu)化是比較簡單的,只需調(diào)用接口ID3DXMesh的方法Optimize().
網(wǎng)格模型高級技術(shù)(4) 摘要: 為了使一個.x文件產(chǎn)生動畫,必須至少提供一個動畫集,每個動畫集都應(yīng)具有一個對某個框架的引用。模板
AnimationSet用來定義動畫集。
Animation是一個完全開放的模板,一般情況下,用模板AnimationKey來填充它。
網(wǎng)格模型高級技術(shù)(3) 摘要:
通過前面的介紹,可以建立起一個網(wǎng)格模型,但這個網(wǎng)格模型是渾然一體的,而在現(xiàn)實生活中,為了能獨立對一個物體的不同部分進行變換,必須將模型分割成不同的模塊,在.x文件中使用框架(frame)對一個網(wǎng)格模型的不同部分進行組織和管理。框架僅僅是一個外殼,在框架中通常需要包含具體的網(wǎng)格和一個框架變換矩陣,其中框架變換矩陣用于指定該框架包含的部分在整個模型中的初始位置。
網(wǎng)格模型高級技術(shù)(2) 摘要: 我們在cube_1.x的基礎(chǔ)上添加材質(zhì)、法線和紋理,構(gòu)成cube_2.x。
在光照模型運算時需要用到法向量,法向量分為面法向量和頂點法向量。在基于逐頂點計算的光照模型中,需要使用頂點法向量。通常頂點法向量的計算過程是:先將共享該頂點的幾個面的面法向量相加并除以共享該頂點的面的個數(shù),接著歸一化這個結(jié)果。
網(wǎng)格模型高級技術(shù)(1) 摘要:
在三維圖形程序設(shè)計中,網(wǎng)格模型占有非常重要的地位,而且也是比較復雜的部分,特別是包含動畫和蒙皮信息的網(wǎng)格模型。
.x文件格式最初是為傳統(tǒng)的Direct3D保留模式而設(shè)計的,在DirectX
6.0問世后,針對立即模式對它作過一次擴展。要想在Direct3D程序中靈活自如地使用網(wǎng)格模型,應(yīng)當深入理解.x文件格式。