exam22 - MiAneko24/bmstu-cg GitHub Wiki
22. Отсечение отрезков в трехмерном пространстве. Трехмерный алгоритм Кируса Бека.
Отсечение отрезков в трехмерном пространстве.
См. тут.
Трехмерный алгоритм Кируса-Бека
Так же как и в двухмерном случае, отсекатель может быть произвольным выпуклым объемом.
Основные отличия от двумерного случая:
- Вектор состоит из 3х компонент: x, y, z
- Видимость определяем относительно граней
Видимость точки
- Так же проводят нормаль (но уже от грани), и берут произвольную точку любой грани отсекателя, от которой будем проводить вектор к точке.
- Подсчёт скалярного произведения двух этих векторов.
- Анализ знака этого произведения: > 0 - точка видима, = 0 - на грани, < 0 - невидима.
- Для отчесения отрезка, так же как и в двухмерном случае, анализируют вектор направления (директрису): P2 - P1.
- Определение точки пересечения через t = -Wск / Dск
- Wск - произведение двух векторов из п. 1, Dск - произведение дирректрисы на вектор нормали
Про произведения и вектора
- Dск = 0 - отрезок паралелен рассматриваемой грани, это из свойств скалярного произведения
- D = 0 - отрезок точка (очевидно)
- Wск >= 0, отрезок видимый относительно грани
- Wск < 0, отрезок невидимый относительно грани и поэтому невидимый относительно всего отсекателя
Выбор t для нахождения точек пересечения
t для видимого отрезка (то есть выбор нужных параметров для отрисовки), выбирается так же как в двумерном случае, с помощью анализа знака Dск и разбиения на группы >= и < 0, и выбором в них.
- Dск > 0 - точка расположена ближе к началу
- Dск < 0 - ближе к концу
При Dск >= 0 берем максимум, и это будет началом отрезка (tн). При Dcк < 0 берем минимум, и это будет концом отрезка (tк).
Стоит отметить, что не хранятся все t для каждой грани. t выбираются в момент вычисления, по типу tн = max(tн, tтек) и тд
И не забыть проверку tн <= tв.
Про пирамиды и эффективность (лучше это не читать)
Просто для ознакомления
В случае усеченной пирамиды (пирамиды видимости), внутренние нормали к граням отсекатля определяют формально (ЧТО?), так как их значения неочевидны.
Оценка числа операций растет линейно с ростом числа сторон или граней у отсекателя.
Следующий вопрос: 23. Определение факта выпуклости трехмерных тел. Разбиение тела на выпуклые многогранники.
Предыдущий вопрос: 21. Трехмерное отсечение. Виды отсекателей. Вычисление кодов концов отрезка для каждого типа отсекателей. Алгоритм отсечения отрезков средней точкой.