/* render/debugdrawer.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #include "render/debugdrawer.h" #include "render/gl.h" #include "sys/sys.h" namespace render { DebugDrawer bullet_debugdrawer; DebugDrawer::DebugDrawer() { debugdrawer_debugmode = btIDebugDraw::DBG_DrawWireframe + btIDebugDraw::DBG_DrawConstraints; } DebugDrawer::~DebugDrawer() { } void DebugDrawer::drawLine(const btVector3& from, const btVector3& to,const btVector3& color) { gl::color(color[0], color[1], color[2]); gl::vertex(from[0], from[1], from[2]); gl::vertex(to[0], to[1], to[2]); } void DebugDrawer::drawLine(const btVector3& from, const btVector3 & to, const btVector3 & fromColor, const btVector3 & toColor) { gl::color(fromColor[0], fromColor[1], fromColor[2]); gl::vertex(from[0], from[1], from[2]); gl::color(toColor[0], toColor[1], toColor[2]); gl::vertex(to[0], to[1], to[2]); } void DebugDrawer::drawContactPoint(const btVector3 & point, const btVector3 & normal, btScalar distance , int lifetime, const btVector3 & color) { } void DebugDrawer::drawSphere(btScalar radius, const btTransform & transform, const btVector3 & color) { btVector3 start = transform.getOrigin(); const btVector3 xoffs = transform.getBasis() * btVector3(radius,0,0); const btVector3 yoffs = transform.getBasis() * btVector3(0,radius,0); const btVector3 zoffs = transform.getBasis() * btVector3(0,0,radius); // XY drawLine(start-xoffs, start+yoffs, color); drawLine(start+yoffs, start+xoffs, color); drawLine(start+xoffs, start-yoffs, color); drawLine(start-yoffs, start-xoffs, color); // XZ drawLine(start-xoffs, start+zoffs, color); drawLine(start+zoffs, start+xoffs, color); drawLine(start+xoffs, start-zoffs, color); drawLine(start-zoffs, start-xoffs, color); // YZ drawLine(start-yoffs, start+zoffs, color); drawLine(start+zoffs, start+yoffs, color); drawLine(start+yoffs, start-zoffs, color); drawLine(start-zoffs, start-yoffs, color); } void DebugDrawer::drawSphere(const btVector3 & p, btScalar radius, const btVector3 & color) { btTransform tr; tr.setIdentity(); tr.setOrigin(p); drawSphere(radius,tr,color); } void DebugDrawer::drawBox(const btVector3 & bbMin, const btVector3 & bbMax, const btVector3 & color) { gl::color(color[0], color[1], color[2]); drawLine(btVector3(bbMin[0], bbMin[1], bbMin[2]), btVector3(bbMax[0], bbMin[1], bbMin[2]), color); drawLine(btVector3(bbMax[0], bbMin[1], bbMin[2]), btVector3(bbMax[0], bbMax[1], bbMin[2]), color); drawLine(btVector3(bbMax[0], bbMax[1], bbMin[2]), btVector3(bbMin[0], bbMax[1], bbMin[2]), color); drawLine(btVector3(bbMin[0], bbMax[1], bbMin[2]), btVector3(bbMin[0], bbMin[1], bbMin[2]), color); drawLine(btVector3(bbMin[0], bbMin[1], bbMin[2]), btVector3(bbMin[0], bbMin[1], bbMax[2]), color); drawLine(btVector3(bbMax[0], bbMin[1], bbMin[2]), btVector3(bbMax[0], bbMin[1], bbMax[2]), color); drawLine(btVector3(bbMax[0], bbMax[1], bbMin[2]), btVector3(bbMax[0], bbMax[1], bbMax[2]), color); drawLine(btVector3(bbMin[0], bbMax[1], bbMin[2]), btVector3(bbMin[0], bbMax[1], bbMax[2]), color); drawLine(btVector3(bbMin[0], bbMin[1], bbMax[2]), btVector3(bbMax[0], bbMin[1], bbMax[2]), color); drawLine(btVector3(bbMax[0], bbMin[1], bbMax[2]), btVector3(bbMax[0], bbMax[1], bbMax[2]), color); drawLine(btVector3(bbMax[0], bbMax[1], bbMax[2]), btVector3(bbMin[0], bbMax[1], bbMax[2]), color); drawLine(btVector3(bbMin[0], bbMax[1], bbMax[2]), btVector3(bbMin[0], bbMin[1], bbMax[2]), color); } void DebugDrawer::drawBox(const btVector3 & bbMin, const btVector3 & bbMax, const btTransform & trans, const btVector3 & color) { gl::color(color[0], color[1], color[2]); drawLine(trans * btVector3(bbMin[0], bbMin[1], bbMin[2]), trans * btVector3(bbMax[0], bbMin[1], bbMin[2]), color); drawLine(trans * btVector3(bbMax[0], bbMin[1], bbMin[2]), trans * btVector3(bbMax[0], bbMax[1], bbMin[2]), color); drawLine(trans * btVector3(bbMax[0], bbMax[1], bbMin[2]), trans * btVector3(bbMin[0], bbMax[1], bbMin[2]), color); drawLine(trans * btVector3(bbMin[0], bbMax[1], bbMin[2]), trans * btVector3(bbMin[0], bbMin[1], bbMin[2]), color); drawLine(trans * btVector3(bbMin[0], bbMin[1], bbMin[2]), trans * btVector3(bbMin[0], bbMin[1], bbMax[2]), color); drawLine(trans * btVector3(bbMax[0], bbMin[1], bbMin[2]), trans * btVector3(bbMax[0], bbMin[1], bbMax[2]), color); drawLine(trans * btVector3(bbMax[0], bbMax[1], bbMin[2]), trans * btVector3(bbMax[0], bbMax[1], bbMax[2]), color); drawLine(trans * btVector3(bbMin[0], bbMax[1], bbMin[2]), trans * btVector3(bbMin[0], bbMax[1], bbMax[2]), color); drawLine(trans * btVector3(bbMin[0], bbMin[1], bbMax[2]), trans * btVector3(bbMax[0], bbMin[1], bbMax[2]), color); drawLine(trans * btVector3(bbMax[0], bbMin[1], bbMax[2]), trans * btVector3(bbMax[0], bbMax[1], bbMax[2]), color); drawLine(trans * btVector3(bbMax[0], bbMax[1], bbMax[2]), trans * btVector3(bbMin[0], bbMax[1], bbMax[2]), color); drawLine(trans * btVector3(bbMin[0], bbMax[1], bbMax[2]), trans * btVector3(bbMin[0], bbMin[1], bbMax[2]), color); } void DebugDrawer::reportErrorWarning(const char *warningString) { con_warn << warningString << std::endl; } void DebugDrawer::draw3dText(const btVector3 &location, const char *textString) { } void DebugDrawer::setDebugMode(int debugMode) { debugdrawer_debugmode = debugMode; } int DebugDrawer::getDebugMode() const { return debugdrawer_debugmode; } } // namespace render