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:内存不足以执行当前方法。
maya中MFnMesh.h使用说明的翻译的更多相关文章
- 从Maya中把模型搬运至网页的过程
虽然利用threejs来在网页中渲染3d模型不是第一次折腾了,但是还是遇到了各种问题.总结下我所遇到的问题,希望能给正在使用threejs的小伙伴一个帮助. 一.所使用的软件与开发环境 Maya201 ...
- 关于apue.3e中apue.h的使用
关于apue.3e中apue.h的使用 近来要学一遍APUE第三版,并于此开博做为记录. 先下载源文件: # url: http://http//www.apuebook.com/code3e.htm ...
- cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西。
cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西.
- 从Maya中导入LightMap到unity中
导入步骤 1.在Maya中为每一个模型烘焙好帖图(tif格式),会发现烘焙好的图和UV是一一对应的 2.把模型和烘焙帖图导入到Unity中 3.选中材质,修改Shader为 Legacy Shader ...
- 彻底弄清c标准库中string.h里的常用函数用法
在我们平常写的c/c++程序,一些算法题中,我们常常会用到c标准库中string.h文件中的函数,这些函数主要用于处理内存,字符串相关操作,是很有用的工具函数.而且有些时候,在笔试或面试中也会出现让你 ...
- 解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载
解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载 当这两个头文件顺序颠倒时,编译会出现许多莫名其妙的错误,错误如下: 1>…\include\ws2def.h( ...
- Maya中提交Nuke工程到deadline中的方法
在之前的一篇文中介绍了在maya中生成nuke工程脚本的方法,后来部门负责人希望更简单一些,能在那个功能面板里提交deadline农场渲染更好,这样就不用打开nuke手动提交了,省去了在两个软件直接来 ...
- Maya中输出alembic文件的方法
Maya中输出alembic文件是有现成api调用的,与maya中大部分api一样,这个功能参数的传入是非常类似mel的,本质上讲都是kwargs类型的参数,所以我们传入的参数就需要整理成类似于mel ...
- Struts2页面开发中常用标签使用说明
1. Struts2页面开发中常用标签使用说明 1.1.往action里传值的使用方式: <input name="userName" type="text&quo ...
随机推荐
- 页面系统,浏览器检测- 网页基础模块(JavaScript)
// 浏览器检测,获取,弹出框提醒IE 返回浏览器详情 function GetbrowserSys() { var BrowserMatch = { init: function() { this. ...
- 多线程thread的使用
1.thread是多线程,凡是thread的子类都是一个线程. 2.thread必须调用start方法进开启线程,不能直接调用Runnable中的run方法,因为直接调用run方法没有创建新的线程,就 ...
- centos7系统运行级别简介
centos7系统运行级别简介我们知道,centos6及之前的版本中,系统运行级别通过/etc/inittab文件进行设置和控制,但在centos7中,对这个文件的设置将不会对系统运行级别产生影响,这 ...
- dubbo 异步回调
dubbo 异步回调的使用 业务接口: public interface HelloService { String sayHello(); void sayHi(String name); } 回调 ...
- vsCode---进行HTML文件编辑与浏览器运行
发现vsCode没有明显的绿色三角箭头指示程序运行. 那么想运行一个html文件咋办,可以直接去文件存放地用浏览器打开便可以了. 但是这样也挺麻烦的, 我们需要在vscode里商城搜索两个插件来支持我 ...
- 短信猫+kannel调试一例
同事做一短信网关平台,采用kannel软件. 安装正常,配置文件如下: # Vodafone 3G cardgroup = coreadmin-port = 13000admin-password = ...
- oracle中 trunc 处理日期的用法
方法/步骤 1 select trunc(sysdate) from dual 结果是 截止到当日 不设置,默认是截止到”日“ 2 select trunc(sysdate,'year') fr ...
- Win强制删除文件windows批处理强行删除文件
一般情况下选中文件或文件夹可以直接删除文件,但是有些情况下例如:文件非常规命名.找不到文件位置等就无法直接删除. 针对这种情况可以用 bat批处理文件 删除,一下就是该方法的步骤 新建一个文件:*** ...
- python继承和多态
继承 目标 单继承 多继承 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 继承 实现代码的重用,相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,产生不 ...
- postman操作练习用例
1.注册用户:http://api.nnzhp.cn/api/user/user_reg 2.登录用户:http://api.nnzhp.cn/api/user/login 3.添加学生:http:/ ...