網格模型中級四

2021-05-24 14:49:47 字數 2742 閱讀 5779

這一篇我們一起學習下漸進網格,不多說廢話,開主題:

一、漸變網格的概念

漸進網格通過id3dxpmesh介面來實現.允許我們通過簡化邊來簡化我們的mesh模型.我們能夠簡化,或者說簡化到一定程度後,復原之前的mesh.可分三個層次:高、中、低.

二、漸進網格的優勢

漸進網格就像lod地形一樣,根據距離攝像機的遠近,可降低其渲染細節,所以提高了渲染效率.

三、如何產生乙個漸變網格

我們通過d3dxgeneratepmesh這個方法來實現漸變網格,其原型:

hresultd3dxgeneratepmesh(

lpd3dxmeshpmesh, // 原meshconst dword *padjacency, // 指向乙個包含原mesh的鄰接資訊陣列const d3dxattributeweights *pvertexattributeweights,

//  原mesh的頂點品質權重值
const float *pvertexweights, // 原mesh的頂點權重值

dwordminvalue, // 指定我們期望簡化的最少頂點數或者面數dwordoptions, // 指定上面這個引數到底指的是頂點還是面數lpd3dxpmesh *pppmesh//輸出我們的漸進網格mesh

);

頂點權重值允許我們為每乙個頂點屬性指定乙個權值,0.0表示沒有權值值,頂點的權重值越高,被溢位的可能性就越低.
原型:
typedef struct d3dxattributeweights 

float tangent; // 正切

float binormal;// 次法線

} d3dxattributeweights, *lpd3dxattributeweights;

注意:預設的品質權重值是被推薦使用的,除非你的應用程式有乙個很重要的理由而不使用它.
五、構建漸進網格模型的核心  id3dxpmesh
dwordgetmaxfaces();  // 返回漸進網格能夠被設定的最大面數
dwordgetmaxvertices(); // 返回漸進網格能夠被設定的最大頂點數
dwordgetminfaces(); // 返回漸進網格能夠被設定的最小面數
dwordgetminvertices(); // 返回漸進網格能夠被設定的最小頂點數
hresultsetnumfaces(dwordfaces); // 設定漸進網格所能設定的面數,以便讓mesh簡便或者複雜化
hresultsetnumvertices(dwordvertices); // 設定漸進網格所能設定的頂點數
hresulttrimbyfaces(dwordnewfacesmin,dwordnewfacesmax,
dword *rgifaceremap,dword *rgivertremap
);// 允許我們設定新的最小最大漸變網格mesh的面數,也返回面或者頂點的重對映資訊
hresulttrimbyvertices(dwordnewverticesmin,dwordnewverticessmax,
dword *rgifaceremap,dword *rgivertremap);// 允許我們設定新的最小最大漸變網格mesh的頂點數,也返回面或者頂點的重對映資訊

網格模型中級二

下面我們一起學習一下,如何利用網格模型中級一的知識載入乙個普通的.x檔案,僅僅列一下核心 一 實現關鍵思路 1 載入.x檔案 2 從.x檔案中提取材質和紋理 3 釋放材質指標 4 優化mesh 5 釋放鄰接資訊指標 6 分批渲染 二 遵循上面的流程我們一起來寫一下 注意是偽 1 載入.x檔案 id3...

網格模型中級五

一 實現思路 1 正常載入乙個.x檔案,儲存於sourcemesh 2 生成我們的漸進網格模型destmesh 3 渲染我們的漸進網格destmesh 二 下面我們將根據以上的思路,用 展現這一思路 1 正常載入 id3dxbuffer adjbuffer 0 id3dxbuffer mtrlbuf...

fluent 動網格模型

遵循胡克定律,推薦四面體網格和三角形網格使用,其他情況下應滿足下列條件 a 移動是單方向的 b 移動方向垂直運動邊界 在非四面體和三角形網格中使用的時候,啟用該模型需要使用gui命令 define dynamic mesh spring on allshapes適用性 小幅度的運動,計算量較小。大幅...