Модификатор подключаемого модуля 3ds Max C++ — сохранение данных топологии для модификаторов

Сейчас я пытаюсь найти способ избежать перестройки топологии MNMesh в каждом кадре во время анимации. Каждый раз, когда я начинаю с ModifyObject, я получаю новую новую сетку, которая ничем не была затронута, а затем я выполняю сабдив в своем модификаторе. После завершения и возврата к моему модификатору для другого прохода исходная сетка остается неизмененной.

Что я хотел бы сделать, так это сохранить указатель в моем модификаторе на данные лица и данные сопоставления. Если топология или настройки моих модификаторов не изменятся, я бы хотел просто повторно использовать эти указатели на эти данные. Это повысит производительность, поэтому единственное, что нужно обновить, — это данные вершин.

Проблема в том, что когда мой модификатор закончен, 3ds max очищает данные лица MNMesh и данные сопоставления. Указатель в конечном итоге указывает на мусорные данные.

Есть ли способ предотвратить удаление данных Face и Map при каждом вызове моего модификатора?

Спасибо за ваше время.


person agrafft    schedule 19.05.2014    source источник


Ответы (1)


В конце концов, я нашел решение для себя ...

На данный момент в PolyObject я вызываю ConvertToType для TriObject и сохраняю его, поскольку он создает новый объект, а не просто дает мне указатель на старый (тогда Макс не удаляет его). Затем в следующем цикле я проверяю, не изменилось ли что-нибудь, если нет, то я вызываю FreeChannels для объекта, переданного 3ds, для каналов, которые я передаю. Затем я использую ShallowCopy для тех же каналов, но это только создает указатели на эту информацию. для переданного объекта и будет удален, когда он будет передан обратно Максу. После ShallowCopy, чтобы предотвратить удаление, я вызываю NewAndCopyChannels на тех каналах, которые дадут этим указателям свои собственные данные, чтобы они указывали, чтобы мой сохраненный объект не был удален.

Так что на данный момент это устраняет проблему, которая у меня была, я не уверен, что столкнусь с чем-то еще, связанным с этим изменением, но это было исправление оптимизации, которое мне было нужно.

person agrafft    schedule 20.05.2014