Проективное текстурное отображение

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

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

Подход с фиксированной функцией конвейера

Исторически [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.
Получено с "https://en.wikipedia.org/w/index.php?title=Проекционное_текстурное_отображение&oldid=1243732788"