Всем привет.
Хочу разработать физический 3D движок, в связи с этим возникает много вопросов.
Вот как я себе это представляю (поправьте меня, если я не прав):
Движок состоит из двух частей:
1. определение столкновение объектов;
2. определение результата столкновения (ну что происходит с объектом вращение, движение и т.п.).
Определение результатов столкновения – это всё рассчитывается по формулам из физики, например, соударяются два цилиндра, берём вращение и движение обоих цилиндров, берём точку, в которой происходит столкновение, и рассчитываем, в зависимости от расстоянии между этой точкой до центра масс, дальнейшее движение, вращение. Так же для того, что определить угол, куда будет изменяться вращение, знать нормально этого вектора, что заставляет нас заранее знать этот вектор (то есть хранить для каждого полигона модели), либо высчитывать его каким-то образом.
Определение столкновения объектов – здесь нужно определить произошло ли соударение объектов (сфер, кубы, цилиндра, плоскость, сетчатая модель) и к какой точке произошло соударение.
Вот задача нам нужно определить произошло ли соударение, летящей пули с моделью человека.
Решение: мы ограничиваем модель сначала в общий куб (здесь определяем попала ли пуля в габариты модели), дальше делаем ещё ограничивающие кубы (или другие объекты) для того что бы определить в голову попали или в руку. Ну а потом уже в выбранной области проверяем, в какой непосредственно полигон модели попали.. Всё это делается для того, чтобы разумеется сократить расчеты и сэкономить ресурсы компьютера.
А вот вопрос возникает в том, что как рассчитывать соударение объекта с поверхностью, с землёй?
Соударение сферы, цилиндра, куба проблем как бы нет, мы знаем их радиус, вершины и просчитываем, но опять, при не ровной поверхности понадобится каждый полигон участка, куда падает модель проверять?
Опять же задача: вот падает сетчатая модель, неправильной формы, на землю, пусть пока в виде плоскости.
Нужно определить, как эта модель будет взаимодействовать с землей?
Прогонять все полигоны модели и участка, куда падает модель, а сколько для этого ресурсов понадобится для ресурсов? Как можно оптимизировать?
Необходимо ли хранить вектор нормали для каждого полигона? Можно ли это оптимизировать?
Вот вопросы, на которые, я надеюсь, вы поможете мне разобраться.
P.S. Нашёл на форуме, что у MagicWolf есть книга Morgan.Kaufmann,.Game.Physics.(2004).LRN.LotB.pdf.
Огромная просьба залить ещё раз, если есть возможность.