zoukankan      html  css  js  c++  java
  • maya中MFnMesh.h使用说明的翻译

         由于最近要修改一个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)来提供针对顶点,边缘线,多边形的特定的控制方法,在处理这些组成部分的时候这些迭代器会非常有用。

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

    MObject  MFnMesh::create           (int numVertices,
    
                                        int numPolygons,
    
                                        const MFloatPointArray &vertexArray,
    
                                        const MIntArray &polygonCounts,
    
                                        constMIntArray &polygonConnects,
    
                                        MObject prentOrOwner = MObeject::kNullObj,
    
                                        MStatus * ReturnStatus =NULL)

    用给定的顶点阵列和多边形面的连接信息创建一个新的mesh,设置一个函数去操作新的模型表面。

    对这个create方法来说拓扑结构正确是很重要的。

    parentOrOwner参数用来定义新表面的所有者,该方法如果执行成功,就可以通过parentOrOwner来才做新生成的表面了。

    如果parentOrOwner参数是kMeshData类型,那么就会创建一个kMeshGeom类型的表面并返回,parentOrOwner将会成为新mesh的所有者。

    如果parentOrOwner参数为空,那么久会创建一个新的transform对象(该对象为节点编辑器对象,即DAG object)作为mesh的父节点,新生成的tranform将会被添加到节点编辑器中。

    如果parentOrOwner参数是节点编辑器中的节点对象的话,就会创建一个新的mesh,parentOrOwner将会成为他的父节点。

    Parameters:

    numVertices:顶点数量

    numPolygons:多边形面数量

    vertexArray:顶点阵列。这个参数应该毫无例外的包括在mesh上的所有顶点,例如,一个cube模型的vertexArray应该是这样的:

                       { (-1,-1,-1), (1,-1,-1), (1,-1,1), (-1,-1,1), (-1,1,-1), (-1,1,1), (1,1,1), (1,1,-1) }

    polygonCounts:每个多边形面的顶点数量的阵列。例如:一个cube模型的polygonCounts应该是这样的:

                       {4,4,4,4,4,4}

    polygonConnects:每个多边形面的顶点连接顺序的阵列。例如:在一个cube模型中,每个面都会有四个顶点,所以我们把第一个面的顶点的索引到最后一个面的顶点的索引按顺序排列出来,一个cube模型的polygonConnects应该是这样的:

                       { 0, 1, 2, 3, 4, 5, 6, 7, 3, 2, 6, 5, 0, 3, 5, 4, 0, 4, 7, 1, 1, 7, 6, 2 }

    parentOrOwner:被创建出来的多边形的父对象。

    ReturnStatus:执行状态(成功或者失败?)

    Returns:

    如果parentOrOwner为空,那么就会返回这个表面的transform对象。

    如果parentOrOwner是DAG对象,那么就会返回一个新的surface shape对象。

    如果parentOrOwner是kMeshData的对象类型,那么就会返回一个表面几何体对象(MObejct)。

    Status Codes:

    MS::kSuccess:表示该方法执行成功。

    MS::kLicenseFailure:没有授权许可来执行操作。

    MS::kInvalidParameter:有这几种可能的状态:

                                                                      阵列长度并未匹配给定的条目数量。

                                                                      parenOrOwner不可用。

                                                                      当前没有模型让对象添加进去。

    MS::kFailure:发生一个对象错误。

    MS::kInsufficientMemory:内存不足以执行当前方法。

     


  • 相关阅读:
    函数与方法(方法前 +
    1362 : 修补木桶 -- 最长的最短边
    149. Max Points on a Line *HARD* 求点集中在一条直线上的最多点数
    148. Sort List -- 时间复杂度O(n log n)
    133. Clone Graph 138. Copy List with Random Pointer 拷贝图和链表
    debug && release
    静态库 && 动态库
    枚举
    获取当前用户所使用的是什么浏览器
    java实现在图片上编辑文本内容
  • 原文地址:https://www.cnblogs.com/hksac/p/5138640.html
Copyright © 2011-2022 走看看