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

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

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

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

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

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

0

Решение

Я закончил тем, что выяснил решение для себя …

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

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

0

Другие решения