2 #include "GLDebugDrawer.h"
3 #include "GLDebugFont.h"
8 #include <stdio.h> //printf debugging
9 GLDebugDrawer::GLDebugDrawer()
15 void GLDebugDrawer::drawLine(const btVector3
& from
,const btVector3
& to
,const btVector3
& fromColor
, const btVector3
& toColor
)
18 glColor3f(fromColor
.getX(), fromColor
.getY(), fromColor
.getZ());
19 glVertex3d(from
.getX(), from
.getY(), from
.getZ());
20 glColor3f(toColor
.getX(), toColor
.getY(), toColor
.getZ());
21 glVertex3d(to
.getX(), to
.getY(), to
.getZ());
25 void GLDebugDrawer::drawLine(const btVector3
& from
,const btVector3
& to
,const btVector3
& color
)
27 drawLine(from
,to
,color
,color
);
30 void GLDebugDrawer::drawSphere (const btVector3
& p
, btScalar radius
, const btVector3
& color
)
32 glColor4f (color
.getX(), color
.getY(), color
.getZ(), btScalar(1.0f
));
34 glTranslatef (p
.getX(), p
.getY(), p
.getZ());
40 for(i
= 0; i
<= lats
; i
++) {
41 btScalar lat0
= SIMD_PI
* (-btScalar(0.5) + (btScalar
) (i
- 1) / lats
);
42 btScalar z0
= radius
*sin(lat0
);
43 btScalar zr0
= radius
*cos(lat0
);
45 btScalar lat1
= SIMD_PI
* (-btScalar(0.5) + (btScalar
) i
/ lats
);
46 btScalar z1
= radius
*sin(lat1
);
47 btScalar zr1
= radius
*cos(lat1
);
49 glBegin(GL_QUAD_STRIP
);
50 for(j
= 0; j
<= longs
; j
++) {
51 btScalar lng
= 2 * SIMD_PI
* (btScalar
) (j
- 1) / longs
;
52 btScalar x
= cos(lng
);
53 btScalar y
= sin(lng
);
55 glNormal3f(x
* zr0
, y
* zr0
, z0
);
56 glVertex3f(x
* zr0
, y
* zr0
, z0
);
57 glNormal3f(x
* zr1
, y
* zr1
, z1
);
58 glVertex3f(x
* zr1
, y
* zr1
, z1
);
66 void GLDebugDrawer::drawBox (const btVector3
& boxMin
, const btVector3
& boxMax
, const btVector3
& color
, btScalar alpha
)
68 btVector3 halfExtent
= (boxMax
- boxMin
) * btScalar(0.5f
);
69 btVector3 center
= (boxMax
+ boxMin
) * btScalar(0.5f
);
70 //glEnable(GL_BLEND); // Turn blending On
71 //glBlendFunc(GL_SRC_ALPHA, GL_ONE);
72 glColor4f (color
.getX(), color
.getY(), color
.getZ(), alpha
);
74 glTranslatef (center
.getX(), center
.getY(), center
.getZ());
75 glScaled(2*halfExtent
[0], 2*halfExtent
[1], 2*halfExtent
[2]);
76 // glutSolidCube(1.0);
78 //glDisable(GL_BLEND);
81 void GLDebugDrawer::drawTriangle(const btVector3
& a
,const btVector3
& b
,const btVector3
& c
,const btVector3
& color
,btScalar alpha
)
83 // if (m_debugMode > 0)
85 const btVector3 n
=btCross(b
-a
,c
-a
).normalized();
86 glBegin(GL_TRIANGLES
);
87 glColor4f(color
.getX(), color
.getY(), color
.getZ(),alpha
);
88 glNormal3d(n
.getX(),n
.getY(),n
.getZ());
89 glVertex3d(a
.getX(),a
.getY(),a
.getZ());
90 glVertex3d(b
.getX(),b
.getY(),b
.getZ());
91 glVertex3d(c
.getX(),c
.getY(),c
.getZ());
96 void GLDebugDrawer::setDebugMode(int debugMode
)
98 m_debugMode
= debugMode
;
102 void GLDebugDrawer::draw3dText(const btVector3
& location
,const char* textString
)
104 glRasterPos3f(location
.x(), location
.y(), location
.z());
105 //BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),textString);
108 void GLDebugDrawer::reportErrorWarning(const char* warningString
)
110 printf("%s\n",warningString
);
113 void GLDebugDrawer::drawContactPoint(const btVector3
& pointOnB
,const btVector3
& normalOnB
,btScalar distance
,int lifeTime
,const btVector3
& color
)
117 btVector3 to
=pointOnB
+normalOnB
*distance
;
118 const btVector3
&from
= pointOnB
;
119 glColor4f(color
.getX(), color
.getY(), color
.getZ(),1.f
);
120 //glColor4f(0,0,0,1.f);
123 glVertex3d(from
.getX(), from
.getY(), from
.getZ());
124 glVertex3d(to
.getX(), to
.getY(), to
.getZ());
128 glRasterPos3f(from
.x(), from
.y(), from
.z());
130 sprintf(buf
," %d",lifeTime
);
131 //BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),buf);