Некоторое время назад я спросил, как определить, когда лицо перекрывает другое. Совет был использовать Z-буфер.
Тем не менее, я не могу использовать Z-буфер в моем текущем проекте, и поэтому я хотел бы использовать алгоритм Painter. Я не имею ни малейшего понятия, когда поверхность находится позади или перед другой, хотя. Я пробовал множество методов, но все они терпят неудачу в крайних случаях, или они терпят неудачу даже в общих случаях.
Это список методов сортировки, которые я пробовал до сих пор:
- Расстояние до середины каждого лица
- Среднее расстояние до каждой вершины каждой грани
- Среднее значение z каждой вершины
- Наивысшее значение z вершин каждой грани и нарисуйте их первыми
- Наименьшее значение z вершин каждой грани и нарисуйте последние
Проблема в том, что лицо может быть ближе, но еще дальше. Все эти методы кажутся ненадежными.
Редактировать: Например, на следующем изображении поверхность с синей точкой в качестве средней точки закрашена поверх поверхности с красной точкой в качестве средней точки, потому что синяя точка ближе. Однако это происходит потому, что поверхность красной точки больше, а средняя точка находится дальше. Поверхность с красной точкой должна быть закрашена поверх голубой, потому что она ближе , а расстояние до средней точки говорит об обратном.
Что именно используется в алгоритме Painter для определения порядка, в котором объекты должны быть нарисованы?