Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool extentSignedTest(const Vector4f& p, const Vector3f& center, const Vector3f& extent) const
- {
- return (dot(center, toVector3(p)) + extent.x * abs(p.x) + extent.y * Util::abs(p.y) + extent.z *
- abs(p.z) < -p.w);
- }
- bool isAABBInObjectSpaceFrustum (const AABB& box, const Matrix44& modelToWorld) const
- {
- const Matrix44 objectToProj = m_worldToProj * modelToWorld;
- const Vector4f rowX = projToObject.getRow(0);
- const Vector4f rowY = projToObject.getRow(1);
- const Vector4f rowZ = projToObject.getRow(2);
- const Vector4f rowW = projToObject.getRow(3);
- const Vector3f& center = box.getCenter();
- const Vector3f& extent = box.getExtents();
- //left and right planes
- if (extentSignedTest(rowW + rowX, center, extent))
- return false;
- if (extentSignedTest(rowW - rowX, center, extent))
- return false;
- //bottom and top planes
- if (extentSignedTest(rowW + rowY, center, extent))
- return false;
- if (extentSignedTest(rowW - rowY, center, extent))
- return false;
- //near and far planes
- if (extentSignedTest(rowW + rowZ, center, extent))
- return false;
- if (extentSignedTest(rowW - rowZ, center, extent))
- return false;
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement