1
2 #include "gldebugdrawer.h"
3 // #include "GLDebugFont.h"
4 // #include "GlutStuff.h"
5
6
7
8 #include <stdio.h> //printf debugging
GLDebugDrawer()9 GLDebugDrawer::GLDebugDrawer()
10 :m_debugMode(0)
11 {
12
13 }
14
drawLine(const btVector3 & from,const btVector3 & to,const btVector3 & fromColor,const btVector3 & toColor)15 void GLDebugDrawer::drawLine(const btVector3& from,const btVector3& to,const btVector3& fromColor, const btVector3& toColor)
16 {
17 glBegin(GL_LINES);
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());
22 glEnd();
23 }
24
drawLine(const btVector3 & from,const btVector3 & to,const btVector3 & color)25 void GLDebugDrawer::drawLine(const btVector3& from,const btVector3& to,const btVector3& color)
26 {
27 // if (m_debugMode > 0)
28 {
29 glBegin(GL_LINES);
30 glColor4f(color.getX(), color.getY(), color.getZ(),1.f);
31 glVertex3d(from.getX(), from.getY(), from.getZ());
32 glVertex3d(to.getX(), to.getY(), to.getZ());
33 glEnd();
34 }
35 }
36
drawSphere(const btVector3 & p,btScalar radius,const btVector3 & color)37 void GLDebugDrawer::drawSphere (const btVector3& p, btScalar radius, const btVector3& color)
38 {
39 glColor4f (color.getX(), color.getY(), color.getZ(), btScalar(1.0f));
40 glPushMatrix ();
41 glTranslatef (p.getX(), p.getY(), p.getZ());
42
43 int lats = 5;
44 int longs = 5;
45
46 int i, j;
47 for(i = 0; i <= lats; i++) {
48 btScalar lat0 = SIMD_PI * (-btScalar(0.5) + (btScalar) (i - 1) / lats);
49 btScalar z0 = radius*sin(lat0);
50 btScalar zr0 = radius*cos(lat0);
51
52 btScalar lat1 = SIMD_PI * (-btScalar(0.5) + (btScalar) i / lats);
53 btScalar z1 = radius*sin(lat1);
54 btScalar zr1 = radius*cos(lat1);
55
56 glBegin(GL_QUAD_STRIP);
57 for(j = 0; j <= longs; j++) {
58 btScalar lng = 2 * SIMD_PI * (btScalar) (j - 1) / longs;
59 btScalar x = cos(lng);
60 btScalar y = sin(lng);
61
62 glNormal3f(x * zr0, y * zr0, z0);
63 glVertex3f(x * zr0, y * zr0, z0);
64 glNormal3f(x * zr1, y * zr1, z1);
65 glVertex3f(x * zr1, y * zr1, z1);
66 }
67 glEnd();
68 }
69
70 glPopMatrix();
71 }
72
drawBox(const btVector3 & boxMin,const btVector3 & boxMax,const btVector3 & color,btScalar alpha)73 void GLDebugDrawer::drawBox (const btVector3& boxMin, const btVector3& boxMax, const btVector3& color, btScalar alpha)
74 {
75 btVector3 halfExtent = (boxMax - boxMin) * btScalar(0.5f);
76 btVector3 center = (boxMax + boxMin) * btScalar(0.5f);
77 //glEnable(GL_BLEND); // Turn blending On
78 //glBlendFunc(GL_SRC_ALPHA, GL_ONE);
79 glColor4f (color.getX(), color.getY(), color.getZ(), alpha);
80 glPushMatrix ();
81 glTranslatef (center.getX(), center.getY(), center.getZ());
82 glScaled(2*halfExtent[0], 2*halfExtent[1], 2*halfExtent[2]);
83 // glutSolidCube(1.0);
84 glPopMatrix ();
85 //glDisable(GL_BLEND);
86 }
87
drawTriangle(const btVector3 & a,const btVector3 & b,const btVector3 & c,const btVector3 & color,btScalar alpha)88 void GLDebugDrawer::drawTriangle(const btVector3& a,const btVector3& b,const btVector3& c,const btVector3& color,btScalar alpha)
89 {
90 // if (m_debugMode > 0)
91 {
92 const btVector3 n=btCross(b-a,c-a).normalized();
93 glBegin(GL_TRIANGLES);
94 glColor4f(color.getX(), color.getY(), color.getZ(),alpha);
95 glNormal3d(n.getX(),n.getY(),n.getZ());
96 glVertex3d(a.getX(),a.getY(),a.getZ());
97 glVertex3d(b.getX(),b.getY(),b.getZ());
98 glVertex3d(c.getX(),c.getY(),c.getZ());
99 glEnd();
100 }
101 }
102
setDebugMode(int debugMode)103 void GLDebugDrawer::setDebugMode(int debugMode)
104 {
105 m_debugMode = debugMode;
106
107 }
108
draw3dText(const btVector3 & location,const char * textString)109 void GLDebugDrawer::draw3dText(const btVector3& location,const char* textString)
110 {
111 glRasterPos3f(location.x(), location.y(), location.z());
112 //BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),textString);
113 }
114
reportErrorWarning(const char * warningString)115 void GLDebugDrawer::reportErrorWarning(const char* warningString)
116 {
117 printf(warningString);
118 }
119
drawContactPoint(const btVector3 & pointOnB,const btVector3 & normalOnB,btScalar distance,int lifeTime,const btVector3 & color)120 void GLDebugDrawer::drawContactPoint(const btVector3& pointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color)
121 {
122
123 {
124 btVector3 to=pointOnB+normalOnB*distance;
125 const btVector3&from = pointOnB;
126 glColor4f(color.getX(), color.getY(), color.getZ(),1.f);
127 //glColor4f(0,0,0,1.f);
128
129 glBegin(GL_LINES);
130 glVertex3d(from.getX(), from.getY(), from.getZ());
131 glVertex3d(to.getX(), to.getY(), to.getZ());
132 glEnd();
133
134
135 glRasterPos3f(from.x(), from.y(), from.z());
136 char buf[12];
137 sprintf(buf," %d",lifeTime);
138 //BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),buf);
139
140
141 }
142 }
143
144
145
146
147
148