atten =---(8.10)
kc+k,D + kqD2

где kc, k,, kq - коэффициенты, a D - расстояние между точкой расположения источника света и рассматриваемой вершиной. Это выражение является достаточно гибким, чтобы позволить смоделировать любую комбинацию постоянной, линейной и квадратичной (точнее, обратно-квадратичной) зависимости от расстояния до источника. Параметры управляются с помощью вызовов функции

glLightf(GL_LIGHT0. GL_C0NSTANT_ATTENUATI0N. 2.0):

и подобным же образом для GL_LINEAR_ATTENUATION и GL_QUADRATIC_ATTENUATION. Значения по умолчанию составляют k = 1, k. = 0, k =0, что исключает какое-либо ослабление света.

с 7 I ч

Модель освещения

OpenGL предусматривает задание трех параметров, определяющих общие законы применения модели освещения. Эти параметры передаются в функцию gl LightModel и некоторые ее модификации.

Цвет глобального фонового света. Для любой заданной сцены можно установить глобальный фоновый свет, не зависимый ни от какого определенного источника. Для создания такого освещения следует задать его цвет с помощью следующих команд:

GLfloat amb[] - {0.2. 0.3. 0.1. 1.0}:
gl Li ghtModelfv(GL_LIGHT_M0DEL_AMBIENT. amb):

Этот код придает источнику фонового света цвет (0,2, 0,3, 0,1). Значение по умолчанию составляет (0,2, 0,2, 0,2, 1,0), так что фоновый свет присутствует всегда, если только вы умышленно не измените его. Задание фоновому источнику ненулевого значения обеспечивает видимость объектов сцены, даже если вы не активизировали ни одной функции освещения.

Является ли точка наблюдения локальной или удаленной? OpenGL вычисляет зеркальные отражения с помощью «промежуточного вектора» h = s + v, описанного в разделе «Зеркальное отражение» данной

1 Коэффициент ослабления отключен в случае источников направленного света, поскольку они находятся бесконечно далеко.

8.2. Введение в модели закрашивания главы. Истинные направления s и v, вообще говоря, различаются для каждой вершины сетки. (Визуализируйте такую конфигурацию!) Если источник света является направленным, то вектор s - величина постоянная, a v все же изменяется от вершины к вершине. Скорость визуализации возрастет, если сделать и вектор v постоянным для всех вершин. По умолчанию OpenGL использует значение v - (0,0,1), при этом вектор v указывает в сторону положительной оси z в координатах камеры. В то же время можно принудительно заставить графический конвейер вычислять истинное значение вектора v для каждой вершины с помощью выполнения оператора:


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