我已經實現了子彈物理引擎到我的Android程序與NDK(我使用的是Android的Vuforia's imagetarget示例),它設置正常,但我想渲染/繪製我的碰撞盒/飛機到看到我的剛體(btRigidBody)/碰撞形狀(btCollisionShape),我很積極這是可能的,但我找不到任何教程如何做到這一點!如何繪製/渲染子彈物理碰撞體/形狀?
我已將hello world Bullet physics tutorial on their wiki page修改爲應用從墜落的物理物體到3d物體的轉換,我在opengl es 2.0中查看碰撞物體,這裏是我用來渲染物體的代碼:
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();
,但你不能搶指數列表中某個繪製頂點訂購!
這看起來像是我需要的,謝謝指針!不幸的是,我的C++很生疏(作爲一名Android開發人員,我一直主要使用java進行編程),我一直在用NDK代碼片段來解決問題,但看起來我不得不刷新編寫適當的C++類 – AndroidNoob 2012-08-17 11:32:04