diff --git a/Demos/GimpactTestDemo/GimpactTestDemo.cpp b/Demos/GimpactTestDemo/GimpactTestDemo.cpp index 3408ce33c..17841ef8c 100644 --- a/Demos/GimpactTestDemo/GimpactTestDemo.cpp +++ b/Demos/GimpactTestDemo/GimpactTestDemo.cpp @@ -408,7 +408,7 @@ void GimpactConcaveDemo::initPhysics() //btOverlappingPairCache* broadphase = new btSimpleBroadphase(); //m_broadphase = new btSimpleBroadphase(); - LONG maxProxies = 1024; + int maxProxies = 1024; btVector3 worldAabbMin(-10000,-10000,-10000); btVector3 worldAabbMax( 10000, 10000, 10000); m_broadphase = new bt32BitAxisSweep3(worldAabbMin,worldAabbMax,maxProxies); @@ -645,7 +645,7 @@ void GimpactConcaveDemo::clientMoveAndDisplay() //#endif //float dt = float(m_clock.getTimeMicroseconds()) * dts; //0.000001f; - float dt = float(m_clock.getTimeMicroseconds()) * 0.000001f; + float dt = btScalar(1./60.); diff --git a/Demos/GimpactTestDemo/Jamfile b/Demos/GimpactTestDemo/Jamfile index 5917391de..6145c8bb4 100644 --- a/Demos/GimpactTestDemo/Jamfile +++ b/Demos/GimpactTestDemo/Jamfile @@ -6,11 +6,11 @@ SubDir TOP Demos GimpactTestDemo ; { Application $(<) : $(>) : noinstall console nomanifest ; - LinkWith $(<) : GIMPACT bulletopenglsupport bulletdynamics bulletcollision bulletmath ; + LinkWith $(<) : GIMPACTUtils GIMPACT bulletopenglsupport bulletdynamics bulletcollision bulletmath ; CFlags $(<) : [ FIncludes $(TOP)/Demos/OpenGL ] [ FIncludes $(TOP)/Extras/GIMPACT/include ] - + [ FIncludes $(TOP)/Extras/GIMPACTUtils ] ; MsvcIncDirs $(<) : diff --git a/Demos/OpenGL/GL_ShapeDrawer.cpp b/Demos/OpenGL/GL_ShapeDrawer.cpp index 65254b293..922d86c4e 100644 --- a/Demos/OpenGL/GL_ShapeDrawer.cpp +++ b/Demos/OpenGL/GL_ShapeDrawer.cpp @@ -4,8 +4,8 @@ Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. @@ -47,144 +47,84 @@ subject to the following restrictions: #include "BMF_Api.h" #include //printf debugging -class GlDrawcallback : public btTriangleCallback -{ -public: - bool m_wireframe; - - virtual void processTriangle(btVector3* triangle,int partId, int triangleIndex) - { - if (m_wireframe) - { - glBegin(GL_LINES); - glColor3f(1, 0, 0); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(0, 1, 0); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(0, 0, 1); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glEnd(); - } else - { - btVector3 diff1 = triangle[1] - triangle[0]; - btVector3 diff2 = triangle[2] - triangle[0]; - btVector3 normal = diff1.cross(diff2); - normal.normalize(); - glBegin(GL_TRIANGLES); - glColor3f(1.0f, 0.3f, 0.6f); - glNormal3d(normal.getX(),normal.getY(),normal.getZ()); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glColor3f(1.0f, 0.3f, 0.6f); - glNormal3d(normal.getX(),normal.getY(),normal.getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(1.0f, 0.3f, 0.6f); - glNormal3d(normal.getX(),normal.getY(),normal.getZ()); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glEnd(); - } - } -}; - -class GlDrawcallback_plane : public btTriangleCallback -{ -public: - bool m_wireframe; - - virtual void processTriangle(btVector3* triangle,int partId, int triangleIndex) - { - if(m_wireframe) - { - glDisable(GL_CULL_FACE); - glBegin(GL_LINES); - glColor3f(0.5, 0, 1); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(0.5, 0, 1); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(0.5, 0, 1); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glEnd(); - } - else - { - glBegin(GL_TRIANGLES); - glColor3f(0.4, -0.4, 0.5); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - - glColor3f(0.4, -0.4, 1.0); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - - glColor3f(0.4, -0.4, 0.5); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glEnd(); - } - } -}; - - - -class TriangleGlDrawcallback : public btInternalTriangleIndexCallback -{ -public: - virtual void internalProcessTriangleIndex(btVector3* triangle,int partId,int triangleIndex) - { - glBegin(GL_TRIANGLES);//LINES); - glColor3f(1, 0, 0); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(0, 1, 0); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(0, 0, 1); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glEnd(); - } -}; - - - -#define USE_DISPLAY_LISTS 1 +//#define USE_DISPLAY_LISTS 1 #ifdef USE_DISPLAY_LISTS +#include + +using namespace std; + //Set for storing Display list per trimesh struct TRIMESH_KEY { btCollisionShape* m_shape; - GLuint m_dlist;//OpenGL display list - GLuint m_dlist_wireframe;//OpenGL display list - - inline bool operator <(const TRIMESH_KEY& other) const - { - return (m_shape < other.m_shape); - } - - inline bool operator >(const TRIMESH_KEY& other) const - { - return (m_shape > other.m_shape); - } + GLuint m_dlist;//OpenGL display list }; -typedef btAlignedObjectArray TRIMESH_KEY_MAP; +typedef map TRIMESH_KEY_MAP; + +typedef pair TRIMESH_KEY_PAIR; TRIMESH_KEY_MAP g_display_lists; -TRIMESH_KEY * OGL_get_displaylist_for_shape(btCollisionShape * shape) +class GlDisplaylistDrawcallback : public btTriangleCallback { - if(g_display_lists.size()==0) return 0; +public: - TRIMESH_KEY searchkey; - searchkey.m_shape = shape; - - int map_iter = g_display_lists.findBinarySearch(searchkey); - if(map_iter < g_display_lists.size()) + virtual void processTriangle(btVector3* triangle,int partId, int triangleIndex) { - return &g_display_lists[map_iter]; + + btVector3 diff1 = triangle[1] - triangle[0]; + btVector3 diff2 = triangle[2] - triangle[0]; + btVector3 normal = diff1.cross(diff2); + + normal.normalize(); + + glBegin(GL_TRIANGLES); + glColor3f(0, 1, 0); + glNormal3d(normal.getX(),normal.getY(),normal.getZ()); + glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); + + glColor3f(0, 1, 0); + glNormal3d(normal.getX(),normal.getY(),normal.getZ()); + glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); + + glColor3f(0, 1, 0); + glNormal3d(normal.getX(),normal.getY(),normal.getZ()); + glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); + glEnd(); + + /*glBegin(GL_LINES); + glColor3f(1, 1, 0); + glNormal3d(normal.getX(),normal.getY(),normal.getZ()); + glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); + glNormal3d(normal.getX(),normal.getY(),normal.getZ()); + glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); + glColor3f(1, 1, 0); + glNormal3d(normal.getX(),normal.getY(),normal.getZ()); + glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); + glNormal3d(normal.getX(),normal.getY(),normal.getZ()); + glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); + glColor3f(1, 1, 0); + glNormal3d(normal.getX(),normal.getY(),normal.getZ()); + glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); + glNormal3d(normal.getX(),normal.getY(),normal.getZ()); + glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); + glEnd();*/ + + + } +}; + +GLuint OGL_get_displaylist_for_shape(btCollisionShape * shape) +{ + TRIMESH_KEY_MAP::iterator map_iter; + + unsigned long key = (unsigned long)shape; + map_iter = g_display_lists.find(key); + if(map_iter!=g_display_lists.end()) + { + return map_iter->second.m_dlist; } return 0; @@ -192,119 +132,51 @@ TRIMESH_KEY * OGL_get_displaylist_for_shape(btCollisionShape * shape) void OGL_displaylist_clean() { - int map_iter = g_display_lists.size(); + TRIMESH_KEY_MAP::iterator map_iter,map_itend; - while(map_iter--) + map_iter = g_display_lists.begin(); + + while(map_iter!=map_itend) { - glDeleteLists(g_display_lists[map_iter].m_dlist,1); - glDeleteLists(g_display_lists[map_iter].m_dlist_wireframe,1); + glDeleteLists(map_iter->second.m_dlist,1); + map_iter++; } g_display_lists.clear(); } -TRIMESH_KEY * OGL_displaylist_register_shape(btCollisionShape * shape) -{ - btVector3 aabbMax(1e30f,1e30f,1e30f); - btVector3 aabbMin(-1e30f,-1e30f,-1e30f); - GlDrawcallback drawCallback; +void OGL_displaylist_register_shape(btCollisionShape * shape) +{ + btVector3 aabbMax(btScalar(1e30),btScalar(1e30),btScalar(1e30)); + btVector3 aabbMin(-btScalar(1e30),-btScalar(1e30),-btScalar(1e30)); + GlDisplaylistDrawcallback drawCallback; TRIMESH_KEY dlist; dlist.m_dlist = glGenLists(1); - dlist.m_dlist_wireframe = glGenLists(1); dlist.m_shape = shape; - if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE) + unsigned long key = (unsigned long)shape; + + g_display_lists.insert(TRIMESH_KEY_PAIR(key,dlist)); + + glNewList(dlist.m_dlist,GL_COMPILE); + + glEnable(GL_CULL_FACE); + + glCullFace(GL_BACK); + + if (shape->isConcave()) { - btConcaveShape* concaveMesh = (btConcaveShape*) shape; - //Draw - glNewList(dlist.m_dlist,GL_COMPILE); - glDisable(GL_CULL_FACE); - drawCallback.m_wireframe = false; + btConcaveShape* concaveMesh = (btConcaveShape*) shape; + //todo pass camera, for some culling concaveMesh->processAllTriangles(&drawCallback,aabbMin,aabbMax); - glEndList(); - - //Draw wireframe - glNewList(dlist.m_dlist_wireframe,GL_COMPILE); - glDisable(GL_CULL_FACE); - drawCallback.m_wireframe = true; - concaveMesh->processAllTriangles(&drawCallback,aabbMin,aabbMax); - glEndList(); - } - else if (shape->getShapeType() == GIMPACT_SHAPE_PROXYTYPE) - { - btConcaveShape* gimpactMesh = (btConcaveShape*) shape; - - //Draw - glNewList(dlist.m_dlist,GL_COMPILE); - //glEnable(GL_CULL_FACE); - //glCullFace(GL_BACK); - glDisable(GL_CULL_FACE); - drawCallback.m_wireframe = false; - gimpactMesh->processAllTriangles(&drawCallback,aabbMin,aabbMax); - //glDisable(GL_CULL_FACE); - glEndList(); - - //Draw wireframe - glNewList(dlist.m_dlist_wireframe,GL_COMPILE); - glDisable(GL_CULL_FACE); - drawCallback.m_wireframe = true; - gimpactMesh->processAllTriangles(&drawCallback,aabbMin,aabbMax); - glEndList(); - } - else if (shape->getShapeType() == STATIC_PLANE_PROXYTYPE) - { - GlDrawcallback_plane drawPlaneCallback; - btVector3 paabbMax(100.f,100.f,100.f); - btVector3 paabbMin(-100.f,-100.f,-100.f); - - btConcaveShape* planeshape = (btConcaveShape*) shape; - - //Draw - glNewList(dlist.m_dlist,GL_COMPILE); - glDisable(GL_CULL_FACE); - drawPlaneCallback.m_wireframe = false; - planeshape->processAllTriangles(&drawPlaneCallback,paabbMin,paabbMax); - glEndList(); - - //Draw wireframe - glNewList(dlist.m_dlist_wireframe,GL_COMPILE); - glDisable(GL_CULL_FACE); - drawPlaneCallback.m_wireframe = true; - planeshape->processAllTriangles(&drawPlaneCallback,paabbMin,paabbMax); - glEndList(); } - g_display_lists.push_back(dlist); - g_display_lists.heapSort(TRIMESH_KEY_MAP::less()); + glDisable(GL_CULL_FACE); - int inserted = g_display_lists.findBinarySearch(dlist); - - return &g_display_lists[inserted]; + glEndList(); } - -void OGL_draw_shape(btCollisionShape* shape, bool wireframe) -{ - TRIMESH_KEY * dlist = OGL_get_displaylist_for_shape(shape); - - if(dlist == 0) - { - dlist = OGL_displaylist_register_shape(shape); - } - if(wireframe) - { - glCallList(dlist->m_dlist_wireframe); - } - else - { - glCallList(dlist->m_dlist); - } - -} - - - #endif //USE_DISPLAY_LISTS void GL_ShapeDrawer::drawCoordSystem() { @@ -319,13 +191,13 @@ void GL_ShapeDrawer::drawCoordSystem() { glVertex3d(0, 0, 0); glVertex3d(0, 0, 1); glEnd(); - + } -/* + class GlDrawcallback : public btTriangleCallback { @@ -371,9 +243,8 @@ public: } } }; -*/ -/*class TriangleGlDrawcallback : public btInternalTriangleIndexCallback +class TriangleGlDrawcallback : public btInternalTriangleIndexCallback { public: virtual void internalProcessTriangleIndex(btVector3* triangle,int partId,int triangleIndex) @@ -394,11 +265,11 @@ public: glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); glEnd(); } -};*/ +}; void GL_ShapeDrawer::drawCylinder(float radius,float halfHeight, int upAxis) { - + glPushMatrix(); switch (upAxis) @@ -412,7 +283,7 @@ void GL_ShapeDrawer::drawCylinder(float radius,float halfHeight, int upAxis) glTranslatef(0.0, 0.0, -halfHeight); break; case 2: - + glTranslatef(0.0, 0.0, -halfHeight); break; default: @@ -421,17 +292,17 @@ void GL_ShapeDrawer::drawCylinder(float radius,float halfHeight, int upAxis) } } - + GLUquadricObj *quadObj = gluNewQuadric(); - //The gluCylinder subroutine draws a cylinder that is oriented along the z axis. - //The base of the cylinder is placed at z = 0; the top of the cylinder is placed at z=height. + //The gluCylinder subroutine draws a cylinder that is oriented along the z axis. + //The base of the cylinder is placed at z = 0; the top of the cylinder is placed at z=height. //Like a sphere, the cylinder is subdivided around the z axis into slices and along the z axis into stacks. - + gluQuadricDrawStyle(quadObj, (GLenum)GLU_FILL); gluQuadricNormals(quadObj, (GLenum)GLU_SMOOTH); - - + + gluCylinder(quadObj, radius, radius, 2.f*halfHeight, 15, 10); glPopMatrix(); gluDeleteQuadric(quadObj); @@ -440,9 +311,9 @@ void GL_ShapeDrawer::drawCylinder(float radius,float halfHeight, int upAxis) void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, const btVector3& color,int debugMode) { - - glPushMatrix(); - btglMultMatrix(m); + + glPushMatrix(); + btglMultMatrix(m); if (shape->getShapeType() == UNIFORM_SCALING_SHAPE_PROXYTYPE) { @@ -454,7 +325,7 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons 0,scalingFactor,0,0, 0,0,scalingFactor,0, 0,0,0,1}; - + drawOpenGL( (btScalar*)tmpScaling,convexShape,color,debugMode); } glPopMatrix(); @@ -476,12 +347,12 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons } else { //drawCoordSystem(); - + //glPushMatrix(); glEnable(GL_COLOR_MATERIAL); glColor3f(color.x(),color.y(), color.z()); - + bool useWireframeFallback = true; @@ -501,7 +372,7 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons case TRIANGLE_SHAPE_PROXYTYPE: case TETRAHEDRAL_SHAPE_PROXYTYPE: { - //todo: + //todo: // useWireframeFallback = false; break; } @@ -524,7 +395,7 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons drawCylinder(radius,halfHeight,upAxis); - + glPushMatrix(); glTranslatef(0.0, -halfHeight,0.0); glutSolidSphere(radius,10,10); @@ -561,8 +432,8 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons { const btCylinderShape* cylinder = static_cast(shape); int upAxis = cylinder->getUpAxis(); - - + + float radius = cylinder->getRadius(); float halfHeight = cylinder->getHalfExtents()[upAxis]; @@ -577,9 +448,9 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons }; } + - - + if (useWireframeFallback) { @@ -587,8 +458,8 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons if (shape->isPolyhedral()) { btPolyhedralConvexShape* polyshape = (btPolyhedralConvexShape*) shape; - - + + glBegin(GL_LINES); @@ -605,7 +476,7 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons } glEnd(); - + if (debugMode==btIDebugDraw::DBG_DrawFeaturesText) { glRasterPos3f(0.0, 0.0, 0.0); @@ -633,41 +504,37 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons char buf[12]; sprintf(buf," plane %d",i); BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),buf); - + } } - + } } #ifdef USE_DISPLAY_LISTS - if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE|| - shape->getShapeType() == GIMPACT_SHAPE_PROXYTYPE|| - shape->getShapeType() == STATIC_PLANE_PROXYTYPE) + + if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE||shape->getShapeType() == GIMPACT_SHAPE_PROXYTYPE) { - if((debugMode & btIDebugDraw::DBG_DrawWireframe)!=0) + GLuint dlist = OGL_get_displaylist_for_shape((btCollisionShape * )shape); + if (dlist) { - OGL_draw_shape((btCollisionShape *)shape,true); + glCallList(dlist); } else { - OGL_draw_shape((btCollisionShape *)shape,false); - } - - - } -#else - if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE||shape->getShapeType() == GIMPACT_SHAPE_PROXYTYPE) +#else + if (shape->isConcave())//>getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE||shape->getShapeType() == GIMPACT_SHAPE_PROXYTYPE) +// if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE) { - btConcaveShape* concaveMesh = (btTriangleMeshShape*) shape; - //btVector3 aabbMax(1e30f,1e30f,1e30f); - //btVector3 aabbMax(100,100,100);//1e30f,1e30f,1e30f); + btConcaveShape* concaveMesh = (btConcaveShape*) shape; + //btVector3 aabbMax(btScalar(1e30),btScalar(1e30),btScalar(1e30)); + //btVector3 aabbMax(100,100,100);//btScalar(1e30),btScalar(1e30),btScalar(1e30)); //todo pass camera, for some culling - btVector3 aabbMax(1e30f,1e30f,1e30f); - btVector3 aabbMin(-1e30f,-1e30f,-1e30f); + btVector3 aabbMax(btScalar(1e30),btScalar(1e30),btScalar(1e30)); + btVector3 aabbMin(-btScalar(1e30),-btScalar(1e30),-btScalar(1e30)); GlDrawcallback drawCallback; drawCallback.m_wireframe = (debugMode & btIDebugDraw::DBG_DrawWireframe)!=0; @@ -675,37 +542,25 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons concaveMesh->processAllTriangles(&drawCallback,aabbMin,aabbMax); } - else if (shape->getShapeType() == STATIC_PLANE_PROXYTYPE) - { - - GlDrawcallback_plane drawPlaneCallback; - btVector3 paabbMax(100.f,100.f,100.f); - btVector3 paabbMin(-100.f,-100.f,-100.f); - - btConcaveShape* planeshape = (btConcaveShape*) shape; - - drawPlaneCallback.m_wireframe = (debugMode & btIDebugDraw::DBG_DrawWireframe)!=0; - //Draw - glDisable(GL_CULL_FACE); - planeshape->processAllTriangles(&drawPlaneCallback,paabbMin,paabbMax); - } - - #endif +#ifdef USE_DISPLAY_LISTS + } + } +#endif if (shape->getShapeType() == CONVEX_TRIANGLEMESH_SHAPE_PROXYTYPE) { btConvexTriangleMeshShape* convexMesh = (btConvexTriangleMeshShape*) shape; - - //todo: pass camera for some culling + + //todo: pass camera for some culling btVector3 aabbMax(btScalar(1e30),btScalar(1e30),btScalar(1e30)); btVector3 aabbMin(-btScalar(1e30),-btScalar(1e30),-btScalar(1e30)); TriangleGlDrawcallback drawCallback; convexMesh->getStridingMesh()->InternalProcessAllTriangles(&drawCallback,aabbMin,aabbMax); } - + glDisable(GL_DEPTH_BUFFER_BIT); glRasterPos3f(0,0,0);//mvtx.x(), vtx.y(), vtx.z()); @@ -723,5 +578,5 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons // glPopMatrix(); } glPopMatrix(); - + } diff --git a/Demos/OpenGL/GL_ShapeDrawer.h b/Demos/OpenGL/GL_ShapeDrawer.h index 0c663fb39..84315d40b 100644 --- a/Demos/OpenGL/GL_ShapeDrawer.h +++ b/Demos/OpenGL/GL_ShapeDrawer.h @@ -28,7 +28,7 @@ class GL_ShapeDrawer static void drawCylinder(float radius,float halfHeight, int upAxis); }; -//void OGL_displaylist_register_shape(btCollisionShape * shape); +void OGL_displaylist_register_shape(btCollisionShape * shape); void OGL_displaylist_clean(); #endif //GL_SHAPE_DRAWER_H