Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C# by dep ( 16 years ago )
public Frustum(Matrix4 transform, float nearClip, float farClip, float hfovDegrees, float aspectRatio)
  {
   float vfovDegrees = hfovDegrees / aspectRatio;

   Vector3 lfAxis = new Vector3(transform.m_rows[0,0], transform.m_rows[0,1], transform.m_rows[0,2]);
   Vector3 upAxis = new Vector3(transform.m_rows[1,0], transform.m_rows[1,1], transform.m_rows[1,2]);
   Vector3 eyeDir = new Vector3(transform.m_rows[2,0], transform.m_rows[2,1], transform.m_rows[2,2]);
   Vector3 eyePos = new Vector3(transform.m_rows[3,0], transform.m_rows[3,1], transform.m_rows[3,2]);

   m_planes[(int)FrustumPlane.Near] = new Plane(eyePos + eyeDir * nearClip, eyeDir);
   m_planes[(int)FrustumPlane.Far] = new Plane(eyePos + eyeDir * farClip, -eyeDir);

   Vector3 leftNormal = eyeDir.RotateAroundAxis(upAxis, -90.0f + hfovDegrees * 0.5f);
   Vector3 rightNormal = eyeDir.RotateAroundAxis(upAxis, 90.0f - hfovDegrees * 0.5f);
   Vector3 topNormal = eyeDir.RotateAroundAxis(lfAxis, -90.0f + hfovDegrees * 0.5f);
   Vector3 bottomNormal = eyeDir.RotateAroundAxis(lfAxis, 90.0f - hfovDegrees * 0.5f);

   m_planes[(int)FrustumPlane.Left] = new Plane(eyePos, leftNormal);
   m_planes[(int)FrustumPlane.Right] = new Plane(eyePos, rightNormal);
   m_planes[(int)FrustumPlane.Top] = new Plane(eyePos, topNormal);
   m_planes[(int)FrustumPlane.Bottom] = new Plane(eyePos, bottomNormal);

   Vector3 testPoint = eyePos + eyeDir * (farClip - nearClip) * 0.5f;
   for (int i = 0; i < 6; ++i)
   {
    Debug.Assert(m_planes[i].ClassifyPoint(testPoint) == 1);
   }
  }

 

Revise this Paste

Your Name: Code Language: