diff --git a/examples/testbed/framework/draw.cpp b/examples/testbed/framework/draw.cpp index fe1e305..c3c431a 100644 --- a/examples/testbed/framework/draw.cpp +++ b/examples/testbed/framework/draw.cpp @@ -341,15 +341,15 @@ void Draw::DrawCapsule(const b3Vec3& c1, const b3Vec3& c2, float32 radius, const } } -void Draw::DrawSolidCapsule(const b3Vec3& c1, const b3Vec3& c2, float32 radius, const b3Color& c) +void Draw::DrawSolidCapsule(const b3Vec3& c1, const b3Vec3& c2, float32 radius, const b3Transform& transform, const b3Color& c) { float32 height = b3Length(c1 - c2); { - b3Transform xfc; - xfc.rotation.SetIdentity(); - xfc.position = c1; - m_solid->DrawSphere(radius, c, xfc); + b3Transform xf; + xf.rotation = transform.rotation; + xf.position = transform * c1; + m_solid->DrawSphere(radius, c, xf); } if (height > 0.0f) @@ -360,18 +360,18 @@ void Draw::DrawSolidCapsule(const b3Vec3& c1, const b3Vec3& c2, float32 radius, R.z = b3Perp(R.y); R.x = b3Cross(R.y, R.z); - b3Transform xfc; - xfc.position = 0.5f * (c1 + c2); - xfc.rotation = R; + b3Transform xf; + xf.position = transform * (0.5f * (c1 + c2)); + xf.rotation = transform.rotation * R; - m_solid->DrawCylinder(radius, height, c, xfc); + m_solid->DrawCylinder(radius, height, c, xf); } { - b3Transform xfc; - xfc.rotation.SetIdentity(); - xfc.position = c2; - m_solid->DrawSphere(radius, c, xfc); + b3Transform xf; + xf.rotation = transform.rotation; + xf.position = transform * c2; + m_solid->DrawSphere(radius, c, xf); } } } diff --git a/examples/testbed/framework/draw.h b/examples/testbed/framework/draw.h index 4f5bda4..34b8551 100644 --- a/examples/testbed/framework/draw.h +++ b/examples/testbed/framework/draw.h @@ -89,7 +89,7 @@ public: void DrawCapsule(const b3Vec3& p1, const b3Vec3& p2, float32 radius, const b3Color& color); - void DrawSolidCapsule(const b3Vec3& p1, const b3Vec3& p2, float32 radius, const b3Color& color); + void DrawSolidCapsule(const b3Vec3& p1, const b3Vec3& p2, float32 radius, const b3Transform& transform, const b3Color& color); void DrawPlane(const b3Vec3& normal, const b3Vec3& center, float32 radius, const b3Color& color); diff --git a/include/bounce/common/draw.h b/include/bounce/common/draw.h index 9030f44..adb6028 100644 --- a/include/bounce/common/draw.h +++ b/include/bounce/common/draw.h @@ -110,8 +110,8 @@ public : // Draw a capsule with segment, and radius. virtual void DrawCapsule(const b3Vec3& p1, const b3Vec3& p2, float32 radius, const b3Color& color) = 0; - // Draw a solid capsule with segment, and radius. - virtual void DrawSolidCapsule(const b3Vec3& p1, const b3Vec3& p2, float32 radius, const b3Color& color) = 0; + // Draw a solid capsule with local segment, radius, and transform. + virtual void DrawSolidCapsule(const b3Vec3& p1, const b3Vec3& p2, float32 radius, const b3Transform& transform, const b3Color& color) = 0; // Draw a AABB. virtual void DrawAABB(const b3AABB3& aabb, const b3Color& color) = 0; diff --git a/src/bounce/dynamics/draw_world.cpp b/src/bounce/dynamics/draw_world.cpp index 802b1e4..741286f 100644 --- a/src/bounce/dynamics/draw_world.cpp +++ b/src/bounce/dynamics/draw_world.cpp @@ -250,10 +250,7 @@ void b3World::DrawSolidShape(const b3Transform& xf, const b3Shape* shape, const { const b3CapsuleShape* capsule = (b3CapsuleShape*)shape; - b3Vec3 c1 = xf * capsule->m_centers[0]; - b3Vec3 c2 = xf * capsule->m_centers[1]; - - b3Draw_draw->DrawSolidCapsule(c1, c2, capsule->m_radius, color); + b3Draw_draw->DrawSolidCapsule(capsule->m_centers[0], capsule->m_centers[1], capsule->m_radius, xf, color); break; }