Esempio n. 1
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 });
        }
        public void ProcessOperatorDistance()
        {
            var a       = new Vector3(0.2f, 0.3f, 0.4f);
            var b       = new Vector3(1.0f, 2.3f, 5.4f);
            var resultA = Vector3.Distance(a, b);
            var resultB = Vector3.Dot(a - b, a - b);

            var value_a = new VFXValue <Vector3>(a);
            var value_b = new VFXValue <Vector3>(b);

            var expressionA = VFXOperatorUtility.Distance(value_a, value_b);
            var expressionB = VFXOperatorUtility.SqrDistance(value_a, value_b);

            var context           = new VFXExpression.Context(VFXExpressionContextOption.CPUEvaluation);
            var resultExpressionA = context.Compile(expressionA);
            var resultExpressionB = context.Compile(expressionB);

            Assert.AreEqual(resultA, resultExpressionA.Get <float>());
            Assert.AreEqual(resultB, resultExpressionB.Get <float>());
        }
Esempio n. 3
0
 protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression)
 {
     return(new[] { VFXOperatorUtility.Distance(inputExpression[0], inputExpression[1]) });
 }