Я действительно не могу понять, что заставляет одну поверхность перекрывать другую. В 3D движке, который я создаю, моя техника терпит неудачу в крайних случаях.
Мой метод сортировки поверхностей, которые будут окрашены, от самых дальних к ближайшим. Чтобы определить близость, я сравниваю средние значения z. Однако иногда перекрывающаяся поверхность имеет более высокое среднее значение z, чем та, которую она перекрывает. Таким образом, поверхность, расположенная дальше, закрашивается более близкой, что приводит к причудливому рендерингу следующим образом:
То, что нужно видеть, это фиолетовая передняя поверхность куба, а красная боковая поверхность закрашена пурпурной. Среднее значение z пурпурной поверхности выше, и поэтому «дальше». Поэтому у меня есть некоторые сомнения относительно правильности этой техники.
Я также пытался определить расстояние от камеры (то есть до начала координат) до поверхности, но затем мне понадобилась точка. Я выбрал середину каждой поверхности, но также это не всегда работает, потому что не все поверхности такие большие, как друг друга.
Следовательно, каков надежный способ определения порядка близости поверхностей к началу координат?