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"), }); }
public void ProcessExpressionInverseMatrix() { var t = new Vector3(0.2f, 0.3f, 0.4f); var r = new Vector3(0.5f, 0.6f, 0.7f); var s = new Vector3(0.8f, 0.9f, 1.0f); var q = Quaternion.Euler(r); Matrix4x4 inputMatrix = new Matrix4x4(); inputMatrix.SetTRS(t, q, s); Matrix4x4 outputMatrix = inputMatrix.inverse; var matrixExpression = VFXValue.Constant(inputMatrix); var invMatrixExpressions = new VFXExpressionInverseMatrix(matrixExpression); var context = new VFXExpression.Context(VFXExpressionContextOption.CPUEvaluation); var resultExpression = context.Compile(invMatrixExpressions); Assert.AreEqual(resultExpression.Get <Matrix4x4>(), outputMatrix); }
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"), }); }