我一直在摆弄子弹,现在我想绘制调试。我有一个带有工作子弹物理和一切的opengl世界。
我尝试过的是:我创建了一个像这样的类 GLDebugDrawer:
#include "LinearMath/btIDebugDraw.h"
class GLDebugDrawer : public btIDebugDraw
{
int m_debugMode;
public:
GLDebugDrawer();
virtual ~GLDebugDrawer();
virtual void drawLine(const btVector3& from, const btVector3& to, const btVector3& fromColor, const btVector3& toColor);
virtual void drawLine(const btVector3& from, const btVector3& to, const btVector3& color);
virtual void drawSphere(const btVector3& p, btScalar radius, const btVector3& color);
virtual void drawTriangle(const btVector3& a, const btVector3& b, const btVector3& c, const btVector3& color, btScalar alpha);
virtual void drawContactPoint(const btVector3& PointOnB, const btVector3& normalOnB, btScalar distance, int lifeTime, const btVector3& color);
virtual void reportErrorWarning(const char* warningString);
virtual void draw3dText(const btVector3& location, const char* textString);
virtual void setDebugMode(int debugMode);
virtual int getDebugMode() const { return m_debugMode; }
};
然后在游戏中我包含这个标题并创建它的一个实例。
在初始化 bt 世界的地方,我设置了调试绘制类型,如下所示:
debugDraw->DBG_DrawWireframe; // this breaks when I run the app
debugDraw->setDebugMode(btIDebugDraw::DBG_DrawWireframe); // so does this
debugDraw->setDebugMode(1); // this doesn't
然后我将调试设置为子弹世界,如下所示:
bt_dynamicsWorld->setDebugDrawer(debugDraw);
最后,我在渲染子弹体后渲染调试绘图,如下所示:
bt_dynamicsWorld->debugDrawWorld();
一定有一些我错过的东西,因为我在运行时没有得到任何线框或任何东西。