21. Трехмерное отсечение. Виды отсекателей. Алгоритм отсечения отрезков средней точкой. - p1xelse/CG GitHub Wiki

Увертюра

Понятие отсечения

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

Отсечение бывает:

  1. Двумерное
  2. Трехмерное (рассматривается в этом вопросе)

Видимость объекта

  1. Видимый объект - объект, находящийся целиком внутри отсекателя.
  2. Невидимый объект - объект, находящийся целиком вне отсекателя
  3. Частично видимый объект - объект, часть которого находится внутри отсекателя, а часть - вне отсекателя.

Внутреннее и внешнее отсечение

  1. Отсечение - внутреннее отсечение.

    Комментарий от Куруша:

    Отсечение (внутреннее) - у нас есть отсекатель, и мы должны оставить только ту часть (части) объекта, которые лежат внутри отсекателя.

  2. Стирание - внешнее отсечение.

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

    Комментарий от Куруша:

    Отсечение (внешнее, или другими словами стирание) - наоборот, остается только то, что лежит вне отсекателя.

Виды трёхмерных отсекателей

Код видимости задаётся 6 битами.

Виды трехмерных отсекателей:

  1. Прямоугольный параллелепипед
  2. Усечённая пирамида видимости

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

1. Прямоугольный параллелепипед

Как и в двумерном отсечении, здесь используется битовый код видимости вершины (обобщенный).

T1 = 1, если x < xл, 0 – иначе
T2 = 1, если x > xп, 0 – иначе
T3 = 1, если y < yн, 0 – иначе
T4 = 1, если y > yв, 0 – иначе
T5 = 1, если z > zб, 0 - иначе
T6 = 1, если z < zн, 0 - иначе

Важно подписать, что наименования граней относятся к отсекателю. "верхняя грань отсекателя" и т.д..

2. Усечённая пирамида видимости

Важно подписать, что наименования граней относятся к отсекателю. "верхняя грань отсекателя" и т.д..

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

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

Подстановка координат x и z точки P в пробную функцию правой грани fп даст следующий результат:

На будущее:

Сюда я потом добавлю в каких случаях в 0 выставляется, а в каких случаях 1. Отметила этот момент в issue.

Сумма кодов концов отрезка

Если сумма битов кода отрезка равна 0, то точка расположена внутри отсекателя.

Определение видимости отрезка:

  1. Отрезок видим, если обе суммы кодов концов равны нулю,т. е. S1 = S2.

  2. Если S1 = 0 и S2 <> 0 или S1 <> 0 и S2 = 0, то отрезок частично видимый.

  3. Если обе суммы ненулевые, то отрезок частично в действительности может оказаться частично видимым или полностью невидимым. Для распознавания части полностью невидимых отрезков можно использовать логическое произведение концов отрезка:

    P = T1(1) * T2(1) + T1(2) * T2(2) + T1(3) * T2(3) + T1(4) * T2(4)+ T1(5) * T2(5)+ T1(6) * T2(6), где T1 и T2 - массивы с кодами конечных точек отрезка

Алгоритм трехмерного отсечения средней точкой

Отличается от алгоритма средней точки для двумерного отсечения только количеством битов в коде концов отрезка. Ниже приводится определение кода и суммы кодов для точки (6 бит вместо 4). основной код смотреть в вопросе 14 про двумерную среднюю точку