我只是想知道是否有一种方法可以将子弹物理应用于 opengl 绘制的对象(使用 glVertex3f 或带有 glVertexAttribPointer 的三角形网格创建)。我目前正在使用 jogl 和 jbullet 将物理应用到我的 3D 对象。具体来说,如果我为 3d 对象的三角形网格形状提供顶点缓冲区。我需要 Bullet 基于三角形网格形状创建 CollisionShape,并将物理应用到它,同时将物理应用到绘制的 opengl 对象。目前,物理碰撞形状可能会移动(以子弹形式),但绘制的 opengl 形状不会移动。
否则,我可以创建一个碰撞形状,在每个模拟步骤后应用物理后获取碰撞形状的顶点,然后根据顶点的位置绘制对象。我已经查看了子弹的 Hello world 示例,但它只能帮助我将物理应用到 opengl 对象的位置(基于 z、y、x 轴),而不是很酷的东西,例如立方体的角撞击平面开始滚动和旋转。
如果有人能给我一些可以做到这一点的代码或演示,那就太好了。或者给我一些关于如何完成这项工作的提示。我已经看过这个关于子弹的教程:http://www.raywenderlich.com/53077/bullet-physical-tutorial-getting-started。但我似乎找不到有关如何将项目符号应用于 opengl 对象的信息。
下载 BulletPhysics SDK 后,查看文件 GL_ShapeDrawer.cpp,您会发现一些有趣的函数,例如drawSphere,drawCylinder,drawOpenGl..我提到的最后一个可以让您绘制任何类型的支持形状:
- CUSTOM_CONVEX_SHAPE_TYPE
- BOX_SHAPE_PROXYTYPE
- UNIFORM_SCALING_SHAPE_PROXYTYPE
- COMPOUND_SHAPE_PROXYTYPE
- BOX_SHAPE_PROXYTYPE
- SPHERE_SHAPE_PROXYTYPE
shape->getShapeType() 中的每种形状都有其自己的专用函数,用于使用 opengl 进行渲染
但我的方法涉及到
- 1 - 使用网格加载器加载 3D 模型
- 2 - 使用 opengl 函数创建图形形状
以前的网格加载器
- 3 - 从网格加载器使用的顶点创建子弹形状
- 4 - 实现子弹运动状态(当形状将变为
旋转或平移或只是“转换”,您可以同步
子弹形状的“btTransform”与变换矩阵
图形形状,然后更新图形顶点)
就我个人而言,我使用 Irrlicht 因为 Irrlicht 是 opengl 的“少写,多做”解决方案:p
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)