Проективное наложение текстур
![]() | Эта статья может сбивать с толку или быть непонятной читателям . ( Март 2012 г. ) |
![]() | Тон или стиль этой статьи могут не отражать энциклопедический тон , используемый в Википедии . ( Апрель 2022 г. ) |
Проекционное наложение текстур — это метод наложения текстур , который позволяет проецировать текстурированное изображение на сцену, как если бы это был слайд-проектор . Проекционное наложение текстур полезно в различных техниках освещения и является отправной точкой для наложения теней .
Проективное наложение текстур — это, по сути, специальное матричное преобразование , которое выполняется для каждой вершины, а затем линейно интерполируется, как стандартное наложение текстур.
Конвейерный подход с фиксированными функциями
[ редактировать ]Исторически [1] , используя проективное наложение текстур, предполагающее рассмотрение особой формы генерации координат линейной текстуры глаза. [2] Transform ( 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.