Для непересекающихся треугольников большую часть времени один из треугольников полностью находится на другой стороне плоскости, определяемой другим треугольником.
То есть: помещение вершин vA в плоское уравнение функции f (B) дает все положительные (или нулевые) или все отрицательные (или нулевые) значения.
Если этого не произойдет, можно попробовать другой порядок.
После этого нам нужно поставить координату камеры в то же уравнение, чтобы мы знали, находится ли камера впереди или сзади от контрольного треугольника. Базовая плоскость / треугольник теперь находится на нулевом расстоянии, другой треугольник на расстоянии d , а камера находится на расстоянии c . Если знаки c и d совпадают, базовая плоскость является самой дальней.
Однако, как указал DavidE, два непересекающихся треугольника не обязательно удовлетворяют этому условию. Когда другой заказ тоже не выполняется, нужно найти разделительную плоскость.
IMO это может быть достигнуто путем проверки еще до 9 кандидатов в базовую плоскость: выберите две вершины (то есть ребро) из треугольника A и одну вершину из треугольника B в качестве кандидата в качестве разделяющей плоскости. Теперь оставшаяся вершина из треугольника A должна находиться на другой стороне относительно исходной плоскости-кандидата, чем две оставшиеся вершины треугольника B. В этой конфигурации два кандидата из 9 образуют разделительную плоскость. По симметрии, возможно, нужно попробовать и другие 9 комбинаций (взяв одно ребро за раз из B и одну вершину из A).
В вычислительном отношении может оказаться более эффективным попробовать первые два случая и просто разделить другой треугольник с базовой плоскостью. Разделение треугольника формирует три треугольника или один треугольник и многоугольник с четко определенным порядком рисования. В качестве бонуса теперь обрабатываются и фактически пересекающиеся треугольники.