5 つの仮想関数を持つ抽象基本クラスを継承する必要があります。これらの 5 つの関数を実装しないと、「実装されていない場合、抽象クラス タイプのオブジェクトを割り当てています」というメッセージが表示されます。
派生クラスで宣言して実装すると、「アーキテクチャ i386 の未定義シンボル: "debugDrawer の vtable"、参照元: debugDrawer::debugDrawer() in debugDrawer.o 注: vtable が見つからない場合は、通常、最初の非インライン仮想メンバーを意味します。関数には定義がありません。」
class btIDebugDraw- Bullet Physics ライブラリの基本クラスは次のとおりです。
class btIDebugDraw
{
virtual void drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color)=0;
virtual void reportErrorWarning(const char* warningString) = 0;
virtual void draw3dText(const btVector3& location,const char* textString) = 0;
virtual void setDebugMode(int debugMode) =0;
virtual int getDebugMode() const = 0;
virtual void drawAabb(const btVector3& from,const btVector3& to,const btVector3& color)
}
派生クラス debugDrawer.h
class debugDrawer : public btIDebugDraw{
public:
debugDrawer();
void drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color);
void reportErrorWarning(const char* warningString);
void draw3dText(const btVector3& location,const char* textString);
void setDebugMode(int debugMode);
int getDebugMode() const;
void drawAabb(const btVector3& from,const btVector3& to,const btVector3& color);
void drawLine(const btVector3& from,const btVector3& to,const btVector3& color);
};
派生クラス debugDrawer.mm ファイル (目的の c を使用しているため、その .mm ファイル)
debugDrawer::debugDrawer(){
}
void debugDrawer::drawLine(const btVector3& from,const btVector3& to,const btVector3& color)
{
float tmp[ 6 ] = { from.getX(), from.getY(), from.getZ(),
to.getX(), to.getY(), to.getZ() };
glPushMatrix();
{
glColor4f(color.getX(), color.getY(), color.getZ(), 1.0f);
glVertexPointer( 3,
GL_FLOAT,
0,
&tmp );
glPointSize( 5.0f );
glDrawArrays( GL_POINTS, 0, 2 );
glDrawArrays( GL_LINES, 0, 2 );
}
glPopMatrix();
}
void drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color){
}
void reportErrorWarning(const char* warningString) {
}
void draw3dText(const btVector3& location,const char* textString) {
}
void setDebugMode(int debugMode){
}
int getDebugMode() {
return 0;
}
void drawAabb(const btVector3& from,const btVector3& to,const btVector3& color)
{
}