diff options
Diffstat (limited to 'thirdparty/bullet/LinearMath/btIDebugDraw.h')
-rw-r--r-- | thirdparty/bullet/LinearMath/btIDebugDraw.h | 473 |
1 files changed, 0 insertions, 473 deletions
diff --git a/thirdparty/bullet/LinearMath/btIDebugDraw.h b/thirdparty/bullet/LinearMath/btIDebugDraw.h deleted file mode 100644 index df4db2ff5a..0000000000 --- a/thirdparty/bullet/LinearMath/btIDebugDraw.h +++ /dev/null @@ -1,473 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -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, -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. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef BT_IDEBUG_DRAW__H -#define BT_IDEBUG_DRAW__H - -#include "btVector3.h" -#include "btTransform.h" - -///The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations. -///Typical use case: create a debug drawer object, and assign it to a btCollisionWorld or btDynamicsWorld using setDebugDrawer and call debugDrawWorld. -///A class that implements the btIDebugDraw interface will need to provide non-empty implementations of the the drawLine and getDebugMode methods at a minimum. -///For color arguments the X,Y,Z components refer to Red, Green and Blue each in the range [0..1] -class btIDebugDraw -{ -public: - ATTRIBUTE_ALIGNED16(struct) - DefaultColors - { - btVector3 m_activeObject; - btVector3 m_deactivatedObject; - btVector3 m_wantsDeactivationObject; - btVector3 m_disabledDeactivationObject; - btVector3 m_disabledSimulationObject; - btVector3 m_aabb; - btVector3 m_contactPoint; - - DefaultColors() - : m_activeObject(1, 1, 1), - m_deactivatedObject(0, 1, 0), - m_wantsDeactivationObject(0, 1, 1), - m_disabledDeactivationObject(1, 0, 0), - m_disabledSimulationObject(1, 1, 0), - m_aabb(1, 0, 0), - m_contactPoint(1, 1, 0) - { - } - }; - - enum DebugDrawModes - { - DBG_NoDebug = 0, - DBG_DrawWireframe = 1, - DBG_DrawAabb = 2, - DBG_DrawFeaturesText = 4, - DBG_DrawContactPoints = 8, - DBG_NoDeactivation = 16, - DBG_NoHelpText = 32, - DBG_DrawText = 64, - DBG_ProfileTimings = 128, - DBG_EnableSatComparison = 256, - DBG_DisableBulletLCP = 512, - DBG_EnableCCD = 1024, - DBG_DrawConstraints = (1 << 11), - DBG_DrawConstraintLimits = (1 << 12), - DBG_FastWireframe = (1 << 13), - DBG_DrawNormals = (1 << 14), - DBG_DrawFrames = (1 << 15), - DBG_MAX_DEBUG_DRAW_MODE - }; - - virtual ~btIDebugDraw(){}; - - virtual DefaultColors getDefaultColors() const - { - DefaultColors colors; - return colors; - } - ///the default implementation for setDefaultColors has no effect. A derived class can implement it and store the colors. - virtual void setDefaultColors(const DefaultColors& /*colors*/) {} - - virtual void drawLine(const btVector3& from, const btVector3& to, const btVector3& color) = 0; - - virtual void drawLine(const btVector3& from, const btVector3& to, const btVector3& fromColor, const btVector3& toColor) - { - (void)toColor; - drawLine(from, to, fromColor); - } - - virtual void drawSphere(btScalar radius, const btTransform& transform, const btVector3& color) - { - btVector3 center = transform.getOrigin(); - btVector3 up = transform.getBasis().getColumn(1); - btVector3 axis = transform.getBasis().getColumn(0); - btScalar minTh = -SIMD_HALF_PI; - btScalar maxTh = SIMD_HALF_PI; - btScalar minPs = -SIMD_HALF_PI; - btScalar maxPs = SIMD_HALF_PI; - btScalar stepDegrees = 30.f; - drawSpherePatch(center, up, axis, radius, minTh, maxTh, minPs, maxPs, color, stepDegrees, false); - drawSpherePatch(center, up, -axis, radius, minTh, maxTh, minPs, maxPs, color, stepDegrees, false); - } - - virtual void drawSphere(const btVector3& p, btScalar radius, const btVector3& color) - { - btTransform tr; - tr.setIdentity(); - tr.setOrigin(p); - drawSphere(radius, tr, color); - } - - virtual void drawTriangle(const btVector3& v0, const btVector3& v1, const btVector3& v2, const btVector3& /*n0*/, const btVector3& /*n1*/, const btVector3& /*n2*/, const btVector3& color, btScalar alpha) - { - drawTriangle(v0, v1, v2, color, alpha); - } - virtual void drawTriangle(const btVector3& v0, const btVector3& v1, const btVector3& v2, const btVector3& color, btScalar /*alpha*/) - { - drawLine(v0, v1, color); - drawLine(v1, v2, color); - drawLine(v2, v0, color); - } - - virtual void drawContactPoint(const btVector3& PointOnB, const btVector3& normalOnB, btScalar distance, int lifeTime, const btVector3& color) = 0; - - virtual void reportErrorWarning(const char* warningString) = 0; - - virtual void draw3dText(const btVector3& location, const char* textString) = 0; - - virtual void setDebugMode(int debugMode) = 0; - - virtual int getDebugMode() const = 0; - - virtual void drawAabb(const btVector3& from, const btVector3& to, const btVector3& color) - { - btVector3 halfExtents = (to - from) * 0.5f; - btVector3 center = (to + from) * 0.5f; - int i, j; - - btVector3 edgecoord(1.f, 1.f, 1.f), pa, pb; - for (i = 0; i < 4; i++) - { - for (j = 0; j < 3; j++) - { - pa = btVector3(edgecoord[0] * halfExtents[0], edgecoord[1] * halfExtents[1], - edgecoord[2] * halfExtents[2]); - pa += center; - - int othercoord = j % 3; - edgecoord[othercoord] *= -1.f; - pb = btVector3(edgecoord[0] * halfExtents[0], edgecoord[1] * halfExtents[1], - edgecoord[2] * halfExtents[2]); - pb += center; - - drawLine(pa, pb, color); - } - edgecoord = btVector3(-1.f, -1.f, -1.f); - if (i < 3) - edgecoord[i] *= -1.f; - } - } - virtual void drawTransform(const btTransform& transform, btScalar orthoLen) - { - btVector3 start = transform.getOrigin(); - drawLine(start, start + transform.getBasis() * btVector3(orthoLen, 0, 0), btVector3(btScalar(1.), btScalar(0.3), btScalar(0.3))); - drawLine(start, start + transform.getBasis() * btVector3(0, orthoLen, 0), btVector3(btScalar(0.3), btScalar(1.), btScalar(0.3))); - drawLine(start, start + transform.getBasis() * btVector3(0, 0, orthoLen), btVector3(btScalar(0.3), btScalar(0.3), btScalar(1.))); - } - - virtual void drawArc(const btVector3& center, const btVector3& normal, const btVector3& axis, btScalar radiusA, btScalar radiusB, btScalar minAngle, btScalar maxAngle, - const btVector3& color, bool drawSect, btScalar stepDegrees = btScalar(10.f)) - { - const btVector3& vx = axis; - btVector3 vy = normal.cross(axis); - btScalar step = stepDegrees * SIMD_RADS_PER_DEG; - int nSteps = (int)btFabs((maxAngle - minAngle) / step); - if (!nSteps) nSteps = 1; - btVector3 prev = center + radiusA * vx * btCos(minAngle) + radiusB * vy * btSin(minAngle); - if (drawSect) - { - drawLine(center, prev, color); - } - for (int i = 1; i <= nSteps; i++) - { - btScalar angle = minAngle + (maxAngle - minAngle) * btScalar(i) / btScalar(nSteps); - btVector3 next = center + radiusA * vx * btCos(angle) + radiusB * vy * btSin(angle); - drawLine(prev, next, color); - prev = next; - } - if (drawSect) - { - drawLine(center, prev, color); - } - } - virtual void drawSpherePatch(const btVector3& center, const btVector3& up, const btVector3& axis, btScalar radius, - btScalar minTh, btScalar maxTh, btScalar minPs, btScalar maxPs, const btVector3& color, btScalar stepDegrees = btScalar(10.f), bool drawCenter = true) - { - btVector3 vA[74]; - btVector3 vB[74]; - btVector3 *pvA = vA, *pvB = vB, *pT; - btVector3 npole = center + up * radius; - btVector3 spole = center - up * radius; - btVector3 arcStart; - btScalar step = stepDegrees * SIMD_RADS_PER_DEG; - const btVector3& kv = up; - const btVector3& iv = axis; - btVector3 jv = kv.cross(iv); - bool drawN = false; - bool drawS = false; - if (minTh <= -SIMD_HALF_PI) - { - minTh = -SIMD_HALF_PI + step; - drawN = true; - } - if (maxTh >= SIMD_HALF_PI) - { - maxTh = SIMD_HALF_PI - step; - drawS = true; - } - if (minTh > maxTh) - { - minTh = -SIMD_HALF_PI + step; - maxTh = SIMD_HALF_PI - step; - drawN = drawS = true; - } - int n_hor = (int)((maxTh - minTh) / step) + 1; - if (n_hor < 2) n_hor = 2; - btScalar step_h = (maxTh - minTh) / btScalar(n_hor - 1); - bool isClosed = false; - if (minPs > maxPs) - { - minPs = -SIMD_PI + step; - maxPs = SIMD_PI; - isClosed = true; - } - else if ((maxPs - minPs) >= SIMD_PI * btScalar(2.f)) - { - isClosed = true; - } - else - { - isClosed = false; - } - int n_vert = (int)((maxPs - minPs) / step) + 1; - if (n_vert < 2) n_vert = 2; - btScalar step_v = (maxPs - minPs) / btScalar(n_vert - 1); - for (int i = 0; i < n_hor; i++) - { - btScalar th = minTh + btScalar(i) * step_h; - btScalar sth = radius * btSin(th); - btScalar cth = radius * btCos(th); - for (int j = 0; j < n_vert; j++) - { - btScalar psi = minPs + btScalar(j) * step_v; - btScalar sps = btSin(psi); - btScalar cps = btCos(psi); - pvB[j] = center + cth * cps * iv + cth * sps * jv + sth * kv; - if (i) - { - drawLine(pvA[j], pvB[j], color); - } - else if (drawS) - { - drawLine(spole, pvB[j], color); - } - if (j) - { - drawLine(pvB[j - 1], pvB[j], color); - } - else - { - arcStart = pvB[j]; - } - if ((i == (n_hor - 1)) && drawN) - { - drawLine(npole, pvB[j], color); - } - - if (drawCenter) - { - if (isClosed) - { - if (j == (n_vert - 1)) - { - drawLine(arcStart, pvB[j], color); - } - } - else - { - if (((!i) || (i == (n_hor - 1))) && ((!j) || (j == (n_vert - 1)))) - { - drawLine(center, pvB[j], color); - } - } - } - } - pT = pvA; - pvA = pvB; - pvB = pT; - } - } - - virtual void drawBox(const btVector3& bbMin, const btVector3& bbMax, const btVector3& color) - { - 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); - } - virtual void drawBox(const btVector3& bbMin, const btVector3& bbMax, const btTransform& trans, const btVector3& color) - { - 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); - } - - virtual void drawCapsule(btScalar radius, btScalar halfHeight, int upAxis, const btTransform& transform, const btVector3& color) - { - int stepDegrees = 30; - - btVector3 capStart(0.f, 0.f, 0.f); - capStart[upAxis] = -halfHeight; - - btVector3 capEnd(0.f, 0.f, 0.f); - capEnd[upAxis] = halfHeight; - - // Draw the ends - { - btTransform childTransform = transform; - childTransform.getOrigin() = transform * capStart; - { - btVector3 center = childTransform.getOrigin(); - btVector3 up = childTransform.getBasis().getColumn((upAxis + 1) % 3); - btVector3 axis = -childTransform.getBasis().getColumn(upAxis); - btScalar minTh = -SIMD_HALF_PI; - btScalar maxTh = SIMD_HALF_PI; - btScalar minPs = -SIMD_HALF_PI; - btScalar maxPs = SIMD_HALF_PI; - - drawSpherePatch(center, up, axis, radius, minTh, maxTh, minPs, maxPs, color, btScalar(stepDegrees), false); - } - } - - { - btTransform childTransform = transform; - childTransform.getOrigin() = transform * capEnd; - { - btVector3 center = childTransform.getOrigin(); - btVector3 up = childTransform.getBasis().getColumn((upAxis + 1) % 3); - btVector3 axis = childTransform.getBasis().getColumn(upAxis); - btScalar minTh = -SIMD_HALF_PI; - btScalar maxTh = SIMD_HALF_PI; - btScalar minPs = -SIMD_HALF_PI; - btScalar maxPs = SIMD_HALF_PI; - drawSpherePatch(center, up, axis, radius, minTh, maxTh, minPs, maxPs, color, btScalar(stepDegrees), false); - } - } - - // Draw some additional lines - btVector3 start = transform.getOrigin(); - - for (int i = 0; i < 360; i += stepDegrees) - { - capEnd[(upAxis + 1) % 3] = capStart[(upAxis + 1) % 3] = btSin(btScalar(i) * SIMD_RADS_PER_DEG) * radius; - capEnd[(upAxis + 2) % 3] = capStart[(upAxis + 2) % 3] = btCos(btScalar(i) * SIMD_RADS_PER_DEG) * radius; - drawLine(start + transform.getBasis() * capStart, start + transform.getBasis() * capEnd, color); - } - } - - virtual void drawCylinder(btScalar radius, btScalar halfHeight, int upAxis, const btTransform& transform, const btVector3& color) - { - btVector3 start = transform.getOrigin(); - btVector3 offsetHeight(0, 0, 0); - offsetHeight[upAxis] = halfHeight; - int stepDegrees = 30; - btVector3 capStart(0.f, 0.f, 0.f); - capStart[upAxis] = -halfHeight; - btVector3 capEnd(0.f, 0.f, 0.f); - capEnd[upAxis] = halfHeight; - - for (int i = 0; i < 360; i += stepDegrees) - { - capEnd[(upAxis + 1) % 3] = capStart[(upAxis + 1) % 3] = btSin(btScalar(i) * SIMD_RADS_PER_DEG) * radius; - capEnd[(upAxis + 2) % 3] = capStart[(upAxis + 2) % 3] = btCos(btScalar(i) * SIMD_RADS_PER_DEG) * radius; - drawLine(start + transform.getBasis() * capStart, start + transform.getBasis() * capEnd, color); - } - // Drawing top and bottom caps of the cylinder - btVector3 yaxis(0, 0, 0); - yaxis[upAxis] = btScalar(1.0); - btVector3 xaxis(0, 0, 0); - xaxis[(upAxis + 1) % 3] = btScalar(1.0); - drawArc(start - transform.getBasis() * (offsetHeight), transform.getBasis() * yaxis, transform.getBasis() * xaxis, radius, radius, 0, SIMD_2_PI, color, false, btScalar(10.0)); - drawArc(start + transform.getBasis() * (offsetHeight), transform.getBasis() * yaxis, transform.getBasis() * xaxis, radius, radius, 0, SIMD_2_PI, color, false, btScalar(10.0)); - } - - virtual void drawCone(btScalar radius, btScalar height, int upAxis, const btTransform& transform, const btVector3& color) - { - int stepDegrees = 30; - btVector3 start = transform.getOrigin(); - - btVector3 offsetHeight(0, 0, 0); - btScalar halfHeight = height * btScalar(0.5); - offsetHeight[upAxis] = halfHeight; - btVector3 offsetRadius(0, 0, 0); - offsetRadius[(upAxis + 1) % 3] = radius; - btVector3 offset2Radius(0, 0, 0); - offset2Radius[(upAxis + 2) % 3] = radius; - - btVector3 capEnd(0.f, 0.f, 0.f); - capEnd[upAxis] = -halfHeight; - - for (int i = 0; i < 360; i += stepDegrees) - { - capEnd[(upAxis + 1) % 3] = btSin(btScalar(i) * SIMD_RADS_PER_DEG) * radius; - capEnd[(upAxis + 2) % 3] = btCos(btScalar(i) * SIMD_RADS_PER_DEG) * radius; - drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * capEnd, color); - } - - drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight + offsetRadius), color); - drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight - offsetRadius), color); - drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight + offset2Radius), color); - drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight - offset2Radius), color); - - // Drawing the base of the cone - btVector3 yaxis(0, 0, 0); - yaxis[upAxis] = btScalar(1.0); - btVector3 xaxis(0, 0, 0); - xaxis[(upAxis + 1) % 3] = btScalar(1.0); - drawArc(start - transform.getBasis() * (offsetHeight), transform.getBasis() * yaxis, transform.getBasis() * xaxis, radius, radius, 0, SIMD_2_PI, color, false, 10.0); - } - - virtual void drawPlane(const btVector3& planeNormal, btScalar planeConst, const btTransform& transform, const btVector3& color) - { - btVector3 planeOrigin = planeNormal * planeConst; - btVector3 vec0, vec1; - btPlaneSpace1(planeNormal, vec0, vec1); - btScalar vecLen = 100.f; - btVector3 pt0 = planeOrigin + vec0 * vecLen; - btVector3 pt1 = planeOrigin - vec0 * vecLen; - btVector3 pt2 = planeOrigin + vec1 * vecLen; - btVector3 pt3 = planeOrigin - vec1 * vecLen; - drawLine(transform * pt0, transform * pt1, color); - drawLine(transform * pt2, transform * pt3, color); - } - - virtual void clearLines() - { - } - - virtual void flushLines() - { - } -}; - -#endif //BT_IDEBUG_DRAW__H |