From cefce11fe4e2c5b9feea08d1dbd3bd745c72da8c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=91=D1=80=D0=B0=D0=BD=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9A?=
 =?UTF-8?q?=D0=B0=D1=80=D0=B0=D1=9F=D0=B8=D1=9B?=
 <branimirkaradzic@gmail.com>
Date: Tue, 5 Feb 2019 23:09:57 -0800
Subject: [PATCH] Adding more bounds overlap tests.

---
 examples/29-debugdraw/debugdraw.cpp | 34 +++++++++++++++++++++++++++++
 examples/common/bounds.cpp          | 17 +++++++++++++--
 2 files changed, 49 insertions(+), 2 deletions(-)

diff --git a/examples/29-debugdraw/debugdraw.cpp b/examples/29-debugdraw/debugdraw.cpp
index c874bd625..90e9f4872 100644
--- a/examples/29-debugdraw/debugdraw.cpp
+++ b/examples/29-debugdraw/debugdraw.cpp
@@ -1308,6 +1308,40 @@ public:
 						dde.draw(diskB);
 					}
 
+					{
+						Triangle triangleA =
+						{
+							{ px-0.4f, py+0.0f, pz-0.4f },
+							{ px+0.0f, py-0.3f, pz-0.5f },
+							{ px+0.0f, py+0.5f, pz+0.3f },
+						};
+
+						translate(triangleA, {kStepX*5.0f, 0.0f, kStepZ*2.0f});
+
+						Obb obbB;
+						bx::mtxSRT(obbB.mtx
+							, 1.0f
+							, 0.25f
+							, 0.25f
+							, bx::toRad(10.0f)
+							, bx::toRad(30.0f)
+							, bx::toRad(70.0f)
+							, xx+kStepX*5.0f
+							, yy
+							, zz+kStepZ*2.0f
+							);
+
+						olp = overlap(triangleA, obbB);
+
+						dde.setColor(olp ? kOverlapA : 0xffffffff);
+						dde.setWireframe(false);
+						dde.draw(triangleA);
+
+						dde.setColor(olp ? kOverlapB : 0xffffffff);
+						dde.setWireframe(true);
+						dde.draw(obbB);
+					}
+
 					// Capsule ---
 					{
 						Capsule capsuleA =
diff --git a/examples/common/bounds.cpp b/examples/common/bounds.cpp
index 7c90bfb90..b09b949c9 100644
--- a/examples/common/bounds.cpp
+++ b/examples/common/bounds.cpp
@@ -1542,7 +1542,20 @@ bool overlap(const Triangle& _triangle, const Disk& _disk)
 
 bool overlap(const Triangle& _triangle, const Obb& _obb)
 {
-	BX_UNUSED(_triangle, _obb);
-	return false;
+	Srt srt = toSrt(_obb.mtx);
+
+	const Quaternion invRotation = invert(srt.rotation);
+
+	const Triangle triangle =
+	{
+		mul(sub(_triangle.v0, srt.translation), invRotation),
+		mul(sub(_triangle.v1, srt.translation), invRotation),
+		mul(sub(_triangle.v2, srt.translation), invRotation),
+	};
+
+	Aabb aabb;
+	toAabb(aabb, srt.scale);
+
+	return overlap(triangle, aabb);
 }