С чего мне начать писать/использовать движок моделирования 3D-физики?
-
03-07-2019 - |
Вопрос
Мне нужно написать очень простой трехмерный физический симулятор на Java, где куб и сферы сталкиваются друг с другом, не более того.Я никогда не делал ничего подобного, с чего мне начать?Есть какая-нибудь документация о том, как это делается?какие библиотеки я мог бы использовать повторно?
Решение
Физика для программистов игр Грант Палмер (не Ява)
Физика2D (код Java)
Другие советы
Предполагая, что вы хотите начать, как это сделать, лучше всего начать с ручки и бумаги.Начните определять фокусные точки вашего приложения (например, сферу объектов, куб и т. д., правила, такие как гравитация, столкновение и т. д., определите иерархию объектов и т. д.).
Если вы знаете, как это сделать, и хотите получить представление о технологии, Swing — хороший вариант для создания пользовательских интерфейсов на Java.
Также загляните сюда: http://www.myphysicallab.com/
Урок 39 НеХе — хорошая отправная точка, он написан на C++, но теорию довольно легко понять.
Хорошая библиотека физики Java — jmephysicals (http://www.jmonkeyengine.com/jmeforum/index.php?topic=6459);он довольно прост в использовании и находится поверх ODE (http://www.ode.org/) и jmonkeyengine (http://www.jmonkeyengine.com), который дает вам график сцены (http://en.wikipedia.org/wiki/Scene_graph), опять же, то, что вам понадобится для чего-то помимо очень простого 3D-приложения.
Однако я не пользовался им какое-то время и вижу, что они не выпускались с конца 2007 года, поэтому не уверен, насколько активно сообщество сейчас.
Как насчет того, чтобы сначала определить класс физического объекта?Он имеет положение, скорость, массу и, возможно, подклассы с другими характеристиками, такими как форма, эластичность и т. д.
Затем создайте вселенную (класс), куда поместите эти физические объекты.Звучит забавно :)
Если вам нужно моделировать только сферы/круги и кубы, то все, что вам нужно, это немного векторной математики.
Например, для моделирования простой игры в бильярд каждый шар (сфера) должен иметь положение, трехмерную линейную скорость и трехмерный вектор линейного ускорения.Ваша симуляция будет включать в себя множество маленьких кадров, которые будут постоянно обновлять каждый шарик.Если два или более шаров сталкиваются, вы просто суммируете векторы и вычисляете новые скорости для всех шаров.Например, если мяч ударяется о стену, все, что требуется, — это перевернуть знак мяча, чтобы он отскочил назад...
Если вы хотите сделать это с нуля, то есть написать свой собственный физический движок, вам нужно будет знать все тонкости математики, чтобы добиться этого.Если у вас достаточно хорошее математическое образование, у вас будет преимущество, в противном случае впереди крутая кривая обучения.
Вы можете начать на этом форуме сообщества, чтобы собрать информацию о том, как все делается:gamedev.net
Конечно, вы можете использовать движок с открытым исходным кодом, например Огр если вы не хотите писать свой собственный код.
Посмотрите физику пули. BulletPhysics.com это форум или проверьте проект на Sourceforge.