2017-02-06 50 views
0

私は特定の頂点でメッシュオブジェクトの頂点法線を抽出しようとしています。私は、Maya Pythonコマンドの代わりにPython APIを使用すると、結果が違うことに気付きました。maya api対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の通常の振る舞いは、すべてを返すことです。これは、複数の顔の一部である場合、同じ質問に対する複数の回答となる、その頂点に関連する法線のすべてです。 CMDSとしてインポートmaya.cmds polyCube

バニラに例えば cmds.polyNormalPerVertex( 'pCube1.vtx [0]'、Q =真、normalXYZ = TRUE) #結果:[-1.0、0.0、0.0、 0.0、0.0、1.0、0.0、-1.0、0.0]#

VERTは、3つの異なる面の一部であるからです。

getVertexNormalへのAPIコールはaccording to the docs、通常の平均を返します。

あなたは、両端にvertexFacesを使用する場合は、より良い運を持っている必要があります - それらはあまり曖昧です。

+0

ご回答ありがとうございます。しかし、 'polyNormalPerVertex'の結果の平均化でさえ、' getVertexNormal'によって返されたベクトルと同じではありません(そして、私はすべてのパラメータの組み合わせを試しました)。彼らは同じではありませんか? – user2635364

+0

正しい重み付け関数を選択した場合は同じ値にする必要がありますが、その値は尋ねるたびに再計算されます。たとえば、同じ面の反対側にあるvertを動かした場合などに変更できます。 – theodox

関連する問題