Вопросы к 21 - p1xelse/CG GitHub Wiki

Как формировать коды видимости для точки, если в качестве отсекателя взята усеченная пирамида?

Если отсекатель - усечённая пирамида, то для составления кода используются пробные функции.

Откуда берутся пробные функции для пирамиды? Как вывести эти формулы?

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

Пробная функция грани выводится из уравнения прямой на плоскости XZ, несущей проекцию этой грани.

Откуда берутся коэффициенты для уравнения плоскости, задающего грань: коэффициенты берутся из принципа подобия треугольников, образованных вершинами пирамиды и центром проекции.
Знак коэффициентов проверяется и корректируется так же, как в Робертсе: все внутренние точки должны быть по положительную сторону от граней.

Зачем эта проверка и корректировка:
Без нее мы не можем по знаку пробной функции однозначно сказать, располагается точка внутри отсекателя или вне: потому что при умножении обеих частей равенства на -1, знак получится другой, а объекты - плоскость и точка не изменятся.

Пример:

  1. Рассмотрим уравнение прямой на плоскости XZ, несущей проекцию правой грани:
  2. Перенесем все слагаемые в левую часть:
  3. При подстановке вместо x и z координат проверяемой точки в результате выражения получим значение пробной функции в этой точке:

Как перенести алгоритм средней точкой из двумерного в трехмерное пространство?

Алгоритм в трехмерном пространстве отличается от алгоритма в двумерном тем, как мы формируем битовый код видимости: каждая компонента кода кодирует видимость относительно грани отсекателя, компонент кода 6. И тем, что мы работаем с точками в трехмерном пространстве - добавляется еще одна компонента в координаты.