码迷,mamicode.com
首页 > 其他好文 > 详细

maya中MFnMesh.h使用说明的翻译

时间:2016-01-18 12:12:12      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

     由于最近要修改一个maya中的deformer脚本,于是开始系统学习openMaya的一些知识,当然少不了得把一堆头文件说明看一遍。首先把MFnMesh.h这个文件翻译一下吧,不废话,上译文:

 

 

首先MFnMesh.h是一个关于polygon面的装置。以下术语虽然名字不同,但含义一样:

     mesh,object;

     polygon,face;

     object-relative indices,global/mesh-relative indices;

     face-relative indices,local indices;

object-relative indices 表示点的索引,范围在[0,(numVertices()-1)]之间。

face-relative indices 表示面的索引,范围在[0,(polygonVertexCount(faceId)-1)]。

MFnMesh.h这个功能装置提供了进入多面体的方法,其对象包括MFn::kMesh, MFn::kMeshData, MFn::kMeshGeom。其中kMesh对象就是几何体形状。kMeshGeom对象是几何体的原始数据,kMeshData对象是通过依赖图中的连接来传递的数据。如果这个mesh类用kMesh初始化,那就一定要附加的几何体。

Mesh Construction通过定义一系列顶点(vertex list)以及包含每个多边形面的顶点数量的列表(polygon count list)以及一个组成每个多边形面的顶点的列表(vertex connection list)的方式来创建Mesh。Mesh会控制每一条边缘线的数据并返回给调用者。

vertex list:

这个列表存储了mesh中的所有的顶点,这些顶点会被分配到mesh中的每个面里。

比如:{ (-1,-1,-1), (1,-1,-1), (1,-1,1), (-1,-1,1), (-1,1,-1), (-1,1,1), (1,1,1), (1,1,-1) }

polygon count list:

这个列表包含了每个多边形面的顶点数量列表,mesh中的每个多边形面都可以这个包含了自身顶点数量的列表。

比如:{4,4,4,4,4,4}

vertex connection list:

这是一个包含了每个多边形面的顶点的索引列表,因为每个多边形都可以有不同数量的顶点,polygon count list会通过这个列表的多种段落来决定显示哪些多边形面。

比如:{ 0, 1, 2, 3, 4, 5, 6, 7, 3, 2, 6, 5, 0, 3, 5, 4, 0, 4, 7, 1, 1, 7, 6, 2 }

注意,当出现mesh中相邻面的点的排序不一致,已经有重复线重复点的情况,mesh会修改当前的数据信息。

 

Texture Coordinates (UV‘s)

你可以选择性的定义uv坐标。uv坐标系是2d的坐标系,用于把贴图展开在mesh的多边形面上。所有的uv坐标都被存储在一个或多个uvset中。默认的mesh的uv列表会把uv坐标系存储在一个索引范围为[0,numUVs()-1]的阵列中。uv数据会参考每一个面的每一个顶点,所以一个四边形就是4uv‘s。

 

Normals:
有些发现是由用户来设置的,如果顶点发现没有设置或者锁定了,那么mesh更改的时候这些法线数据也会被计算。如果被设置或者锁定,那么发现会保持与物体的相对关系,除非用户解锁他们。

在mesh中有以下三种法线信息:

     Per-vertex per-polygon:

     存储每一个多边形面的点的法线,用户可以通过MFnMesh::getNormals或者MItMeshPolygon::getNormal(index, normal)方法来获取该列表。

     Per-polygon normals:

     存储每一个多边形面的法线,用户可以通过MItMeshPolygon::getNormal(normal)或者MFnMesh::getPolygonNormal来获取该列表。

     Per-vertex

      存储每一个顶点的法线,这个发现信息是独立于多边形面的。这个对象不会被存储到对象中,但是会通过在maya中请求来计算这个法线,计算方法是求某个顶点临近面的发现的平均值。用户可以通过MFnMesh::getVertexNormal或者MItMeshVertex::getNormal获得列表。

 

maya中提供了一系列迭代器(MItMeshPolygon,MItMeshEdge,MItMeshVertex)来提供针对顶点,边缘线,多边形的特定的控制方法,在处理这些组成部分的时候这些迭代器会非常有用。

 

 

接下来该就是一堆关于该类的方法了,篇幅太长我就不废话了,大部分人只要熟悉了该类的数据结构就知道该怎么用了。所以一笔略过,只写几个自己要用的方法:

      bool  isEdgeSmooth              (int edgeId, MStatus *ReturnStatus=NULL) const

MStatus  setEdgeSmoothing        (int edgeId, bool smooth=true)

MStatus  cleanupEdgeSmoothing  ()

MStatus  createInPlace                (int numVertices, int numPolygons, const MFloatPointArray &vertexArray,

                                                 const MIntArray &polygonCounts, const MIntArray &polygonConnects)

MObject  generateSmoothMesh    (MObject parentOrOwner, MStatus *ReturnStatus)

              MFnMesh                     (const MObject &object, MStatus *ret=NULL)

MObject  MFnMesh::create           (int numVertices,

                                                 int numPolygons,

                                                 const MFloatPointArray &vertexArray,

                                                 const MIntArray &polygonCounts,

                                                 constMIntArray &polygonConnects,

                                                 MObject prentOrOwner = MObeject::kNullObj,

                                                 MStatus * ReturnStatus =NULL)

Maya会根据提供的数据在节点编辑器中画出树形图。

maya中MFnMesh.h使用说明的翻译

标签:

原文地址:http://www.cnblogs.com/hksac/p/5138640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!