Вот в исходном состоянии (оранжевыми линиями показано положение физической оболочки):

А вот после большого количества поворотов:

Что примечательно – при единичных поворотах – всё нормально. При простом перемещении такого глюка вообще замечено не было. Сначала я думал что это из-за накоплении ошибки в матрице - ортонормировал её, но проблема не исчезала… тем более было странно что на динамических объектах такого глюка не возникало! Начал курить доки и вот что я заметил:

Вы видите маленькое неприметное слово «dynamic»? Вот и я его заметил только после шестой зачитки документации. Начал гуглить проблему – оказывается у многих такие глюки замечены – на официальном сайте нвидии заметил 3 подобные темы. К слову которые остались без ответа. Вообщем после на официальном сайте нашёл мелким шрифтом надпись в FAQ что статические объекты НЕЛЬЗЯ двигать после их создания, т.к. они там очень хитро оптимизируются и при их передвижении придётся много чего перерасчитывать.
Решение проблемы было простое – при создании NxActor в редакторе все статические объекты создаются как динамические с флагом NX_BF_KINEMATIC. После этого глюки волшебном образом исчезли! Объекты можно вертеть сколько хочешь и они не рассинхронизируются со своими физическими оболочками :)

А теперь несколько риторических вопросов:
- Почему в документации нет никаких Warling! крупным красным шрифтом насчёт всего этого?
- Почему вообще библиотека физикса позволяет мне двигать и вращать статические объекты если это приводит к глюкам? Сэкономили на одной проверке if-ом?
- Почему мне не дают возможности «перерасчитывать чегото там» или отключать всю эту оптимизацию статических объектов по моему желанию? Ведь передвижение статических объектов в редакторе уровня – думаю обычная и часто встречающаяся задача.

Комментариев нет:
Отправить комментарий