Esempio n. 1
0
        /// <summary>
        /// Extracts perspective camera parameters from the frustum, doesn't work with orthographic frustums.
        /// </summary>
        /// <returns>Perspective camera parameters from the frustum</returns>
        public FrustumCameraParams GetCameraParams()
        {
            var corners     = GetCorners();
            var cameraParam = new FrustumCameraParams();

            cameraParam.Position    = Get3PlanesInterPoint(ref this.pRight, ref this.pTop, ref this.pLeft);
            cameraParam.LookAtDir   = this.pNear.Normal;
            cameraParam.UpDir       = Vector3.Normalize(Vector3.Cross(this.pRight.Normal, this.pNear.Normal));
            cameraParam.FOV         = (float)((Math.PI / 2.0 - Math.Acos(Vector3.Dot(this.pNear.Normal, this.pTop.Normal))) * 2);
            cameraParam.AspectRatio = (corners[6] - corners[5]).Length / (corners[4] - corners[5]).Length;
            cameraParam.ZNear       = (cameraParam.Position + (this.pNear.Normal * this.pNear.D)).Length;
            cameraParam.ZFar        = (cameraParam.Position + (this.pFar.Normal * this.pFar.D)).Length;
            return(cameraParam);
        }
Esempio n. 2
0
 /// <summary>
 /// Creates a new frustum relaying on perspective camera parameters
 /// </summary>
 /// <param name="cameraParams">The camera params.</param>
 /// <returns>The bounding frustum from camera params</returns>
 public static BoundingFrustum FromCamera(FrustumCameraParams cameraParams)
 {
     return(FromCamera(cameraParams.Position, cameraParams.LookAtDir, cameraParams.UpDir, cameraParams.FOV,
                       cameraParams.ZNear, cameraParams.ZFar, cameraParams.AspectRatio));
 }