2017-02-06 6 views
0

Я пытаюсь извлечь нормали вершины меш-объекта в определенной вершине. Я заметил, что я получаю разные результаты при использовании API python вместо команд майя python.maya api vs команды python: vertex normals

команды Python (дает мне результат я хочу):

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

Майя питон 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) 

Я заметил это несоответствие при попытке извлечь нормали на объект, вершины которого находятся на границе шва с другим объектом. Нормали усредняются по майе, используя Normals > Average Normals из набора меню Polygons.

Я знаю, что это трудно без примера объекта, но я надеюсь, что кто-то видел эту проблему раньше.

Может ли кто-нибудь дать возможное объяснение этому несоответствию?

ответ

1

Думаю, вам просто повезло с призывом к вашим вызовам. Обычным поведением для polyNormalPerVertex является возврат всех нормалей, связанных с вершиной, который, если он является частью более чем одного лица, будет многократным ответом на тот же вопрос. Например, на ваниль polyCube

импорт maya.cmds как CMDS cmds.polyNormalPerVertex ('pCube1.vtx [0]', д = Правда, normalXYZ = True) # Результат: [-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.

Вам должно быть повезло, если вы используете вершинные грани в обоих концах - они менее двусмысленны.

+0

ОК, спасибо за ваш ответ. Однако даже усреднение результатов из 'polyNormalPerVertex' не равно вектору, возвращаемому' getVertexNormal' (и я пробовал все комбинации параметров). Разве они не должны быть одинаковыми? – user2635364

+0

Они должны быть одинаковыми, если вы выберете правильную функцию взвешивания - но это будет пересчитано каждый раз, когда вы спрашиваете, и может измениться, если, например, вы перемещаете верт на другой стороне того же лица. – theodox