Вычисление текстурных координат в OpenGL

Рис. 8.63. Вычисление текстурных координат в OpenGL

Каким образом OpenGL быстро вычисляет нужную пару текстурных координат (s, г)? Как показано на рис. 8.63, а, сначала он находит (в координатах глаза) направление отражения г (с помощью вышеприведенной формулы), где и - единичный вектор (также в координатах глаза), направленный от глаза к вершине V объекта, a m - нормаль в вершине V. Затем он просто использует выражение"images/tmp8E4A-593.png" />

(8.23)

где р = yjr? +r* + (r2 + lf - малопонятный масштабный множитель. (Вывод этой формулы приводится далее в упражнениях.) Для осуществления этой процедуры нам необходимо предварительно вычислить текстуру, которая показывает, что бы мы увидели из окружающей среды в абсолютно отражающей сфере из точки наблюдения, находящейся вдали от этой сферы [Haeberli, 97]. Эта процедура отображает часть среды, лежащую в полусфере позади глаза, в окружность в середине текстуры, а ту часть среды, которая находится в полусфере перед глазом, - в плоское кольцо, охватывающее эту окружность.

Визуализация граней для усиления реалистичности

(Представьте себе эту конфигурацию.) При изменении положения глаза текстура должна быть пересчитана заново. Изображения на рис. 8.60 были сделаны с использованием этого метода.

Имитация бликов средствами отображения среды Отображение отражений можно использовать в OpenGL для создания на поверхности зеркальных бликов. Создается текстурное отображение, имеющее интенсивное, концентрированное яркое пятно. Метод отображения отражений «рисует» этот блик на поверхности, чтобы он выглядел как настоящий источник света, находящийся в окружающей среде. Блик, созданный таким способом, может быть более концентрированным и подробным, чем блики, сделанные с помощью зеркальной составляющей Фонга при закраске Гуро. Вспомним, что составляющая Фонга вычисляется только в вершинах грани, поэтому легко «пропустить» зеркальный блик, оказавшийся между двух вершин. При отображении отражений текстурные координаты (s, t) формируются в каждой вершине и затем интерполируются в промежутках. Поэтому если текстурные координаты, на которые указывают вершины, окружают яркую точку, то такая точка будет правильно визуализирована на грани.


⇐ Предыдущая| |Следующая ⇒