override protected VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { VFXExpression from = inputExpression[0]; VFXExpression to = inputExpression[1]; VFXExpression up = inputExpression[2]; VFXExpression viewVector = to - from; VFXExpression z = VFXOperatorUtility.Normalize(viewVector); VFXExpression x = VFXOperatorUtility.Normalize(VFXOperatorUtility.Cross(up, z)); VFXExpression y = VFXOperatorUtility.Cross(z, x); VFXExpression matrix = new VFXExpressionVector3sToMatrix(x, y, z, from); return(new[] { matrix }); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { var pos = inputExpression[0]; var center = inputExpression[1]; var wAxis = inputExpression[2]; var angle = inputExpression[3]; var projPoint = center + (wAxis * VFXOperatorUtility.CastFloat(VFXOperatorUtility.Dot(wAxis, pos - center), VFXValueType.Float3)); var uAxis = pos - projPoint; var vAxis = VFXOperatorUtility.Cross(uAxis, wAxis); var sinAngle = VFXOperatorUtility.CastFloat(new VFXExpressionSin(angle), VFXValueType.Float3); var cosAngle = VFXOperatorUtility.CastFloat(new VFXExpressionCos(angle), VFXValueType.Float3); return(new[] { projPoint + (uAxis * cosAngle) + (vAxis * sinAngle) }); }
public void ProcessOperatorCross() { var a = new Vector3(1.1f, 2.2f, 3.3f); var b = new Vector3(4.4f, 5.5f, 6.6f); var value_a = new VFXValue <Vector3>(a); var value_b = new VFXValue <Vector3>(b); var expressionA = VFXOperatorUtility.Cross(value_a, value_b); var context = new VFXExpression.Context(VFXExpressionContextOption.CPUEvaluation); var resultExpressionA = context.Compile(expressionA); var resultValue = resultExpressionA.Get <Vector3>(); var expectedValue = Vector3.Cross(a, b); Assert.AreEqual(expectedValue.x, resultValue.x, 0.001f); Assert.AreEqual(expectedValue.y, resultValue.y, 0.001f); Assert.AreEqual(expectedValue.z, resultValue.z, 0.001f); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { return(new[] { VFXOperatorUtility.Cross(inputExpression[0], inputExpression[1]) }); }