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); }