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