public void ProcessOperatorDot() { var a = new Vector2(0.2f, 0.3f); var b = new Vector2(1.0f, 2.3f); var c = new Vector3(0.2f, 0.3f, 0.4f); var d = new Vector3(1.0f, 2.3f, 5.4f); var e = new Vector4(0.2f, 0.3f, 0.4f, 4.0f); var f = new Vector4(1.0f, 2.3f, 5.4f, 0.6f); var resultA = Vector2.Dot(a, b); var resultB = Vector3.Dot(c, d); var resultC = Vector4.Dot(e, f); var value_a = new VFXValue <Vector2>(a); var value_b = new VFXValue <Vector2>(b); var value_c = new VFXValue <Vector3>(c); var value_d = new VFXValue <Vector3>(d); var value_e = new VFXValue <Vector4>(e); var value_f = new VFXValue <Vector4>(f); var expressionA = VFXOperatorUtility.Dot(value_a, value_b); var expressionB = VFXOperatorUtility.Dot(value_c, value_d); var expressionC = VFXOperatorUtility.Dot(value_e, value_f); var context = new VFXExpression.Context(VFXExpressionContextOption.CPUEvaluation); var resultExpressionA = context.Compile(expressionA); var resultExpressionB = context.Compile(expressionB); var resultExpressionC = context.Compile(expressionC); Assert.AreEqual(resultA, resultExpressionA.Get <float>(), 0.0001f); Assert.AreEqual(resultB, resultExpressionB.Get <float>(), 0.0001f); Assert.AreEqual(resultC, resultExpressionC.Get <float>(), 0.0001f); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { VFXExpression lineDelta = (inputExpression[1] - inputExpression[0]); VFXExpression lineLength = new VFXExpressionMax(VFXOperatorUtility.Dot(lineDelta, lineDelta), VFXValue.Constant(Mathf.Epsilon)); VFXExpression t = VFXOperatorUtility.Dot(inputExpression[2] - inputExpression[0], lineDelta); t = VFXOperatorUtility.Clamp(t / lineLength, VFXValue.Constant(0.0f), VFXValue.Constant(1.0f)); VFXExpression pointOnLine = (inputExpression[0] + VFXOperatorUtility.CastFloat(t, lineDelta.valueType) * lineDelta); VFXExpression lineDistance = VFXOperatorUtility.Distance(inputExpression[2], pointOnLine); return(new VFXExpression[] { pointOnLine, lineDistance }); }
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) }); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { return(new[] { VFXOperatorUtility.Dot(inputExpression[0], inputExpression[0]) }); }