В случае прямых стен их легко отсортировать по глубине.Рассмотрим только их основания, которые являются прямыми отрезками.Обратите внимание, что каждая линия делит плоскость на две части, одна из которых ближе к зрителю, а другая - дальше.Для любого сегмента A назовите более близкую часть A + и более дальнюю часть A-.Теперь для любых двух сегментов A и B выполнено хотя бы одно из предложений:
- A полностью лежит в B +
- A полностью лежит в B-
- B полностью лежит в A-
- B полностью лежит в A +
- Один сегмент параллелен линии обзора, а другой - полностью слева или полностью справа от нее
- A и B пересекаются
В случаях 1 и 3 B следует нарисовать до A (A может перекрывать B, но B не может закрывать A);в случаях (2) и (4) A до B;в случае 5 это не имеет значения;и 6 не должно встречаться для обычных стен.
Теперь вы можете выполнять топологическую сортировку стен и рисовать их от самых дальних к ближайшим.
Что касается крыш, то это невозможно для вогнутыхздания, так как часть крыши может быть скрыта стеной, которая затемняет другую часть той же крыши.Представьте себе низкое U-образное здание, видимое с его стороны, с высокой башней посередине U. Башня будет затенена и скрыта U-крышей, поэтому в любом порядке, в котором вы их рисуете, картина будетнеправильно.
Таким образом, вам придется разделить вогнутые крыши на выпуклые многоугольники.Тогда должно быть легко отсортировать их вместе со стенами по тем же принципам.
Совершенно другой метод - использовать Z-буфер, который освобождает вас от мысли о порядке.У меня сложилось впечатление, что вы можете получить Z-буфер на самых дешевых графических картах для мобильных телефонов в эти дни.