2017-02-06 92 views
0

我想提取特定頂點的網格對象的頂點法線。我注意到,當使用python API而不是maya python命令時,我得到了不同的結果。maya api vs python命令:頂點法線

Python命令(給我的結果,我想)

cmds.polyNormalPerVertex("<myshapename>.vtx[523]", q=True,normalXYZ=True) 

瑪雅的Python API調用(給我一個不同的結果)

# empty selection list 
selectionList = om.MSelectionList() 
selectionList.add(<myshapename>) 

# create empty dag path object 
dagPath = selectionList.getDagPath(0) 

# get mesh 
mesh = om.MFnTransform(dagPath) 

# get vertex normal 
mesh.getVertexNormal(523, False, space=om.MSpace.kWorld) 

我注意到這個差異當試圖提取其頂點在與另一個對象的接縫邊界上的對象時提取法線。瑪雅人的法線使用Polygons菜單集中的Normals > Average Normals進行平均。

我知道這很困難沒有一個示例對象,但我希望有人之前已經看到過這個問題。

任何人都可以提供這種差異的可能解釋嗎?

回答

1

我覺得你剛剛對你的CMDS電話很幸運。對於polyNormalPerVertex通常的行爲是返回所有與VERT相關法線的 - 這,如果是多張人臉的一部分,將有多個答案同樣的問題。例如在香草polyCube

進口maya.cmds作爲CMDS cmds.polyNormalPerVertex( 'pCube1.vtx [0]',Q =真,normalXYZ =真) #結果:[-1.0,0.0,0.0, 0.0,0.0,1.0,0.0,-1.0,0.0]#

由於VERT是三個不同的面的一部分。

的API調用getVertexNormal將返回正常平均值,according to the docs。那些是那麼模糊 -

,如果你在兩端使用vertexFaces你應該有更好的運氣。

+0

好的,謝謝你的回答。然而,即使平均來自'polyNormalPerVertex'的結果也不等於'getVertexNormal'返回的向量(並且我嘗試了所有參數組合)。他們不應該一樣嗎? – user2635364

+0

如果您選擇了正確的加權函數,它們應該是相同的 - 但是,如果您在同一面的另一側移動垂直線,則每次要求時都會重新計算,並且可能會發生變化。 – theodox