Проективное наложение текстуры - Projective texture mapping

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

Проективное отображение текстуры - это, по сути, особый матрица трансформация который выполняется для каждой вершины, а затем линейно интерполируется как стандартное наложение текстуры.

Конвейерный подход с фиксированной функцией

Исторически[1], используя проективное отображение текстуры, задействованное с учетом специальной формы генерации линейных координат текстуры глаза[2] преобразовать (tcGen для краткости). Затем это преобразование было умножено на другую матрицу, представляющую свойства проектора, которая была сохранена в матрице преобразования координат текстуры.[3]. Результирующая объединенная матрица в основном зависела как от свойств проектора, так и от положения глаз вершин.

Ключевыми моментами этого подхода являются то, что линейный tcGen глаза является функцией координат глаза вершины, которая является результатом как свойств глаза, так и координат вершин пространства объекта (более конкретно, положение вершины пространства объекта преобразуется с помощью проекции вида модель-вид Из-за этого соответствующая матрица текстуры может использоваться для «сдвига» свойств глаза, так что объединенный результат будет таким же, как при использовании линейного глаза tcGen с точки зрения, которая может отличаться от точки зрения наблюдателя.

Программируемый конвейерный подход

Менее сложный метод расчета этого подхода стал возможен с вершинные шейдеры.

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

В этом случае матрица проектора модель-вид-проекция по существу представляет собой вышеупомянутое соединение линейного по глазам tcGen с предполагаемой функцией сдвига проектора. Используя эти две матрицы, достаточно нескольких инструкций для вывода преобразованного положения вершины пространства глаза и Проективная координата текстуры. Эта координата просто получается путем рассмотрения матрицы проектора модель-вид-проекция: другими словами, это положение вершины глазного пространства, если бы рассматриваемый проектор был наблюдателем.

Предостережения

В обоих предложенных подходах есть две небольшие проблемы, которые могут быть тривиально решены и исходят из различных соглашений, используемых в отношении пространства глаз и пространства текстуры.

Определение свойств этих пространств выходит за рамки данной статьи, но хорошо известно, что к текстурам обычно следует обращаться в диапазоне [0..1], в то время как координаты пространства между глазами адресуются в диапазоне [-1..1]. В используемом режиме обтекания текстурой могут возникать различные артефакты, но очевидно, что операция сдвига и масштабирования определенно необходима для получения ожидаемого результата.

Другая проблема на самом деле является математической. Хорошо известно, что используемая матричная математика дает обратную проекцию. Исторически сложилось так, что этого артефакта избегали, используя специальную черно-белую текстуру, чтобы убрать ненужные проекции. Используя пиксельные шейдеры, можно использовать другой подход: проверки координат достаточно, чтобы различать прямые (правильные) и обратные (неправильные, которых следует избегать).

Рекомендации

  1. ^ В оригинальная бумага от веб-сайт nVIDIA включает всю необходимую документацию по этому вопросу. Этот же сайт также содержит дополнительные подсказки.
  2. ^ Генерация координат текстуры рассматривается в разделе 2.11.4 «Генерация координат текстуры» из Спецификация OpenGL 2.0. Генерация координат линейной текстуры глаза - это особый случай.
  3. ^ Матрица текстур представлена ​​в разделе 2.11.2 «Матрицы» Спецификация OpenGL 2.0.

внешняя ссылка

  • http://www.3dkingdoms.com/weekly/weekly.php?a=20 Учебное пособие, показывающее, как реализовать проективное текстурирование с использованием подхода с программируемым конвейером в OpenGL.