如何在Maya API C 中创建多边形
How to create a polygon in maya API C++
进入Maya C API插件开发。我只想创建一个插件,该插件在运行插件作为一种Hello World插件时生成单位尺寸1的立方体。
我该怎么做?关于如何做简单的事情,似乎很严重的教程。我已经查看了Maya API C 示例,但是没有描述我可以看到的示例。
我已经使用python api 2.0创建了此示例,因此您可以在脚本编辑器中执行它并使用它,然后再使用C API,该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类。
您可以在这里找到一个更完整的文档:
- MFNMESH -PYTHON API 2.0
- MFNMESH -C API
基本上,要生成自己的网格,您需要3件事:
- 一个点(特别是mpoints)
- 每个脸的顶点计数数组
- 每个面的顶点ID数组。
所以,在立方体中,我们将有:
- 第一个具有8个元素的数组(因为一个立方体有8个顶点 - 我没有考虑到最终的细分)
- 第二个元素的第二个数组(因为立方体有6个面)
- 带有
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个顶点(由Quads组成)。
最后一个最后一个数组。
使用此
,您不仅需要使用巫婆顶点来绘制每个4面脸,还可以根据顶点ID的插入顺序来定义每个面部的正常方向。<<<<<<<<
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
对象使用给定属性创建一个新的网格。
在此示例中,我尚未为该单元立方体构建UVS,以避免在此示例中添加复杂性。
因此,如果您使用选定的立方体打开UV编辑器,则不会显示紫外线。
这没什么大不了的,因为您可以创建紫外线并按照自己喜欢的方式解开多边形,但是如果您想创建甚至紫外线,则过程几乎相同,除了您还需要调用该过程方法assignUV
实际将UV应用于多边形。
警告
此过程只会创建网格和其他任何东西。
这意味着当您执行此代码时,视口中的网格将为绿色,这意味着没有将着色器分配给网格。
一个带有完整示例的片段https://gist.github.com/andrearastelli/fb297e6cac8cb745e90c273e7ff53aa1d
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- (如何)在提升几何中创建自己的多边形类型并与之一起使用multi_polygon类型?
- OPENCV:如何创建多边形形状的掩码
- 如何在Maya API C 中创建多边形
- 如何创建多边形以在Cocos2DX中显示运行号
- 创建多个增强::多边形的并集的最快方法是什么
- 在Qt中创建一个开放的多边形(线条条)