Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet

31 дек 2024 Вт Скрытие невидимых линии

Однажды у меня была книга про трехмерную графику на Basic, и всё бы ничего, если бы не одна интересная глава в книге. В ней рассказывалось о том, как сделать так, чтобы линии, которые рисовались, могли скрываться за другими выпуклыми фигурами. Это оставило впечатление на меня, и я до сих пор не могу понять, как это сделать.
Если разобраться, то процесс сокрытия линий в целом простой. Допустим, нам надо провести трехмерную линию и проверить, где и в какой точке она будет отрезаться лежащим перед ней объектом. Для этого надо проверить все пересечения линии всех объектов.
То есть, если взять линию, то надо просмотреть все грани фигур на трехмерной сцене и сравнить. Могут быть следующие случаи.
  • Один конец линии начинается за гранью и заканчивается тоже за гранью. Такую линию вообще не выводить
  • Первая точка линии начинается перед гранью, а вторая за гранью. Необходимо отрезать линию в том месте, где она пересекает грань. И закончить на этом.
  • Первая точка линии начинается перед гранью, вторая тоже, и причем обе точки пересекли эту грань. Надо найти точки пересечения грани, после чего найти срединную точку и проверить, где она находится. Если она находится перед гранью, то тогда линия выводится без обрезки. Если за гранью, то вырезается кусок линии в точке пересечения.
Как видно, подобного рода вычисления отнимают колоссальные вычислительные ресурсы и вообще, реализация довольно сложна. Такой способ весьма далек от реальной эффективности.
A B
Выше приведен пример такой линии, которая не рисуется за гранью.
Теги: 3D