Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool static extentSignedTest(const Vector4f& p, const Vector3f& center, const Vector3f& extent)
- {
- return (dot(Vector3(p), center) + dot(abs(Vector3(p)), extent) < -p.w);
- }
- bool static isAABBInFrustumReference (const AABB& box, const Matrix44& frustumMatrix)
- {
- const Vector4f rowX = frustumMatrix.getRow(0);
- const Vector4f rowY = frustumMatrix.getRow(1);
- const Vector4f rowZ = frustumMatrix.getRow(2);
- const Vector4f rowW = frustumMatrix.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