我已经使用NDK将Bullet Physics引擎实现到我的android程序中(我使用的是Vuforia's imagetarget示例),它已设置并正常工作,但是我想渲染/绘制我的碰撞盒/飞机看我的刚体(btRigidBody)/碰撞形状(btCollisionShape),我很肯定这是可能的,但我找不到任何关于如何做的教程!
我已经取了hello world Bullet physics tutorial on their wiki page并对其进行了修改,以便将坠落物理体的变换应用到我在opengl es 2.0中的3d对象中查看碰撞体,这里是我用来渲染的代码对象:
void drawRigidBody(btRigidBody* body,QCAR::Matrix44F modelViewMatrix, unsigned int textureID)
{
btTransform trans;
body->getMotionState()->getWorldTransform(trans);
LOG("sphere pos: (x %f , y %f, z %f)",trans.getOrigin().getX(),trans.getOrigin().getY(),trans.getOrigin().getZ());
float physicsMatrix[16];
trans.getOpenGLMatrix(physicsMatrix);
SampleUtils::scalePoseMatrix(kObjectScale, kObjectScale, kObjectScale,
&modelViewMatrix.data[0]);
QCAR::Matrix44F modelViewProjection, objectMatrix;
SampleUtils::multiplyMatrix(&modelViewMatrix.data[0], physicsMatrix, &objectMatrix.data[0]);
SampleUtils::multiplyMatrix(&projectionMatrix.data[0], &objectMatrix.data[0], &modelViewProjection.data[0]);
glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0,
(const GLvoid*) &signVerts[0]);
glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0,
(const GLvoid*) &signNormals[0]);
glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0,
(const GLvoid*) &signTexCoords[0]);
glEnableVertexAttribArray(vertexHandle);
glEnableVertexAttribArray(normalHandle);
glEnableVertexAttribArray(textureCoordHandle);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureID);
glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE,
(GLfloat*)&modelViewProjection.data[0] );
glDrawArrays(GL_TRIANGLES, 0, signNumVerts);
}
编辑:查看btBoxShape的代码,我注意到你可以抓住框顶点和法线:
btVector3** vertices= wallShape->getVertices();
btVector3**normals = wallShape->getNormals();
但是您无法获取索引列表以按特定顺序绘制顶点!
答案 0 :(得分:10)
如果我没记错,这不是在Bullet中绘制调试形状的正确方法。您是否阅读了user manual (PDF),第16页?
您应该实现自己的调试抽屉类,该类实现btIDebugDraw
,并在此类中实现drawLine
方法。
您将此调试抽屉传递给包含setDebugDrawer
的项目符号,然后使用world->getDebugDrawer->setDebugMode(debugMode);
启用它
要绘制世界,请致电world->debugDrawWorld()
;
然后多次在自定义函数上调用drawLine
,直到绘制出物理世界的线框模型。