网格模型基础三
作者:StrongCoding 这一篇将深入网格模型的基础,看一下,网格模型这个东西,内部到底隐藏了些什么,真的有那么深奥吗?呵呵,不卖关子了,一起来 看看吧: 一、MESH属性表相关 1、获取MESH子集数目 DWORD subsetNumbers = 0; Mesh->GetAttributeTable( 0,&subsetNumbers); 2、填充MESH属性表 D3DXATTRIBUTERANGE attInfo = new D3DXATTRIBUTERANGE[subsetNumbers]; Mesh->GetAttributeTable( attInfo,&subsetNumbers );
3、MESH的属性表里到底隐藏了些什么东西(伪代码) for( int i = 0; i < Mesh->GetNumberFaces(); ++i ) { attInfo[i].AttribId // 所处子集的ID编号 attInfo[i].FaceStart // 该子集(该属性表)起始的三角形面的索引编号 attInfo[i].FaceCount // 该子集(该属性表)存在的三角形面的总数目 attInfo[i].VertexStart // 该子集(该属性表)组织顶点的起始编号 attInfo[i].VertexCount // 该子集(该属性表)总的顶点数目 } 4、此外你还可以通过属性缓存,来直接获取MESH所有的面,所处的子集编号 Mesh->LockAttributeBuffer(...); for( int i = 0; i < Mesh->GetNumberFaces(); ++i ) { attributeInfo[i] // 获取MESH所有的三角形所处的子集ID编号 } Mesh->UnlockAttributeBuffer(); 二、MESH邻接信息相关 所谓的邻接信息,我们只要知道一个大方向就OK,就是记录毗邻相关的三角形数目: Mesh->GenerateAdjacency( 0.0f,&Adjacency); for( int i = 0; i < Mesh->GetNumberFaces(); ++i ) { Adjacency[i*3 ] Adjacency[i*3+1] adjacency[i*3+2] } 三、获取MESH顶点信息 Mesh->LockVertexBuffer( 0,&vb ); for( int i = 0; i < Mesh->GetNumVertex(); ++i ) { vb[i].x vb[i].y vb[i].z vb[i].u vb[i].v vb[i].nx vb[i].ny vb[i].nz } Mesh->UnlockVertexBuffer(); 四、获取MESH索引信息 Mesh->LockIndexBuffer( 0,&ib ); for( int i = 0; i < Mesh->GetNumFaces(); ++i ) { ib[i*3] ib[i*3+1] ib[i*3+2] } Mesh->UnlockIndexBuffer(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |