public static CameraMatricesExpressions GetMatricesExpressions(IEnumerable <VFXNamedExpression> expressions, VFXCoordinateSpace cameraSpace, VFXCoordinateSpace outputSpace)
        {
            var fov          = expressions.First(e => e.name == "Camera_fieldOfView");
            var aspect       = expressions.First(e => e.name == "Camera_aspectRatio");
            var near         = expressions.First(e => e.name == "Camera_nearPlane");
            var far          = expressions.First(e => e.name == "Camera_farPlane");
            var cameraMatrix = expressions.First(e => e.name == "Camera_transform");

            VFXExpression ViewToVFX = cameraMatrix.exp;

            if (cameraSpace == VFXCoordinateSpace.World && outputSpace == VFXCoordinateSpace.Local)
            {
                ViewToVFX = new VFXExpressionTransformMatrix(VFXBuiltInExpression.WorldToLocal, cameraMatrix.exp);
            }
            else if (cameraSpace == VFXCoordinateSpace.Local && outputSpace == VFXCoordinateSpace.World)
            {
                ViewToVFX = new VFXExpressionTransformMatrix(VFXBuiltInExpression.LocalToWorld, cameraMatrix.exp);
            }

            VFXExpression VFXToView  = new VFXExpressionInverseTRSMatrix(ViewToVFX);
            VFXExpression ViewToClip = VFXOperatorUtility.GetPerspectiveMatrix(fov.exp, aspect.exp, near.exp, far.exp);
            VFXExpression ClipToView = new VFXExpressionInverseMatrix(ViewToClip);

            return(new CameraMatricesExpressions()
            {
                ViewToVFX = new VFXNamedExpression(ViewToVFX, "ViewToVFX"),
                VFXToView = new VFXNamedExpression(VFXToView, "VFXToView"),
                ViewToClip = new VFXNamedExpression(ViewToClip, "ViewToClip"),
                ClipToView = new VFXNamedExpression(ClipToView, "ClipToView"),
            });
        }
Esempio n. 2
0
        public static CameraMatricesExpressions GetMatricesExpressions(IEnumerable <VFXNamedExpression> expressions)
        {
            var fov          = expressions.First(e => e.name == "Camera_fieldOfView");
            var aspect       = expressions.First(e => e.name == "Camera_aspectRatio");
            var near         = expressions.First(e => e.name == "Camera_nearPlane");
            var far          = expressions.First(e => e.name == "Camera_farPlane");
            var cameraMatrix = expressions.First(e => e.name == "Camera_transform");

            VFXExpression ViewToVFX  = cameraMatrix.exp;
            VFXExpression VFXToView  = new VFXExpressionInverseTRSMatrix(ViewToVFX);
            VFXExpression ViewToClip = VFXOperatorUtility.GetPerspectiveMatrix(fov.exp, aspect.exp, near.exp, far.exp);
            VFXExpression ClipToView = new VFXExpressionInverseMatrix(ViewToClip);

            return(new CameraMatricesExpressions()
            {
                ViewToVFX = new VFXNamedExpression(ViewToVFX, "ViewToVFX"),
                VFXToView = new VFXNamedExpression(VFXToView, "VFXToView"),
                ViewToClip = new VFXNamedExpression(ViewToClip, "ViewToClip"),
                ClipToView = new VFXNamedExpression(ClipToView, "ClipToView"),
            });
        }