예제 #1
0
        public static ESplitType GetSplitResult(SplitPlane plane, TriRef tri)
        {
            var planeDir = plane.dir;
            var valA     = LVector2.Cross(planeDir, tri.a - plane.a);
            var valB     = LVector2.Cross(planeDir, tri.b - plane.a);
            var valC     = LVector2.Cross(planeDir, tri.c - plane.a);

            var isRight = false;

            if (valA != 0)
            {
                isRight = valA < 0;
            }
            if (valB != 0)
            {
                isRight = valB < 0;
            }
            if (valC != 0)
            {
                isRight = valC < 0;
            }

            var isA = valA <= 0;
            var isB = valB <= 0;
            var isC = valC <= 0;

            if (isA == isB && isB == isC)
            {
                return(isRight ? ESplitType.Right : ESplitType.Left);
            }

            isA = valA >= 0;
            isB = valB >= 0;
            isC = valC >= 0;
            if (isA == isB && isB == isC)
            {
                return(isRight ? ESplitType.Right : ESplitType.Left);
            }

            return(ESplitType.OnPlane);
        }