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

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

bool  isEdgeSmooth              (int edgeId, MStatus *ReturnStatus=NULL) const

MStatus  setEdgeSmoothing        (int edgeId, bool smooth=true)

MStatus  cleanupEdgeSmoothing  ()

MStatus  createInPlace                (int numVertices, int numPolygons, const MFloatPointArray &vertexArray,

const MIntArray &polygonCounts, const MIntArray &polygonConnects)

MObject  generateSmoothMesh    (MObject parentOrOwner, MStatus *ReturnStatus)

MFnMesh                     (const MObject &object, MStatus *ret=NULL)

MObject  MFnMesh::create           (int numVertices,

int numPolygons,

const MFloatPointArray &vertexArray,

const MIntArray &polygonCounts,

constMIntArray &polygonConnects,

MObject prentOrOwner = MObeject::kNullObj,

MStatus * ReturnStatus =NULL)

Maya会根据提供的数据在节点编辑器中画出树形图。

时间: 2025-01-07 09:03:14

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

计算机中所有快捷键使用说明

以下是计算机中所有快捷键使用说明! 单独按Windows:显示或隐藏"开始"功能表 Windows+BREAK:显示"系统属性"对话框 Windows+D:显示桌面 Windows+M:最小化所有窗口 Windows+Shift+M:还原最小化的窗口 Windows+E:开启"资源管理器" Windows+F:查找文件或文件夹 Windows+CTRL+F:查找电脑 Windows+F1:显示Windows"帮助" Windo

Android_08手机联系人编码中SimpleAdapter的使用说明

1. SimpleAdapter  adapter = new SimpleAdapter(this, list1,R.layout.my_layout, new String[] { "name", "keyvalue" },new int[] { R.id.tv_name, R.id.tv_info }); lv_search.setAdapter(adapter); 解释: 一)this:(1).当存放在自己的class中并且被自己调用时,就用this:而且这

Unity3D技术之从 Maya 中导入对象浅析

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 从 Maya 中导入对象 Unity 可直接导入 Maya 文件.开始时只需将 .mb 或 .ma 文件放到工程的资源 ( Assets) 文件夹下. 切换回 Unity 时,场景自动导入并显示在工程视图 (Project view) 中. 要在 Unity 中查看模型,只需将其从工程视图 (P

Maya中输出alembic文件的方法

Maya中输出alembic文件是有现成api调用的,与maya中大部分api一样,这个功能参数的传入是非常类似mel的,本质上讲都是kwargs类型的参数,所以我们传入的参数就需要整理成类似于mel的命令行形式. 首先我们来看mel中如何导出ablembic文件,mel命令格式为: AbcExport -j "-frameRange 1001 1148 -uvWrite -worldSpace -root |trk_track|trk_mesh|trk_ground -file D:/abc.

解决mac pro中三指轻按翻译的功能不起作用

mac pro中三指轻按翻译的功能不起作用了,这是为什么呢? 快捷键如下: command+contral+d 原因是pro和air不一样,air默认是开着的,pro需要设置 系统偏好设置-> 触控板 -> 取消"用力点按和触觉反馈" -> 选中"查找与数据监测器"(可以看到有用三个手指轻按) 然后用3个手指轻按了,就会翻译了,而无需用control+command+d快捷键了

如何让Maya中的相机和Unity相机的FOV(Angle of View)对上

问题: Unity中的Camera的FOV和Maya中Camera的Angle of View即使设置成相同值,预览时结果会有很大差异 原因: Unity Camera的FOV是Vertical FOV的角度 Maya Camera的Angle of View是Horizontal FOV的角度 解决方法 先保证Maya和Unity中的Aspect Ratio一致,然后再按照长宽比换算两者各自应该使用的FOV或者Angle of View. 例如按照下面的方式设置,即可实现两边完全一样 Unit

C++中的h文件与cpp文件

1.h文件的作用. 假设没有h文件,那么在一个类(class A)中,要用到class B中的方法与函数,那么我们就应该在class A的cpp文件中,加上"class A;",不对,这样的声明仅仅表示有一个类叫作A,却不能指明类A中的属性与方法,所以正确的声明应该是: 1 class A 2 { 3 public: 4 int zz; 5 void test(); 6 }; 这样才可以使用A的方法与属性.但是如果有很多个类,如类C.类D也需要的用到类A的方法与属性的话,那么将会有很多

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

关于apue.3e中apue.h的使用 近来要学一遍APUE第三版,并于此开博做为记录. 先下载源文件: 1 # url: http://http//www.apuebook.com/code3e.html 2 curl -O http://www.apuebook.com/src.3e.tar.gz 3 tar -zxvf src.3e.tar.gz 4 cd apue.3e 5 ls 从上面ls的结果看,其实完全看不明白这些目录与APUE书中代码的关系,或者有些目录可以猜测出是那一章.不过有

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

1. Struts2页面开发中常用标签使用说明 1.1.往action里传值的使用方式: <input name="userName" type="text" class="input6" size="15"> a. userName属性需要在访问的action中提供相应的属性,并有SET/GET方法. b. 可以不在访问的action中提供相应的属性,用request. getParameter_r(“userN