进入maya C++ API插件开发。我只想创建一个插件,当运行中的插件作为hello world插件运行时,生成一个单元大小为1的立方体。
我该怎么做?关于如何做简单的事情,似乎严重缺乏教程。我看过Maya C++示例,但是没有描述这些示例所做的事情。
发布于 2017-03-05 11:22:47
我使用PythonAPI2.0创建了这个示例,这样您就可以在脚本编辑器中执行它并对它进行播放,然后再使用C++ API,因为它实际上并没有给您提供相同的灵活性。
import maya.cmds as mc
import maya.api.OpenMaya as OpenMaya
mesh = OpenMaya.MFnMesh()
# Simple unitCube coordinates
vertices = []
vertices.append(OpenMaya.MPoint(1, 1, 1)) # 0
vertices.append(OpenMaya.MPoint(1, -1, 1)) # 1
vertices.append(OpenMaya.MPoint(1, -1, -1)) # 2
vertices.append(OpenMaya.MPoint(1, 1, -1)) # 3
vertices.append(OpenMaya.MPoint(-1, -1, 1)) # 4
vertices.append(OpenMaya.MPoint(-1, 1, 1)) # 5
vertices.append(OpenMaya.MPoint(-1, 1, -1)) # 6
vertices.append(OpenMaya.MPoint(-1, -1, -1)) # 7
# Number of vertices per polygon
polygonCounts = []
polygonCounts.append(4)
polygonCounts.append(4)
polygonCounts.append(4)
polygonCounts.append(4)
polygonCounts.append(4)
polygonCounts.append(4)
# How each group of N vertices per polygon is connected.
#
# Because for each vertex I have specified the list index number, I can use the
# same number to uniquely identify each face of the polygon to actually build
# the connection between each vertex.
polygonConnects = []
# First polygon
polygonConnects.append(0)
polygonConnects.append(1)
polygonConnects.append(2)
polygonConnects.append(3)
# Second polygon
polygonConnects.append(0)
polygonConnects.append(5)
polygonConnects.append(4)
polygonConnects.append(1)
# Third polygon
polygonConnects.append(5)
polygonConnects.append(6)
polygonConnects.append(7)
polygonConnects.append(4)
# Fourth polygon
polygonConnects.append(6)
polygonConnects.append(3)
polygonConnects.append(2)
polygonConnects.append(7)
# Fifth polygon
polygonConnects.append(0)
polygonConnects.append(3)
polygonConnects.append(6)
polygonConnects.append(5)
# Sixth polygon
polygonConnects.append(1)
polygonConnects.append(4)
polygonConnects.append(7)
polygonConnects.append(2)
mesh.create(vertices, polygonCounts, polygonConnects)在本例中:
MFnMesh是处理网格及其操作的API类。
您可以在这里找到更完整的文档:
基本上,要生成您自己的网格,您需要3件事情:
因此,在一个立方体中,我们将拥有:
6 * 4元素的第三个数组,因为对于每个面,我们有4个顶点。在单元多维数据集的情况下,第一个数组非常简单且不言自明:
vertices = []
vertices.append(OpenMaya.MPoint(1, 1, 1)) # 0
vertices.append(OpenMaya.MPoint(1, -1, 1)) # 1
vertices.append(OpenMaya.MPoint(1, -1, -1)) # 2
vertices.append(OpenMaya.MPoint(1, 1, -1)) # 3
vertices.append(OpenMaya.MPoint(-1, -1, 1)) # 4
vertices.append(OpenMaya.MPoint(-1, 1, 1)) # 5
vertices.append(OpenMaya.MPoint(-1, 1, -1)) # 6
vertices.append(OpenMaya.MPoint(-1, -1, -1)) # 7正如你所看到的,我有8个顶点,每个顶点都有相对于原点的特定坐标。
第二个数组也很简单。
polygonCounts = []
polygonCounts.append(4)
polygonCounts.append(4)
polygonCounts.append(4)
polygonCounts.append(4)
polygonCounts.append(4)
polygonCounts.append(4)在这里,我定义了我的立方体对于每个面都有4个顶点(所以是由四元组成的)。
最后一个数组。
用这张图,你不仅可以描述女巫顶点需要用来绘制每个四面面,还可以帮助你根据插入顶点ids的顺序来定义每个面的正常方向。
polygonConnects = []
# First polygon
polygonConnects.append(0)
polygonConnects.append(1)
polygonConnects.append(2)
polygonConnects.append(3)
# Second polygon
polygonConnects.append(0)
polygonConnects.append(5)
polygonConnects.append(4)
polygonConnects.append(1)
# Third polygon
polygonConnects.append(5)
polygonConnects.append(6)
polygonConnects.append(7)
polygonConnects.append(4)
# Fourth polygon
polygonConnects.append(6)
polygonConnects.append(3)
polygonConnects.append(2)
polygonConnects.append(7)
# Fifth polygon
polygonConnects.append(0)
polygonConnects.append(3)
polygonConnects.append(6)
polygonConnects.append(5)
# Sixth polygon
polygonConnects.append(1)
polygonConnects.append(4)
polygonConnects.append(7)
polygonConnects.append(2)因此,第一个面是用顶点构建的:[0, 1, 2, 3],由于它们在空间中的位置,这个顺序也定义了这个面的正常点指向[1, 0, 0]。
其他人的脸也是一样。
最后一行:
mesh.create(vertices, polygonCounts, polygonConnects)简单地告诉MFnMesh对象使用给定的属性创建一个新的网格。
在本例中,我还没有为这个单元多维数据集构建UV,以避免增加此示例的复杂性。
因此,如果您打开紫外线编辑器与选择的立方体,没有紫外线将显示。
这不是什么大问题,因为您可以创建UV并按您喜欢的方式展开多边形,但是如果您想创建甚至UV,这个过程几乎是一样的,除了您还需要调用方法assignUV来实际将UV应用到多边形。
警告
此过程只创建网格,以及其他任何内容。
这意味着当您执行此代码时,视图中的网格将是绿色的,这意味着没有为网格分配任何着色器。
带有完整示例https://gist.github.com/andrearastelli/fb297e6cac8cb745e90c273e7ff53a1d的片段
https://stackoverflow.com/questions/42286385
复制相似问题