我需要用 Java 编写一个非常简单的 3D 物理模拟器,立方体和球体相互碰撞,仅此而已。我从来没有做过这样的事情,我应该从哪里开始?关于如何完成的任何文档?我可以重复使用的任何库?
8 回答
Grant Palmer(非 Java)的游戏程序员物理学
Phys2D(Java 代码)
假设您想开始如何做,最好的开始方法是使用笔和纸。开始定义应用程序的焦点(如实体球体、立方体等,重力、碰撞等规则,决定对象的层次结构等......)
如果您知道如何做到这一点,并且想要了解技术方面的入门知识,那么 Swing 是用 Java 制作 UI 的不错选择。
NeHe 的第 39 课是一个很好的起点,它是用 C++ 编写的,但理论很容易理解。
一个不错的 java 物理库是 jmephysics ( 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 年底以来就没有发布过,所以不确定社区现在有多活跃。
首先为物理对象定义一个类怎么样?它具有位置、速度、质量以及可能具有其他特征(如形状、弹性等)的子类。
然后创建一个宇宙(类)来放置这些物理对象。听起来很有趣 :)
如果您只需要模拟球体/圆和立方体,那么您只需要一点向量数学。
例如,为了模拟一个简单的撞球游戏,每个球(球体)都有一个位置、3d 线速度和 3d 线加速度矢量。您的模拟将涉及许多不断更新每个球的小帧。如果两个或更多球相撞,您只需将向量相加并计算所有球的新速度。例如,如果一个球撞到墙上,所需要的只是翻转球的标志让它反弹回来......
如果您想从头开始执行此操作,即编写自己的物理引擎,则必须了解背后的数学原理才能完成此操作。如果你有相当好的数学背景,你就会有一个先机,否则就会有一个陡峭的学习曲线。
您可以从这个社区论坛开始收集有关如何完成的信息: gamedev.net
当然,如果您不想编写自己的代码,您可以使用像Ogre这样的开源引擎。
查看子弹物理学。 bulletphysics.com是论坛或查看 Sourceforge 上的项目。