一、實現思路:
1、正常載入乙個.x檔案,儲存於sourcemesh
2、生成我們的漸進網格模型destmesh
3、渲染我們的漸進網格destmesh
二、下面我們將根據以上的思路,用**展現這一思路
1、正常載入
id3dxbuffer* adjbuffer = 0; id3dxbuffer* mtrlbuffer = 0; dword nummtrls = 0; hr = d3dxloadmeshfromx( "bigship1.x", d3dxmesh_managed, device, &adjbuffer, &mtrlbuffer, 0, &nummtrls, &sourcemesh );
if( mtrlbuffer != 0 && nummtrls != 0 ) else
} } d3d::release(mtrlbuffer); // done w/ buffer
hr = sourcemesh->optimizeinplace( d3dxmeshopt_attrsort | d3dxmeshopt_compact | d3dxmeshopt_vertexcache, (dword*)adjbuffer->getbufferpointer(), (dword*)adjbuffer->getbufferpointer(), // new adjacency info 0, 0
); if(failed(hr))
2 、借助原sourcemesh來生成我們的漸進網格模型destmesh
hr = d3dxgeneratepmesh( sourcemesh, (dword*)adjbuffer->getbufferpointer(), // adjacency 0, // default vertex attribute weights 0, // default vertex weights 1, // simplify as low as possible d3dxmeshsimp_face, // simplify by face count &pmesh
); d3d::release(sourcemesh); // done w/ source mesh d3d::release(adjbuffer); // done w/ buffer if(failed(hr)) // set to original detail dword maxfaces = pmesh->getmaxfaces(); pmesh->setnumfaces(maxfaces);
3、此外我們還可以控制漸進網格的級別,就像下邊
int numfaces = pmesh->getnumfaces(); // add a face, note the setnumfaces() will automatically // clamp the specified value if it goes out of bounds. if( ::getasynckeystate('a') & 0x8000f ) // remove a face, note the setnumfaces() will automatically // clamp the specified value if it goes out of bounds. if( ::getasynckeystate('s') & 0x8000f ) pmesh->setnumfaces( numfaces - 1 );
4、分批渲染
for(int i = 0; i < mtrls.size(); i++)
網格模型中級二
下面我們一起學習一下,如何利用網格模型中級一的知識載入乙個普通的.x檔案,僅僅列一下核心 一 實現關鍵思路 1 載入.x檔案 2 從.x檔案中提取材質和紋理 3 釋放材質指標 4 優化mesh 5 釋放鄰接資訊指標 6 分批渲染 二 遵循上面的流程我們一起來寫一下 注意是偽 1 載入.x檔案 id3...
網格模型中級四
這一篇我們一起學習下漸進網格,不多說廢話,開主題 一 漸變網格的概念 漸進網格通過id3dxpmesh介面來實現.允許我們通過簡化邊來簡化我們的mesh模型.我們能夠簡化,或者說簡化到一定程度後,復原之前的mesh.可分三個層次 高 中 低.二 漸進網格的優勢 漸進網格就像lod地形一樣,根據距離攝...
fluent 動網格模型
遵循胡克定律,推薦四面體網格和三角形網格使用,其他情況下應滿足下列條件 a 移動是單方向的 b 移動方向垂直運動邊界 在非四面體和三角形網格中使用的時候,啟用該模型需要使用gui命令 define dynamic mesh spring on allshapes適用性 小幅度的運動,計算量較小。大幅...