exam21 - MiAneko24/bmstu-cg GitHub Wiki

21.Трехмерное отсечение. Виды отсекателей. Вычисление кодов концов отрезка для каждого типа отсекателей. Алгоритм отсечения отрезков средней точкой.

Отсечение - операция удаления части изображения, находящейся за пределами некоторой заданной области, называемой отсекателем.

Трехмерное отсечение

В трехмерном отсечении, чаще всего (но не всегда), отсекателем является прямоугольный параллепипед или усеченая пирамида (шесть граней)

Паралелепипед

Тут как и в двумерном отсечении, используются коды концевых точек. В трехмерном случае, используется 6-битовый код.

первый бит - если конец ребра левее объема (x < xл)
второй бит - если конец ребра правее объема (x > хп)
третий бит - если конец ребра ниже объема (y < yн)
четвертый бит - если конец ребра выше объема (y > yв)
пятый бит - если конец ребра ближе объема (z > zб)
шестой бит - если конец ребра дальше объема (z < zn)

1

Усечёная пирамида

В случае усечённой пирамиды, обычно используют пробные функции (для каждой грани, итого 6), которые составляют код.

Пробная функция (определение сделано на основе слов Курова) - это такая функция, которая позволяет определить, как расположена точка относительно плоскости (в случае 3дэ). То есть надо точку подставить в эту функцию. Если fпр = 0, то точка лежит на плоскости.

ЧТОБЫ ПРАВИЛЬНО СУДИТЬ, КАК РАСПОЛОЖЕНА ТОЧКА (ПО КАКУЮ СТОРОНУ ОТ ПЛОСКОСТИ), НАДО ЗНАК ПРОБНОЙ ФУНКЦИИ ДЛЯ ЭТОЙ ТОЧКИ СРАВНИТЬ СО ЗНАКОМ ПРОБНОЙ ФУНКЦИИ ДЛЯ ТОЧКИ, ПОЛОЖЕНИЕ КОТОРОЙ НАМ ИЗВЕСТНО (c) Куров, 1488 год до н.э.

2

zцп - центр проекции.

Уравнение прямой на плоскости xz, несущей проекцию правой грани отсекателя, имеет вид:
3

Пробная функция для fп (правая грань):

fp

И т. д:

ep

Чем ближе zцп к бесконечности, тем больше фигура приближается к прямоугольному параллепипеду. Пробные функции при этом тоже приближаются к соответствующим пробным функциям прямоугольного парллелепипеда.

Тут ещё есть свой прикол: последний метод на скрине (для ближней и дальней грани), может выдать неправильные значения кодов, если концы отрезка лежат за центром проекции.
Решение: если z > zцп, проверять только первые четыре бита кода.

Про коды

  • Сумма битов кодов = 0 - отрезок видим, как и в двумерном случае
  • Одна сумма = 0, другая != 0 - отрезок частично видим.
  • В остальных случаях используем логическое произведение кодов: T1[0] * T2[0] + ... + T1[5] * T2[5]. Если ЛП != 0, то отрезок полностью невидимый.

Можно сделать вывод, что тут все так же, как и в двумерном случае.

Трехмерный алгоритм разбиения средней точкой

Тут все абсолютно так же, как и в двухмерном случае. Нужно изменить количество битов в коде конца отрезка.

Следующий вопрос: 22. Отсечение отрезков в трехмерном пространстве. Трехмерный алгоритм Кируса Бека.

Предыдущий вопрос: 20. Операции преобразования в трехмерном пространстве. Матрицы преобразований.