Как определить Z-порядок при рисовании в одноточечной перспективе? - PullRequest
1 голос
/ 20 февраля 2010

Я пытаюсь сделать простой javascript, который рисует прямоугольники на холсте, а затем рисует боковые грани на основе одноточечной перспективы. Проблема в том, что количество прямоугольников и их расположение произвольно, поэтому грани имеют тенденцию перекрываться таким образом, что не произойдет в реальной трехмерной перспективе. Как определить правильный порядок рисования, чтобы этого не произошло?

Вот несколько скриншотов, чтобы проиллюстрировать, что я имею в виду:

Скриншот 1 - Неправильный путь. В этом блоке группы красных, зеленых и синих блоков нарисованы в порядке, обратном тому, как они должны быть нарисованы.

Скриншот 2 - Правильный путь. Таким образом, следует нарисовать .

Ответы [ 2 ]

4 голосов
/ 20 февраля 2010

То, что вы ищете, называется Алгоритм художника , если у вас нет пересекающихся многоугольников

1 голос
/ 20 февраля 2010

Поскольку ваши скриншоты не работают, я собираюсь сделать дикое предположение и предположить, что проблема, с которой вы столкнулись, состоит в том, что рисование прямоугольников сзади и вперед приводит к странным наложениям.

Один из подходов к решению этой проблемы - использовать простое разбиение двоичного пространства . По сути, разверните каждый передний прямоугольник до бесконечной плоскости. Затем разделите все боковые прямоугольники, где эти плоскости пересекаются. Затем рисование спереди назад не должно перекрывать продукт, так как боковые прямоугольники будут разделены там, где возникли бы проблемы перекрытия.

Редактировать: Ах, теперь, когда ваши скриншоты работают, я не думаю, что это ваша проблема. Ах, хорошо, я все равно оставлю ответ.

...