由于最近要修改一个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:内存不足以执行当前方法。

maya中MFnMesh.h使用说明的翻译的更多相关文章

  1. 从Maya中把模型搬运至网页的过程

    虽然利用threejs来在网页中渲染3d模型不是第一次折腾了,但是还是遇到了各种问题.总结下我所遇到的问题,希望能给正在使用threejs的小伙伴一个帮助. 一.所使用的软件与开发环境 Maya201 ...

  2. 关于apue.3e中apue.h的使用

    关于apue.3e中apue.h的使用 近来要学一遍APUE第三版,并于此开博做为记录. 先下载源文件: # url: http://http//www.apuebook.com/code3e.htm ...

  3. cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西。

    cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西.

  4. 从Maya中导入LightMap到unity中

    导入步骤 1.在Maya中为每一个模型烘焙好帖图(tif格式),会发现烘焙好的图和UV是一一对应的 2.把模型和烘焙帖图导入到Unity中 3.选中材质,修改Shader为 Legacy Shader ...

  5. 彻底弄清c标准库中string.h里的常用函数用法

    在我们平常写的c/c++程序,一些算法题中,我们常常会用到c标准库中string.h文件中的函数,这些函数主要用于处理内存,字符串相关操作,是很有用的工具函数.而且有些时候,在笔试或面试中也会出现让你 ...

  6. 解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载

    解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载 当这两个头文件顺序颠倒时,编译会出现许多莫名其妙的错误,错误如下: 1>…\include\ws2def.h( ...

  7. Maya中提交Nuke工程到deadline中的方法

    在之前的一篇文中介绍了在maya中生成nuke工程脚本的方法,后来部门负责人希望更简单一些,能在那个功能面板里提交deadline农场渲染更好,这样就不用打开nuke手动提交了,省去了在两个软件直接来 ...

  8. Maya中输出alembic文件的方法

    Maya中输出alembic文件是有现成api调用的,与maya中大部分api一样,这个功能参数的传入是非常类似mel的,本质上讲都是kwargs类型的参数,所以我们传入的参数就需要整理成类似于mel ...

  9. Struts2页面开发中常用标签使用说明

    1. Struts2页面开发中常用标签使用说明 1.1.往action里传值的使用方式: <input name="userName" type="text&quo ...

随机推荐

  1. Python自学:第二章 注释

    #向大家问好 print("Hello Python People") 输出为 Hello Python People

  2. 利用Fiddler编写Jmeter接口测试

    利用Fiddler抓包APP应用接口,在Jmeter编写接口测试脚本 1.用Fiddler对Android用用进行抓包 Fiddler介绍: Fiddler是一款非常流行并且实用的http抓包工具,它 ...

  3. mysql 判断某字段是否包含中文

    SELECT col FROM table WHERE LENGTH(col) != CHAR_LENGTH(col) LENGTH() 函数:返回字符串的长度,已字节符为单位 CHAR_LENGTH ...

  4. Centos7部署kubernetes测试k8s应用(九)

    1.创建一个deployment [root@linux-node1 ~]# kubectl run net-test --image=alpine --replicas=2 sleep 360000 ...

  5. 类的构造器-init和new

    提到构造器,大家都会想到 __init__,那么__new__是什么?也是构造器. init 构造器 都很熟悉了,直接上代码 class MyClass(object): def __init__(s ...

  6. go语言常见问题总结

    go语言中的goroutine和其它语言中的coroutine有什么相同和不同? coroutine 意味着支持将控制转移到另一个协程的明确手段.也就是说,程序员在确定coroutine何时应该暂停执 ...

  7. 18-09-20 关于Xlrd和Xlwt的初步学习

    #一关于利用xlrd 打开Excel 读取数据的简单介绍import xlrd """ #1 xlrd 基础的用法:读取,获取sheet,获取内容,行数,列数def re ...

  8. java_opts 参数与JVM内存调优

    Linux修改catalina.sh文件 如: JAVA_OPTS=”-server -Dfile.encoding=UTF-8 -Xms=512m -Xmx1024m -XX:PermSize=12 ...

  9. ubuntu 网络配置

    检查网络配置命令:ifconfig 一.通过配置文件配置 新手没怎么用过Ubuntu,所以走了不少弯路,网上找了很多方法,大都没对我起到帮助作用,所以把自己的配置方法写一写. Ubuntu上连了两块网 ...

  10. CentOS上升级gcc编译器使支持C++11

    首先向博主致敬,好的东西拿来共享了,用一下不错. https://blog.csdn.net/clirus/article/details/62424517 0. 目标  最近在学习c++11,我本机 ...