Эта статья может быть запутанной или непонятной для читателей . ( Март 2012 ) |
Тон или стиль этой статьи может не отражать энциклопедический тон , используемый в Википедии . ( Апрель 2022 ) |
Проективное текстурное отображение — это метод текстурного отображения , который позволяет проецировать текстурированное изображение на сцену, как будто это проектор слайдов . Проективное текстурное отображение полезно в различных методах освещения и является отправной точкой для теневого отображения .
Проективное текстурное отображение по сути представляет собой специальное матричное преобразование , которое выполняется для каждой вершины, а затем линейно интерполируется как стандартное текстурное отображение.
Исторически [1] использование проективного текстурного отображения включало рассмотрение специальной формы преобразования генерации линейных текстурных координат глаза [2] ( сокращенно tcGen ). Затем это преобразование умножалось на другую матрицу, представляющую свойства проектора, которые хранились в матрице преобразования текстурных координат [3] . Полученная концентрированная матрица в основном была функцией как свойств проектора, так и положений вершин глаз.
Ключевые моменты этого подхода заключаются в том, что линейный tcGen глаза является функцией координат вершины глаза, что является результатом как свойств глаза, так и координат вершины пространства объекта (точнее, положение вершины пространства объекта преобразуется матрицей модель-вид-проекция). Благодаря этому соответствующая матрица текстуры может использоваться для «сдвига» свойств глаза, так что концентрированный результат будет таким же, как при использовании линейного tcGen глаза с точки зрения, которая может отличаться от точки зрения наблюдателя.
Менее сложный метод вычисления этого подхода стал возможен благодаря вершинным шейдерам .
Предыдущий алгоритм можно затем переформулировать, просто рассмотрев две матрицы модель-вид-проекция: одну с точки зрения глаза, а другую с точки зрения проектора.
В этом случае матрица модель-вид-проекция проектора по сути является вышеупомянутой концентрацией линейного относительно глаза tcGen с предполагаемой функцией сдвига проектора. Используя эти две матрицы, достаточно нескольких инструкций для вывода преобразованной позиции вершины пространства глаза и координаты проективной текстуры. Эта координата просто получается путем рассмотрения матрицы модель-вид-проекция проектора: другими словами, это позиция вершины пространства глаза, если бы рассматриваемый проектор был наблюдателем.
В обоих предложенных подходах есть две небольшие проблемы, которые можно решить тривиально и которые возникают из-за разных соглашений, используемых для пространства глаза и пространства текстуры.
Определение свойств этих пространств выходит за рамки этой статьи, но хорошо известно, что текстуры обычно следует рассматривать в диапазоне [0..1], тогда как координаты пространства глаза рассматриваются в диапазоне [-1..1]. В зависимости от используемого режима обертывания текстуры могут возникать различные артефакты, но очевидно, что для получения ожидаемого результата определенно необходима операция сдвига и масштабирования.
Другая проблема на самом деле является математической. Хорошо известно, что используемая матричная математика создает обратную проекцию. Этот артефакт исторически избегался с помощью специальной черно-белой текстуры, чтобы отсечь ненужные проекционные вклады. Используя пиксельные шейдеры, можно использовать другой подход: проверки координат достаточно, чтобы отличить прямые (правильные) вклады от обратных (неправильные, которых следует избегать).