Войти
RoboGame blog [RIP]ЖурналКатегории

физика

Смотрите также категорию физика для всех разделов

Подводные камни физикса
Занимаюсь своим редактором. Реализовываю перемещение и поворот объектов. Перемещение работает отлично а вот поворот начал давать на статических объектах интересный глюк – после большого количества поворотов шейпы статического объекта начали не совпадать с их матрицей поворота (та что возвращается функцией getGlobalOrientation).

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

Изображение

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

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

Изображение

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

Решение проблемы было простое – при создании NxActor в редакторе все статические объекты создаются как динамические с флагом NX_BF_KINEMATIC. После этого глюки волшебном образом исчезли! Объекты можно вертеть сколько хочешь и они не рассинхронизируются со своими физическими оболочками :)

Изображение

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

Ссылка | Комментарии [5]
23 апр. 2009

Физика: разрушение роботов
Вот снял маленький ролик, показывающий разрушение роботов. Хоть пока спец-эффектов и нету, но какое-никакое представление даёт:

Ссылка | Комментарии [2]
17 фев. 2009

Это вам не ВАЛЛ-И!
Провожу тесты подвески и гусеничного хода робота. По сути подбираю набор хаков физ двига :)

Вот так балванчик умеет гонять:

Изображение

Ссылка | Комментарии [2]
8 янв. 2009

Физика: первые тесты
Чтож пока с рендером я решил завязать. На очереди – иерархия объектов.
class ageRenderObject
{
};

class agePhysicsObject
{
};

class ageSceneObject
{
  class ageRenderObject;
  class agePhysicsObject;
};

Вот, поднимаясь по иерархии вверх я создал класс ageSceneObject который включает в себя отрисовочный объект ageRenderObject (с которым я работал ранее) а также объект физического движка agePhysicsObject. В нём (ageSceneObject) происходит их синхронизация. Новонаписанный класс agePhysicsObject является просто обёрткой над классом физикса NxActor, и имеет специфический для моего движка функционал. Как например загрузка физической оболочки из файла.

Естественно вручную задавать оболочки это очень плохая идея. Поэтому я потратил пару дней на изучение плагинов и программ для их визуального создания и остановился бесплатном редакторе Scythe (http://www.physicseditor.com/)

Что я могу про него сказать? Хороший, интуитивно понятный редактор и прозрачный формат выходного файла. Конечно для загрузки оболочек можно использовать и их API, однако там очень много лишнего, поэтому я написал свой загрузчик их формата (благо его описание присутствует на их сайте в разделе downloads)

Вот видео того, что получилось:

И тоже самое но с отладочной информацией:

Ссылка | Комментарии [2]
19 дек. 2008

Архив