Ортогональная проекция и BSP-дерево для рендеринга объектов сзади вперед - PullRequest
0 голосов
/ 04 ноября 2019

Я строю дерево BSP из треугольников в трехмерном пространстве. Все треугольники уже были преобразованы для просмотра пространства перед построением дерева BSP. Поэтому я использую точку (0, 0, 0) в качестве позиции для глаза зрителя и пересекаю дерево от далекого к ближнему и добавляю все посещенные треугольники в список.

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

Почему это происходит с ортографической проекцией? Не работают ли деревья BSP при решении проблемы видимости в ортографических проекциях? Или мне нужно принять мое положение глаз?

1 Ответ

0 голосов
/ 04 ноября 2019

Я почти уверен, что вы можете использовать дерево BSP для ортогональной проекции, но для этого потребуется скорректированная математика по сравнению с перспективной проекцией, так как, несмотря на то, что ваш зритель находится на 0,0,0, вы не можете сортировать полигоны с помощьюуважение к этому моменту. Ортогональная проекция эффективно помещает зрителя в бесконечность. Предполагая, что вы смотрите вниз по стандартной оси -Z, вам нужно пройтись по дереву BSP, как если бы зритель находился в точке 0,0, ∞. Если вы используете стандартный ax + by + cz + d = 0 для ваших секущих плоскостей, математика на самом деле очень проста, так как вам в основном нужно учитывать только знак c, чтобы определить, какую сторону плоскости пройти сначала. (Если c равно нулю, вы можете сначала пройти любую сторону).

...