О копировании нормали из одного меша в другой с помощью maxscript

Есть сетки, закрытые друг от друга. Мне нужно скопировать нормаль из одной сетки в другую с помощью maxscript. Целевые вершины - это точки в одном и том же положении. Но результат странный, даже значение normal одинаковое, направление неверное. Я пробовал некоторые методы, чтобы получить/установить нормальное значение в координатах мира/локальных/родительских.. Но это не имеет смысла. Как я могу получить правильный результат?


person ifeuille    schedule 16.06.2020    source источник


Ответы (2)


Два меша должны выполнить "reset xform"... Или мы можем преобразовать нормаль A в мир, чтобы получить worldNormal. Затем преобразовать worldNormal в локальное пространство B, чтобы получить normalB...

person ifeuille    schedule 17.06.2020

Возможно, вы захотите попробовать использовать модификатор Edit_Normal для указания явных нормалей. https://help.autodesk.com/view/3DSMAX/2020/ENU/?guid=GUID-9F33B780-7A98-4638-BD00-A1725FA1DB70

В соответствии с этой документацией, если вы используете setFaceNormal для настройки нормалей непосредственно на вашей сетке,

Как только вы запускаете update() для сетки, это значение перезаписывается.

https://help.autodesk.com/view/3DSMAX/2020/ENU/?guid=GUID-58D1F8B6-0012-4727-AA29-B2C79EA46E16

Однако, похоже, это не работает для нормалей вершин, этого может быть достаточно для вас?

Начиная с 3ds Max 2015, установка нормали вершины устанавливает нормаль как явную, поэтому она сохранит свое значение при обновлении сетки. В версиях до 3ds Max 2015 установка нормали вершины с помощью MAXScript имела очень кратковременный эффект, поскольку данные могли быть легко перезаписаны неявным пересчетом нормали на основе группы сглаживания при перерисовке окна просмотра или рендеринге сцены.

https://help.autodesk.com/view/3DSMAX/2020/ENU/?guid=GUID-BD473113-389F-4C96-BE07-217FF75796EF

person Jeremy    schedule 16.06.2020
comment
Спасибо. Я знаю, что вы имеете в виду. Но на самом деле значение normal правильное, а направление неправильное. Я решил эту проблему. Два меша должны сделать reset xform ... или мы можем преобразовать нормаль A в мир, чтобы получить worldNormal. Затем преобразовать worldNormal в локальное пространство B, чтобы получить нормаль B... - person ifeuille; 17.06.2020