加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

网格模型基础三

发布时间:2020-12-16 22:57:32 所属栏目:大数据 来源:网络整理
导读:作者:StrongCoding 邮箱:StrongCoding@qq.comDX群:130302441 若文中有误,请告知.十分感谢.一起加油. 这一篇将深入网格模型的基础,看一下,网格模型这个东西,内部到底隐藏了些什么,真的有那么深奥吗?呵呵,不卖关子了,一起来 看看吧: 一 、MESH属性

作者:StrongCoding

邮箱:StrongCoding@qq.comDX群:130302441

若文中有误,请告知.十分感谢.一起加油.

这一篇将深入网格模型的基础,看一下,网格模型这个东西,内部到底隐藏了些什么,真的有那么深奥吗?呵呵,不卖关子了,一起来 看看吧:

、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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读