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 ...
随机推荐
- LeetCode--017--电话号码的字母组合(java)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出:[&quo ...
- Django框架(七)
15 Django组件-中间件 中间件 中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的 ...
- 2015-10-06 认识jQuery1
jQue ...
- linux软件管理 YUM命令
yum的优点 将所有软件包放到官方服务器上,当进行yum在线安装时可以自动解决依赖性问题 yum源文件 [root@ssgao1987 yum.repos.d]# cd /etc/yum.repos. ...
- [Leetcode 78]求子集 Subset
[题目] Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The ...
- CSS图形——实现圆角
css实现圆角 css2.1给元素添加圆角是一件很麻烦的事,老办法是用背景图片实现,制作比较麻烦.css3,border-radius的属性,使圆角属性得到完美的解决. 语法 border-radiu ...
- 经典的Foo和getName
搜了下经典的Foo和getName的题目,看了几个解释,懒得看,自己解一下,作为笔记. function Foo(){ getName = function(){ console.log(1); }; ...
- centos 安装桌面系统
yum -y groupinstall "Desktop" "Desktop Platform" "X Window System" &qu ...
- java正则表达式appendReplacement和appendTail方法
appendReplacement是java中替换相应字符串的一个方法 appendReplacement(StringBuffer sb,String replacement) 将当前匹配子串替换为 ...
- Windows10 VS2017 C++ Server Socket简单服务器端与客户端
服务端: #include "pch.h" #include<iostream> #include<WinSock2.h> #include <Ws2 ...