网格模型基础三

作者: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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值