16#ifndef BT_IDEBUG_DRAW__H
17#define BT_IDEBUG_DRAW__H
32 btVector3 m_activeObject;
41 : m_activeObject(1, 1, 1),
84 virtual void drawLine(
const btVector3& from,
const btVector3& to,
const btVector3& color) = 0;
86 virtual void drawLine(
const btVector3& from,
const btVector3& to,
const btVector3& fromColor,
const btVector3& toColor)
94 btVector3 center = transform.getOrigin();
95 btVector3 up = transform.getBasis().getColumn(1);
96 btVector3 axis = transform.getBasis().getColumn(0);
102 drawSpherePatch(center, up, axis, radius, minTh, maxTh, minPs, maxPs, color, stepDegrees,
false);
103 drawSpherePatch(center, up, -axis, radius, minTh, maxTh, minPs, maxPs, color, stepDegrees,
false);
114 virtual void drawTriangle(
const btVector3& v0,
const btVector3& v1,
const btVector3&
v2,
const btVector3& ,
const btVector3& ,
const btVector3& ,
const btVector3& color,
btScalar alpha)
118 virtual void drawTriangle(
const btVector3& v0,
const btVector3& v1,
const btVector3&
v2,
const btVector3& color,
btScalar )
125 virtual void drawContactPoint(
const btVector3& PointOnB,
const btVector3& normalOnB,
btScalar distance,
int lifeTime,
const btVector3& color) = 0;
129 virtual void draw3dText(
const btVector3& location,
const char* textString) = 0;
135 virtual void drawAabb(
const btVector3& from,
const btVector3& to,
const btVector3& color)
137 btVector3 halfExtents = (to -
from) * 0.5f;
138 btVector3 center = (to +
from) * 0.5f;
141 btVector3 edgecoord(1.f, 1.f, 1.f), pa, pb;
142 for (i = 0; i < 4; i++)
144 for (j = 0; j < 3; j++)
146 pa =
btVector3(edgecoord[0] * halfExtents[0], edgecoord[1] * halfExtents[1],
147 edgecoord[2] * halfExtents[2]);
150 int othercoord = j % 3;
151 edgecoord[othercoord] *= -1.f;
152 pb =
btVector3(edgecoord[0] * halfExtents[0], edgecoord[1] * halfExtents[1],
153 edgecoord[2] * halfExtents[2]);
160 edgecoord[i] *= -1.f;
165 btVector3 start = transform.getOrigin();
172 const btVector3& color,
bool drawSect,
btScalar stepDegrees =
btScalar(10.f))
174 const btVector3& vx = axis;
175 btVector3 vy = normal.cross(axis);
177 int nSteps = (
int)
btFabs((maxAngle - minAngle) / step);
178 if (!nSteps) nSteps = 1;
179 btVector3 prev = center + radiusA * vx *
btCos(minAngle) + radiusB * vy *
btSin(minAngle);
184 for (
int i = 1; i <= nSteps; i++)
187 btVector3
next = center + radiusA * vx *
btCos(angle) + radiusB * vy *
btSin(angle);
201 btVector3 *pvA = vA, *pvB = vB, *pT;
202 btVector3 npole = center + up * radius;
203 btVector3 spole = center - up * radius;
206 const btVector3& kv = up;
207 const btVector3& iv = axis;
208 btVector3 jv = kv.cross(iv);
225 drawN = drawS =
true;
227 int n_hor = (
int)((maxTh - minTh) / step) + 1;
228 if (n_hor < 2) n_hor = 2;
230 bool isClosed =
false;
245 int n_vert = (
int)((maxPs - minPs) / step) + 1;
246 if (n_vert < 2) n_vert = 2;
248 for (
int i = 0; i < n_hor; i++)
253 for (
int j = 0; j < n_vert; j++)
258 pvB[j] = center + cth * cps * iv + cth * sps * jv + sth * kv;
269 drawLine(pvB[j - 1], pvB[j], color);
275 if ((i == (n_hor - 1)) && drawN)
284 if (j == (n_vert - 1))
291 if (((!i) || (i == (n_hor - 1))) && ((!j) || (j == (n_vert - 1))))
304 virtual void drawBox(
const btVector3& bbMin,
const btVector3& bbMax,
const btVector3& color)
319 virtual void drawBox(
const btVector3& bbMin,
const btVector3& bbMax,
const btTransform& trans,
const btVector3& color)
337 int stepDegrees = 30;
339 btVector3 capStart(0.f, 0.f, 0.f);
340 capStart[upAxis] = -halfHeight;
342 btVector3 capEnd(0.f, 0.f, 0.f);
343 capEnd[upAxis] = halfHeight;
348 childTransform.getOrigin() = transform * capStart;
350 btVector3 center = childTransform.getOrigin();
351 btVector3 up = childTransform.getBasis().getColumn((upAxis + 1) % 3);
352 btVector3 axis = -childTransform.getBasis().getColumn(upAxis);
358 drawSpherePatch(center, up, axis, radius, minTh, maxTh, minPs, maxPs, color,
btScalar(stepDegrees),
false);
364 childTransform.getOrigin() = transform * capEnd;
366 btVector3 center = childTransform.getOrigin();
367 btVector3 up = childTransform.getBasis().getColumn((upAxis + 1) % 3);
368 btVector3 axis = childTransform.getBasis().getColumn(upAxis);
373 drawSpherePatch(center, up, axis, radius, minTh, maxTh, minPs, maxPs, color,
btScalar(stepDegrees),
false);
378 btVector3 start = transform.getOrigin();
380 for (
int i = 0; i < 360; i += stepDegrees)
384 drawLine(start + transform.getBasis() * capStart, start + transform.getBasis() * capEnd, color);
390 btVector3 start = transform.getOrigin();
391 btVector3 offsetHeight(0, 0, 0);
392 offsetHeight[upAxis] = halfHeight;
393 int stepDegrees = 30;
394 btVector3 capStart(0.f, 0.f, 0.f);
395 capStart[upAxis] = -halfHeight;
396 btVector3 capEnd(0.f, 0.f, 0.f);
397 capEnd[upAxis] = halfHeight;
399 for (
int i = 0; i < 360; i += stepDegrees)
403 drawLine(start + transform.getBasis() * capStart, start + transform.getBasis() * capEnd, color);
406 btVector3 yaxis(0, 0, 0);
408 btVector3 xaxis(0, 0, 0);
409 xaxis[(upAxis + 1) % 3] =
btScalar(1.0);
410 drawArc(start - transform.getBasis() * (offsetHeight), transform.getBasis() * yaxis, transform.getBasis() * xaxis, radius, radius, 0,
SIMD_2_PI, color,
false,
btScalar(10.0));
411 drawArc(start + transform.getBasis() * (offsetHeight), transform.getBasis() * yaxis, transform.getBasis() * xaxis, radius, radius, 0,
SIMD_2_PI, color,
false,
btScalar(10.0));
416 int stepDegrees = 30;
417 btVector3 start = transform.getOrigin();
419 btVector3 offsetHeight(0, 0, 0);
421 offsetHeight[upAxis] = halfHeight;
422 btVector3 offsetRadius(0, 0, 0);
423 offsetRadius[(upAxis + 1) % 3] = radius;
424 btVector3 offset2Radius(0, 0, 0);
425 offset2Radius[(upAxis + 2) % 3] = radius;
427 btVector3 capEnd(0.f, 0.f, 0.f);
428 capEnd[upAxis] = -halfHeight;
430 for (
int i = 0; i < 360; i += stepDegrees)
434 drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * capEnd, color);
437 drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight + offsetRadius), color);
438 drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight - offsetRadius), color);
439 drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight + offset2Radius), color);
440 drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight - offset2Radius), color);
443 btVector3 yaxis(0, 0, 0);
445 btVector3 xaxis(0, 0, 0);
446 xaxis[(upAxis + 1) % 3] =
btScalar(1.0);
447 drawArc(start - transform.getBasis() * (offsetHeight), transform.getBasis() * yaxis, transform.getBasis() * xaxis, radius, radius, 0,
SIMD_2_PI, color,
false, 10.0);
452 btVector3 planeOrigin = planeNormal * planeConst;
453 btVector3 vec0, vec1;
456 btVector3 pt0 = planeOrigin + vec0 * vecLen;
457 btVector3 pt1 = planeOrigin - vec0 * vecLen;
458 btVector3 pt2 = planeOrigin + vec1 * vecLen;
459 btVector3 pt3 = planeOrigin - vec1 * vecLen;
460 drawLine(transform * pt0, transform * pt1, color);
461 drawLine(transform * pt2, transform * pt3, color);
ATTR_WARN_UNUSED_RESULT const BMVert * v2
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
SIMD_FORCE_INLINE btScalar btCos(btScalar x)
#define SIMD_RADS_PER_DEG
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
SIMD_FORCE_INLINE btScalar btSin(btScalar x)
#define ATTRIBUTE_ALIGNED16(a)
SIMD_FORCE_INLINE btScalar btFabs(btScalar x)
SIMD_FORCE_INLINE void btPlaneSpace1(const T &n, T &p, T &q)
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
virtual void drawCone(btScalar radius, btScalar height, int upAxis, const btTransform &transform, const btVector3 &color)
btVector3 m_deactivatedObject
virtual void drawPlane(const btVector3 &planeNormal, btScalar planeConst, const btTransform &transform, const btVector3 &color)
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)
virtual void drawBox(const btVector3 &bbMin, const btVector3 &bbMax, const btTransform &trans, const btVector3 &color)
virtual void drawArc(const btVector3 ¢er, const btVector3 &normal, const btVector3 &axis, btScalar radiusA, btScalar radiusB, btScalar minAngle, btScalar maxAngle, const btVector3 &color, bool drawSect, btScalar stepDegrees=btScalar(10.f))
btVector3 m_disabledDeactivationObject
virtual void draw3dText(const btVector3 &location, const char *textString)=0
virtual void drawSphere(btScalar radius, const btTransform &transform, const btVector3 &color)
btVector3 m_wantsDeactivationObject
virtual void drawTriangle(const btVector3 &v0, const btVector3 &v1, const btVector3 &v2, const btVector3 &, const btVector3 &, const btVector3 &, const btVector3 &color, btScalar alpha)
virtual void flushLines()
virtual void reportErrorWarning(const char *warningString)=0
virtual void clearLines()
virtual void drawSphere(const btVector3 &p, btScalar radius, const btVector3 &color)
virtual void setDebugMode(int debugMode)=0
virtual void drawTransform(const btTransform &transform, btScalar orthoLen)
virtual void drawContactPoint(const btVector3 &PointOnB, const btVector3 &normalOnB, btScalar distance, int lifeTime, const btVector3 &color)=0
virtual int getDebugMode() const =0
virtual void drawBox(const btVector3 &bbMin, const btVector3 &bbMax, const btVector3 &color)
virtual void drawCylinder(btScalar radius, btScalar halfHeight, int upAxis, const btTransform &transform, const btVector3 &color)
btVector3 m_disabledSimulationObject
virtual void drawSpherePatch(const btVector3 ¢er, 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)
@ DBG_MAX_DEBUG_DRAW_MODE
@ DBG_EnableSatComparison
@ DBG_DrawConstraintLimits
virtual DefaultColors getDefaultColors() const
virtual void drawTriangle(const btVector3 &v0, const btVector3 &v1, const btVector3 &v2, const btVector3 &color, btScalar)
virtual void drawAabb(const btVector3 &from, const btVector3 &to, const btVector3 &color)
virtual void drawCapsule(btScalar radius, btScalar halfHeight, int upAxis, const btTransform &transform, const btVector3 &color)
virtual void setDefaultColors(const DefaultColors &)
the default implementation for setDefaultColors has no effect. A derived class can implement it and s...
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int