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);
        }
예제 #2
0
        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 });
        }
예제 #3
0
        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]) });
 }