Initialize libbullet git in 2.0_beta.
[platform/upstream/libbullet.git] / Demos / OpenGL / GLDebugDrawer.cpp
1
2 #include "GLDebugDrawer.h"
3 #include "GLDebugFont.h"
4 #include "GlutStuff.h"
5
6
7
8 #include <stdio.h> //printf debugging
9 GLDebugDrawer::GLDebugDrawer()
10 :m_debugMode(0)
11 {
12
13 }
14
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
25 void    GLDebugDrawer::drawLine(const btVector3& from,const btVector3& to,const btVector3& color)
26 {
27         drawLine(from,to,color,color);
28 }
29
30 void GLDebugDrawer::drawSphere (const btVector3& p, btScalar radius, const btVector3& color)
31 {
32         glColor4f (color.getX(), color.getY(), color.getZ(), btScalar(1.0f));
33         glPushMatrix ();
34         glTranslatef (p.getX(), p.getY(), p.getZ());
35
36         int lats = 5;
37         int longs = 5;
38
39         int i, j;
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);
44
45                 btScalar lat1 = SIMD_PI * (-btScalar(0.5) + (btScalar) i / lats);
46                 btScalar z1 = radius*sin(lat1);
47                 btScalar zr1 = radius*cos(lat1);
48
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);
54
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);
59                 }
60                 glEnd();
61         }
62
63         glPopMatrix();
64 }
65
66 void GLDebugDrawer::drawBox (const btVector3& boxMin, const btVector3& boxMax, const btVector3& color, btScalar alpha)
67 {
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);
73         glPushMatrix ();
74         glTranslatef (center.getX(), center.getY(), center.getZ());
75         glScaled(2*halfExtent[0], 2*halfExtent[1], 2*halfExtent[2]);
76 //      glutSolidCube(1.0);
77         glPopMatrix ();
78         //glDisable(GL_BLEND);
79 }
80
81 void    GLDebugDrawer::drawTriangle(const btVector3& a,const btVector3& b,const btVector3& c,const btVector3& color,btScalar alpha)
82 {
83 //      if (m_debugMode > 0)
84         {
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());
92                 glEnd();
93         }
94 }
95
96 void    GLDebugDrawer::setDebugMode(int debugMode)
97 {
98         m_debugMode = debugMode;
99
100 }
101
102 void    GLDebugDrawer::draw3dText(const btVector3& location,const char* textString)
103 {
104         glRasterPos3f(location.x(),  location.y(),  location.z());
105         //BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),textString);
106 }
107
108 void    GLDebugDrawer::reportErrorWarning(const char* warningString)
109 {
110         printf("%s\n",warningString);
111 }
112
113 void    GLDebugDrawer::drawContactPoint(const btVector3& pointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color)
114 {
115         
116         {
117                 btVector3 to=pointOnB+normalOnB*1;//distance;
118                 const btVector3&from = pointOnB;
119                 glColor4f(color.getX(), color.getY(), color.getZ(),1.f);
120                 //glColor4f(0,0,0,1.f);
121                 glBegin(GL_LINES);
122                 glVertex3d(from.getX(), from.getY(), from.getZ());
123                 glVertex3d(to.getX(), to.getY(), to.getZ());
124                 glEnd();
125
126                 
127 //              glRasterPos3f(from.x(),  from.y(),  from.z());
128 //              char buf[12];
129 //              sprintf(buf," %d",lifeTime);
130                 //BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),buf);
131
132
133         }
134 }
135
136
137
138
139