Как нарисовать / визуализировать тело / форму тела пули?

Я реализовал механизм Bullet Physics в своей программе Android с помощью NDK (я использую пример воображения Vuforia для Android), и он настроен и работает правильно, однако я хотел бы сделать / нарисовать мои столбики / самолеты, чтобы увидеть мои Жесткие тела (btRigidBody) / collision shapes (btCollisionShape), я уверен, что это возможно, но я не могу найти никаких учебников о том, как это сделать!

Я прочитал учебник по физике мира «Пуля» на своей странице вики и модифицировал его, чтобы применить преобразования от падающего физического тела к 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); } 

EDIT: глядя на код для btBoxShape, я заметил, что вы можете захватить верхушки и нормали коробки:

 btVector3** vertices= wallShape->getVertices(); btVector3**normals = wallShape->getNormals(); 

Но вы не можете захватить список индексов, чтобы нарисовать вершинные точки в определенном порядке!

Если я правильно помню, это не правильный способ рисовать отладочные фигуры в Bullet. Вы прочитали руководство пользователя (PDF) , стр. 16?

Вы должны реализовать свой собственный класс ящиков отладки, который реализует btIDebugDraw , и в этом классе вы реализуете метод drawLine .

Вы передаете этот ящик отладки на пулю с помощью setDebugDrawer , а затем включите его с помощью world->getDebugDrawer->setDebugMode(debugMode);

Чтобы нарисовать мир, вызовите world->debugDrawWorld() ;

Это затем вызывает drawLine на вашей пользовательской функции много раз, пока не будет создана каркасная модель мира физики.