Проективные текстуры (projective texture)

Видеокарты и мониторы

Рассмотрим общий случай, когда текстура проецируется на поверхность, которая затем проецируется на 2-х мерный экран. Мы проецируем проектором некое изображение на поверхность, а затем смотрим на нее из произвольной точки (см. рис.1). Т.е. снова проецируем изображение, на этот раз уже с поверхности на наблюдателя. При построении изображения эта ситуация моделируется крайне просто — проекция примитивов поверхности на экран дело обычное, а роль второй проекции (проецирование изображения на поверхность) играет привязка соответствующего места текстуры с изображением на примитивы.

Проективные текстуры (projective texture), фото 1

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

Всего мы имеем дело с четырьмя координатными системами.

1. Наблюдательская система ("clip" или "projection") — является обычным для графики 4-х координатным представлением 3-х мерного (объемного) пространства. Координаты зовутся x, y, z, w. Начало этой координатной системы лежит в точке наблюдения.

2. Экранная система ("screen") — 2-х мерный экран, который и видит наблюдатель. Эти координаты получаются из наблюдательской системы путём деления x и y на Проективные текстуры (projective texture), фото 2 (индекс "s" у получающихся координат обозначает экранную систему).

3. Система источника света ("light") — это вторая объемная система координат Проективные текстуры (projective texture), фото 3. В начале этой системы координат находится источник света.

4. Текстурная система (texture) — координаты на плоскости проецируемой текстуры (тот слайд, сквозь который светит воображаемый источник света). Текстурные координаты получаются как Проективные текстуры (projective texture), фото 4 (также можно вычислить Проективные текстуры (projective texture), фото 5, если мы решили не ограничиваться плоской текстурой).

Наша задача: имея точку Проективные текстуры (projective texture), фото 6 на экране, нам необходимо найти соответствующую ей точку Проективные текстуры (projective texture), фото 7 на текстуре.

Проективные текстуры (projective texture), фото 8

На рис. 2 показан сегмент линии в нашем трехмерном пространстве и его проекция на 2-х мерный экран. Этот сегмент — горизонтальная полоса сканирования на экране, расположенная между двумя рёбрами полигона. Координаты его концов в наблюдательской системе:

Проективные текстуры (projective texture), фото 9

Нам необходимо найти координаты нашей произвольной точки отрезка в координатной системе источника света. Будем считать, что, так или иначе, мы уже определили координаты концов отрезка в системе источника света. Для начала нам необходимо найти параметр Проективные текстуры (projective texture), фото 10, соответствующий Проективные текстуры (projective texture), фото 11 (в общем случае экранное Проективные текстуры (projective texture), фото 12 наблюдательскому). Для этого запишем

Проективные текстуры (projective texture), фото 13

и решим относительно Проективные текстуры (projective texture), фото 14. Для тех, кому интересно, приведем все рассуждения:

Вычисление Проективные текстуры (projective texture), фото 15.

Зададим a и b, таким образом, что Проективные текстуры (projective texture), фото 16

Зададим A и B так, что Проективные текстуры (projective texture), фото 17

Тогда:

Проективные текстуры (projective texture), фото 18

Легко проверить, что Проективные текстуры (projective texture), фото 19 удовлетворяют этому уравнению, позволяя нам получить искомый параметр Проективные текстуры (projective texture), фото 20, и, далее, координаты Проективные текстуры (projective texture), фото 21.

Продолжим. У нас есть матрица M, переводящая координаты из системы источника в наблюдательскую:

Проективные текстуры (projective texture), фото 22

Уравнение (6) выражает координаты на поверхности текстуры, соответствующие любой точке сегмента выбираемой (линейно интерполируемой) параметром Проективные текстуры (projective texture), фото 23 в экранных координатах.

Для того, чтобы получить координаты, мы должны линейно интерполировать Проективные текстуры (projective texture), фото 24

Для каждого пикселя: Проективные текстуры (projective texture), фото 25

Если Проективные текстуры (projective texture), фото 26 постоянна на всём полигоне, то уравнение (7) приобретает вид

Проективные текстуры (projective texture), фото 27

откуда мы имеем Проективные текстуры (projective texture), фото 28 Здесь Проективные текстуры (projective texture), фото 29 — текстурные координаты, синонимы Проективные текстуры (projective texture), фото 30

Уравнение (8) и определяет текстурные координаты, которые можно привязать к вершинам передаваемого на ускоритель полигона. В более общем сложном случае проективной текстуры, выражаемом уравнением (7), требуется деление на Проективные текстуры (projective texture), фото 31, а не на Проективные текстуры (projective texture), фото 32.




Комментарии

правилами