Обо мне
Привет! Меня зовут Лис и это мой блог. Здесь я могу ныть и страдать, писать про код и обо всем.
Февраль 2025
ПнВтСрЧтПтСбВс
12
3456789
10111213141516
17181920212223
2425262728
Теги
Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet

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

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