進入maya C++ API插件開發。我只是想創建一個插件,當插件作爲hello world插件運行時,它會生成單位大小爲1的多維數據集。如何在maya API中創建多邊形C++
我該怎麼做?似乎缺乏關於如何做簡單事情的教程。我已經看過Maya API C++示例,但是沒有關於這些示例所做的描述,我可以看到。
進入maya C++ API插件開發。我只是想創建一個插件,當插件作爲hello world插件運行時,它會生成單位大小爲1的多維數據集。如何在maya API中創建多邊形C++
我該怎麼做?似乎缺乏關於如何做簡單事情的教程。我已經看過Maya API C++示例,但是沒有關於這些示例所做的描述,我可以看到。
我已經使用Python API 2.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類。
您可以在這裏找到一個更完整的文檔:
基本上,生成自己的網格,你需要三樣東西:
所以,在一個立方體,我們將有:
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個頂點(所以由四邊形組成)。
最後是最後一個數組。
使用這一個,你將描述不僅需要使用女巫頂點來繪製每個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
對象來創建具有給定屬性的新目。
在這個例子中,我沒有爲這個單位立方體構建UV,以避免增加這個例子的複雜性。
所以,如果你打開紫外線編輯器選定的立方體,不會出現紫外線。
這不是什麼大問題,因爲您可以按照自己喜歡的方式創建UV並展開多邊形,但是如果您想創建即使是UV,該過程也幾乎相同,除了您還需要調用方法assignUV
實際將UV應用於多邊形。
警告
這個過程只創建網格,和其他任何東西。
這意味着當您執行此代碼時,視口中的網格將爲綠色,這意味着沒有着色器被分配給網格。
與完整的例子 https://gist.github.com/andrearastelli/fb297e6cac8cb745e90c273e7ff53a1d
一個片段