Noi*_*oir 7 opengl 3d jogl bullet jbullet
我只是想知道是否有办法将子弹物理学应用于opengl绘制的对象(使用glVertex3f创建或使用glVertexAttribPointer创建三角形网格).我目前正在使用jogl和jbullet将物理应用到我的3D对象.具体来说,如果我为3d对象的三角形网格形状提供顶点缓冲区.我需要Bullet来创建基于三角形网格形状的CollisionShape,并将物理应用于它,同时将物理应用于绘制的opengl对象.此刻,物理碰撞形状可能会移动(在子弹中),但绘制的opengl形状不是.
否则,我可以创建碰撞形状,在每个模拟步骤之后应用物理后获取碰撞形状的顶点,然后根据顶点的位置绘制对象.我已经看了看Hello World示例的子弹,但只帮我申请对OpenGL的对象(基于Z,Y,X axis_的位置物理学和不冷静之类的东西,例如立方体的一角打一个平面开始滚动和旋转.
如果有人能给我一些可以做到这一点的代码或演示,那就太棒了.或者给我一些关于如何使这项工作的提示.我已经在子弹上查看了这个教程:http://www.raywenderlich.com/53077/bullet-physics-tutorial-getting-started.但我似乎无法找到有关如何将子弹应用于opengl对象的信息.
下载Bullet Physics SDK之后,查看文件GL_ShapeDrawer.cpp,您会发现一些有趣的函数,例如drawSphere,drawCylinder,drawOpenGl。。我提到的最后一个函数可以绘制任何支持的形状:
shape-> getShapeType()中的每种形状都有其专用的函数,用于使用opengl进行渲染
但是我的方法涉及
个人而言,我使用Irrlicht是因为Irrlicht是opengl的“少写,多做”的解决方案:
项目符号2.83浏览器示例
Bullet示例浏览器已从examples/ExampleBrowser/GL_ShapeDrawer.cpp
默认情况下移开,后者使用了过时的即时 OpenGL 2方法。仍然可以根据NO_OPENGL3
宏和命令行参数的值将其打开。
OpenGLWindow/GLInstancingRenderer.cpp
是新的OpenGL 3渲染核心,并包含中的glBindVertexArray
调用GLInstancingRenderer::registerShape
。
从中间接调用此方法OpenGLGuiHelper::autogenerateGraphicsObjects
,该方法会在中的对象上循环btDiscreteDynamicsWorld
并生成这些形状的图形版本。
转换的核心部分似乎是OpenGLGuiHelper::createCollisionShapeGraphicsObjectInternal
。
对象的颜色只是从中循环了4种可能的颜色OpenGLGuiHelper::sColors
。
autogenerateGraphicsObjects
从initPhysics
几个示例中被调用。
在以下位置,还有一些显式编码的多维数据集和球体:SimpleOpenGL3App.cpp
如果您希望图形不同于物理的可能性(例如每个严肃的项目都应如此),它们可以作为起点:图形应该更详细,因为它们是减少计算成本。这些仅在几个示例中使用。
如果要研究示例浏览器,我建议将IDE与调试器一起使用:从我的大脑静态分析来看,它太多了。我已经使用KDevelop4进行了此分析。
归档时间: |
|
查看次数: |
6706 次 |
最近记录: |