This commit is contained in:
Бранимир Караџић 2019-02-09 22:09:25 -08:00
Родитель aee7e381e0
Коммит 41585e6ffc
1 изменённых файлов: 31 добавлений и 12 удалений

Просмотреть файл

@ -1115,11 +1115,11 @@ Vec3 closestPoint(const Obb& _obb, const Vec3& _point)
{
Srt srt = toSrt(_obb.mtx);
const Vec3 obbSpacePos = mul(sub(_point, srt.translation), invert(srt.rotation) );
Aabb aabb;
toAabb(aabb, srt.scale);
const Quaternion invRotation = invert(srt.rotation);
const Vec3 obbSpacePos = mul(sub(_point, srt.translation), invRotation);
const Vec3 pos = closestPoint(aabb, obbSpacePos);
return add(mul(pos, srt.rotation), srt.translation);
@ -1392,8 +1392,7 @@ bool overlap(const Capsule& _capsule, const Disk& _disk)
bool overlap(const Capsule& _capsule, const Obb& _obb)
{
BX_UNUSED(_capsule, _obb);
return false;
return overlap(_obb, _capsule);
}
bool overlap(const Cone& _cone, const Vec3& _pos)
@ -1579,8 +1578,15 @@ bool overlap(const Disk& _disk, const Obb& _obb)
bool overlap(const Obb& _obb, const Vec3& _pos)
{
BX_UNUSED(_obb, _pos);
return false;
Srt srt = toSrt(_obb.mtx);
Aabb aabb;
toAabb(aabb, srt.scale);
const Quaternion invRotation = invert(srt.rotation);
const Vec3 pos = mul(sub(_pos, srt.translation), invRotation);
return overlap(aabb, pos);
}
bool overlap(const Obb& _obb, const Sphere& _sphere)
@ -1612,7 +1618,21 @@ bool overlap(const Obb& _obb, const Cylinder& _cylinder)
bool overlap(const Obb& _obb, const Capsule& _capsule)
{
return overlap(_capsule, _obb);
Srt srt = toSrt(_obb.mtx);
Aabb aabb;
toAabb(aabb, srt.scale);
const Quaternion invRotation = invert(srt.rotation);
Capsule capsule =
{
mul(sub(_capsule.pos, srt.translation), invRotation),
mul(sub(_capsule.end, srt.translation), invRotation),
_capsule.radius,
};
return overlap(aabb, capsule);
}
bool overlap(const Obb& _obb, const Cone& _cone)
@ -1685,8 +1705,7 @@ bool overlap(const Plane& _plane, const Disk& _disk)
bool overlap(const Plane& _plane, const Obb& _obb)
{
BX_UNUSED(_plane, _obb);
return false;
return overlap(_obb, _plane);
}
bool overlap(const Sphere& _sphere, const Vec3& _pos)
@ -1950,6 +1969,9 @@ bool overlap(const Triangle& _triangle, const Obb& _obb)
{
Srt srt = toSrt(_obb.mtx);
Aabb aabb;
toAabb(aabb, srt.scale);
const Quaternion invRotation = invert(srt.rotation);
const Triangle triangle =
@ -1959,9 +1981,6 @@ bool overlap(const Triangle& _triangle, const Obb& _obb)
mul(sub(_triangle.v2, srt.translation), invRotation),
};
Aabb aabb;
toAabb(aabb, srt.scale);
return overlap(triangle, aabb);
}