由于最近要修改一个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. HTML 点击图片放大

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. prometheus告警函数

    PromQL基础     http_request_total{} 瞬时向量表达式,选择当前最新的数据 http_request_total{}[5m] 区间向量表达式,选择以当前时间为基准,5分钟内 ...

  3. 使用cookie记录页面跳转次数,然后从最后一级页面跳转回首页面

    1.首先,给出cookie设置,获取,删除的操作函数. function setCookie(name,value) {          var Days = 30;          var ex ...

  4. IIS+NGINX 负载web服务器

    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在 ...

  5. Android设备终端监控可能用到的工具

    先记录工具,以后详细分析 add-property-tagcheck-lost+foundcpueatercpustatsdaemonizedexdumpdirectiotestfiokexecloa ...

  6. Autotools setting

    ./configure CFLAGS="-ggdb3 -O0" CXXFLAGS="-ggdb3 -O0" LDFLAGS="-ggdb3" ...

  7. [BZOJ1406]密码箱

    Problem 给你1个数n,求出0 ≤ x < n,并且x ^ 2 % n = 1 Solution x ^ 2 - 1 = kn,(x - 1) * (x + 1) = kn 所以枚举n的约 ...

  8. Mac配置系统环境变量

    最近在配置flutter的环境变量,使用: export PATH=$PATH:`pwd`/flutter/bin 然后一段时间之后发现环境变量莫名其妙的就消失了,这里有一个大坑! !!!!Mac 系 ...

  9. Oracle物化视图梳理

    --物化视图可以分为三种类型:* 包含聚集的物化视图* 只包含连接的物化视图* 嵌套物化视图三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大. --物化视图创建方式(Build M ...

  10. 使用GraphHttpClient调用Microsoft Graph接口 - POST

    博客地址:http://blog.csdn.net/FoxDave 本篇接上一讲,我们继续看如何通过GraphHttpClient创建一个Office 365的组,需要使用POST请求. 为结果添加按 ...