Проективное наложение текстуры - это метод наложения текстуры, который позволяет проецировать текстурированное изображение на сцену, как если бы с помощью слайд-проектора . Проективное наложение текстуры полезно в различных методах освещения и является отправной точкой для наложения теней .
Проективное отображение текстуры - это, по сути, специальное матричное преобразование, которое выполняется для каждой вершины, а затем линейно интерполируется как стандартное отображение текстуры.
Конвейерный подход с фиксированной функцией
Исторически [1] использование проективного наложения текстуры предполагало рассмотрение специальной формы преобразования генерации линейных координат текстуры глаза [2] ( сокращенно tcGen ). Затем это преобразование было умножено на другую матрицу, представляющую свойства проектора, которая была сохранена в матрице преобразования координат текстуры [3] . Результирующая объединенная матрица в основном зависела как от свойств проектора, так и от положения глаз вершин.
Ключевыми моментами этого подхода являются то, что линейный tcGen глаза является функцией координат глаза вершины, которая является результатом как свойств глаза, так и координат вершин пространства объекта (более конкретно, положение вершины пространства объекта преобразуется с помощью проекции вида модель-вид матрица). Из-за этого соответствующая матрица текстуры может использоваться для «сдвига» свойств глаза, так что объединенный результат будет таким же, как при использовании линейного глаза tcGen с точки зрения, которая может отличаться от точки зрения наблюдателя.
Программируемый конвейерный подход
Менее сложный метод вычисления этого подхода стал возможен с вершинными шейдерами .
Затем предыдущий алгоритм может быть переформулирован путем простого рассмотрения двух матриц модель-вид-проекция: одна с точки зрения глаза, а другая с точки зрения проектора.
В этом случае матрица проектора модель-вид-проекция по существу представляет собой вышеупомянутое соединение линейного по глазам tcGen с предполагаемой функцией сдвига проектора. Используя эти две матрицы, достаточно нескольких инструкций для вывода преобразованного положения вершины пространства глаз и проекционной координаты текстуры. Эта координата просто получается путем рассмотрения матрицы проектора модель-вид-проекция: другими словами, это положение вершины глазного пространства, если бы рассматриваемый проектор был наблюдателем.
Предостережения
В обоих предлагаемых подходах есть две небольшие проблемы, которые могут быть тривиально решены и исходят из различных соглашений, используемых в отношении пространства глаз и пространства текстуры.
Определение свойств этих пространств выходит за рамки данной статьи, но хорошо известно, что к текстурам обычно следует обращаться в диапазоне [0..1], в то время как координаты пространства вокруг глаз адресуются в диапазоне [-1..1]. В зависимости от используемого режима наложения текстуры могут возникать различные артефакты, но очевидно, что операция сдвига и масштабирования определенно необходима для получения ожидаемого результата.
Другая проблема на самом деле является математической. Хорошо известно, что используемая матричная математика дает обратную проекцию. Исторически сложилось так, что этого артефакта избегали, используя специальную черно-белую текстуру, чтобы убрать ненужные проекции. Используя пиксельные шейдеры, можно использовать другой подход: проверки координат достаточно, чтобы различать прямые (правильные) и обратные (неправильные, которых следует избегать).
Рекомендации
- ^ Оригинальный документсвебсайта NVidiaвключаетсебя всю необходимую документацию по данному вопросу. На этом же сайте есть идополнительные подсказки.
- ^ Генерация координат текстуры рассматривается в разделе 2.11.4 «Генерация координат текстуры» изспецификации OpenGL 2.0. Генерация координат линейной текстуры глаза - это особый случай.
- ^ Матрица текстур представлена в разделе 2.11.2 «Матрицы»спецификации OpenGL 2.0.
Внешние ссылки
- http://www.3dkingdoms.com/weekly/weekly.php?a=20 Учебное пособие, показывающее, как реализовать проективное текстурирование с использованием подхода с программируемым конвейером в OpenGL.