MAX SDK网格专题

本文详细介绍了3DS MAX SDK中的网格结构,包括顶点、面片、边及其状态,并探讨了几何信息的获取和编辑方法,如获取包围盒、法线、元素信息等。此外,还讨论了网格的纹理贴图、UV展开以及拓扑编辑,如顶点颜色、选择/隐藏/删除元素、面片细分和法线翻转。最后提到了网格优化和布尔运算,以及MNMesh类的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网格专题

一、网格几何结构

1.1 顶点(Vertex)

      MAX中的模型顶点仍然采用常用的顶点数组方式,mesh的顶点数组成员为verts,verts为顶点三维坐标的一维数组, Mesh::numVerts为顶点的数目。

1.2 面片(Face)

      Mesh网格中的面片均为三角形,有专门的Face类描述,Face类记录了一个面片的三个顶点在顶点数组中的索引,三条边的可见性、该面的可见性、所属的光滑组、以及关联的材质ID。而在Mesh类中,面片数组为faces,它是一个Face类型的数组,数组长度由Mesh::numFaces决定。相关联的方法有:

      int Mesh::getNumFaces() const        //返回网格面片的数目

      BOOL Mesh::setNumFaces(int ct, BOOL keep=FALSE, BOOL synchSel=TRUE);    //设置面片数目并分配面片数组

     面片数组分配后,可以设置面片对应的顶点索引,该方法由Face类提供:

     void Face::setVerts(int a, int b, int c);

     当然Face类提供了设置边可见性、面可见性、光滑组、关联材质ID的存取方法。在Mesh类中,仅仅存在这样一个Face数组,有关面片具体的信息完全由Face类记录。

1.3 边(Edge)

     网格除了有顶点和面信息外,当然还存在着边信息,当然,MAX中的也存在着边信息,然而边信息是“虚拟”的。为什么呢?因为面信息中自然就包含了边信息, 因此,Mesh并不需要记录边集,而是在需要的时候创建一个边列表。Edge类为描述边的类,它包含了两个端点的索引,以及关联三角形面片的索引。

1.4 几何元素的状态

     在Mesh类中存在着三个选择状态标志位数组,分别是顶点选择状态位数组(vertSel),面片选择状态位数组(faceSel),边选择状态位数组(edgeSel),它们均是BitArray类型(位数组)。显然,vertSel位数组的长度为numVerts,faceSel位数组的长度为numFaces。但是我们刚才已经说过,边集并不存在,那么如何来确定边的索引呢?其实这里的edgeSel的长度为3*numFaces,这怎么来的应该很显然,一个三角形三条边,所以第i个三角形对应的三条边在edgeSel中分别为edgeSel[i*3], edgeSel[i*3+1], and edgeSel[i*3+2]。

      另外还有一个位数组记录顶点的显示/隐藏状态,为vertHide,长度为numVerts,如果vertHide[i]为1则标志着该顶点处于隐藏状态。

1.5 几何信息的获取

      Mesh类提供了很多方法让我们获取其相关的几何信息,并不仅仅是顶点以及面片信息,包括建立在此之上的其他几何信息,比如我们可以获取面法线或者顶点法线,可以求取两个面之间的角度等等。或者说,Mesh类已经实现了很多基于几何的计算,我们要做的就是调用它提供的方法即可。下面是一些常见的获取信息方法:

      • 包围盒信息(Bounding

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值