Advertisement
Guest User

Untitled

a guest
Jul 11th, 2013
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.18 KB | None | 0 0
  1. bool extentSignedTest(const Vector4f& p, const Vector3f& center, const Vector3f& extent) const
  2. {
  3.     return (dot(center, toVector3(p)) + extent.x * abs(p.x) + extent.y * Util::abs(p.y) + extent.z *
  4.         abs(p.z) < -p.w);
  5. }
  6.  
  7. bool isAABBInObjectSpaceFrustum (const AABB& box, const Matrix44& modelToWorld) const
  8. {          
  9.     const Matrix44  objectToProj    = m_worldToProj * modelToWorld;
  10.    
  11.     const Vector4f  rowX        = projToObject.getRow(0);
  12.     const Vector4f  rowY        = projToObject.getRow(1);
  13.     const Vector4f  rowZ        = projToObject.getRow(2);
  14.     const Vector4f  rowW        = projToObject.getRow(3);
  15.  
  16.     const Vector3f& center =  box.getCenter();
  17.     const Vector3f& extent =  box.getExtents();
  18.        
  19.     //left and right planes    
  20.     if (extentSignedTest(rowW + rowX, center, extent))
  21.         return false;
  22.        
  23.     if (extentSignedTest(rowW - rowX, center, extent))
  24.         return false;
  25.  
  26.     //bottom and top planes
  27.     if (extentSignedTest(rowW + rowY, center, extent))
  28.         return false;
  29.        
  30.     if (extentSignedTest(rowW - rowY, center, extent))
  31.         return false;
  32.  
  33.     //near and far planes
  34.     if (extentSignedTest(rowW + rowZ, center, extent))
  35.         return false;
  36.        
  37.     if (extentSignedTest(rowW - rowZ, center, extent))
  38.         return false;
  39.     return true;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement