예제 #1
0
        public override Vector4 EvalCPU()
        {
            int cc = Mathf.Max(GetInputCon("A").GetCompCount(), GetInputCon("B").GetCompCount());

            float dot = SF_Tools.Dot(GetInputData("A").dataUniform, GetInputData("B").dataUniform, cc);

            switch (dotType)
            {
            case DotType.Positive:
                dot = Mathf.Max(0f, dot);
                break;

            case DotType.Negative:
                dot = Mathf.Min(0f, dot);
                break;

            case DotType.Abs:
                dot = Mathf.Abs(dot);
                break;

            case DotType.Normalized:
                dot = 0.5f * dot + 0.5f;
                break;
            }

            return(dot * Vector4.one);
        }
예제 #2
0
        public override Vector4 EvalCPU()
        {
            Color i   = GetInputData("A").dataUniform;
            Color n   = GetInputData("B").dataUniform;
            int   cc  = Mathf.Max(GetInputCon("A").GetCompCount(), GetInputCon("B").GetCompCount());
            float dot = SF_Tools.Dot(i, n, cc);

            return(i - 2 * n * dot);
        }
예제 #3
0
        public override Vector4 EvalCPU()
        {
            Vector4 a = GetInputData("A").dataUniform;
            Vector4 b = GetInputData("B").dataUniform;

            int cc = Mathf.Max(GetInputCon("A").GetCompCount(), GetInputCon("B").GetCompCount());

            float dotLeft  = SF_Tools.Dot(a, b, cc);
            float dotRight = SF_Tools.Dot(b, b, cc);

            Vector4 retVec = a - (dotLeft / dotRight) * b;

            return(retVec);
        }