gpt4 book ai didi

android - 如何绘制/渲染 Bullet Physics 碰撞体/形状?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:46 27 4
gpt4 key购买 nike

我已经使用 NDK 在我的 android 程序中实现了 Bullet Physics 引擎(我正在使用 Vuforia's imagetarget 示例 for android),并且它已设置并正常工作,但是我想渲染/绘制我的碰撞框/planes 查看我的刚体 (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();

但您无法获取索引列表以按特定顺序绘制顶点!

最佳答案

如果我没记错的话,这不是在 Bullet 中绘制调试形状的正确方法。你读过user manual (PDF)吗? , 第 16 页?

你应该实现你自己的调试抽屉类,它实现了 btIDebugDraw,并且在这个类中你实现了 drawLine 方法。

您使用 setDebugDrawer 将此调试抽屉传递给 bullet,然后使用 world->getDebugDrawer->setDebugMode(debugMode); 启用它

绘制世界,调用world->debugDrawWorld();

然后,这会在您的自定义函数上多次调用 drawLine,直到绘制出物理世界的线框模型。

关于android - 如何绘制/渲染 Bullet Physics 碰撞体/形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11985204/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com