ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.06.2020

Просмотров: 3137

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 41

оси

 –z, 

вне

зависимости

от

положения

в

видовы

координатах

Если

же

он

равен

GL_TRUE

то

наблюдатель

находится

в

  

начале

видовой

системы

координат

Это

может

улучшить

качество

освещения

но

усложняет

его

расчет

Значение

по

умолчанию

GL_FALSE

GL_LIGHT_MODEL_TWO_SIDE 

параметр

param

должен

быть

булевым

   

и

управляет

режимом

расчета

освещенности

как

для

лицевых

так

и

для

обратных

граней

Если

он

равен

GL_FALSE

то

освещенность

рассчитывается

только

для

лицевых

граней

Если

же

он

равен

GL_TRUE

расчет

проводится

и

для

обратных

граней

Значение

по

умолчанию

GL_FALSE

GL_LIGHT_MODEL_AMBIENT 

параметр

 params

должен

содержать

четыре

целых

или

   

вещественных

числа

которые

определяют

цвет

фонового

освещения

даже

в

случае

отсутствия

определенных

источников

света

Значение

по

умолчанию

: (0.2, 0.2, 0.2,1.0). 

4.2. 

Спецификация

материалов

Для

задания

параметров

текущего

материала

используются

команды

void 

glMaterial[i f] 

(GLenum 

face

, GLenum 

pname

,  

                      GLtype 

param

void 

glMaterial[i f]v 

(GLenum 

face

, GLenum 

pname

,  

                       GLtype *

params

С

их

помощью

можно

определить

рассеянный

диффузный

и

зеркальный

  

цвета

материала

а

также

степень

зеркального

отражения

и

интенсивность

излучения

света

если

объект

должен

светиться

Какой

именно

параметр

будет

определяться

значением

param

зависит

от

значения

pname

:

GL_AMBIENT 

параметр

params

должен

содержать

четыре

целых

или

вещественных

значения

цветов

RGBA, 

которые

определяют

рассеянный

цвет

материала

  (

цвет

материала

в

тени

). 

Значение

по

умолчанию

: (0.2, 0.2, 0.2, 1.0).


background image

 42

GL_DIFFUSE 

параметр

params

должен

содержать

четыре

целых

или

вещественных

значения

цветов

RGBA, 

которые

определяют

диффузный

цвет

материала

Значение

по

умолчанию

: (0.8, 0.8, 

0.8, 1.0).

GL_SPECULAR 

параметр

params

должен

содержать

четыре

целых

или

вещественных

значения

цветов

RGBA, 

которые

определяют

зеркальный

цвет

материала

Значение

по

умолчанию

: (0.0, 0.0, 

0.0, 1.0).

GL_SHININESS 

параметр

params

должен

содержать

одно

целое

или

вещественное

значение

в

диапазоне

от

 0 

до

128, 

которое

определяет

степень

зеркального

отражения

материала

Значение

по

умолчанию

0. 

GL_EMISSION 

параметр

params

должен

содержать

четыре

целых

или

вещественных

значения

цветов

RGBA, 

которые

определяют

интенсивность

излучаемого

света

материала

Значение

по

умолчанию

: (0.0, 0.0, 0.0, 1.0).

GL_AMBIENT_AND_DIFFUSE  

эквивалентно

двум

вызовам

команды

glMaterial*()

со

значением

 pname 

GL_AMBIENT

и

GL_DIFFUSE

и

одинаковыми

значениями

params

.  

Из

этого

следует

что

вызов

команды

glMaterial[i f]()

возможен

  

только

для

установки

степени

зеркального

отражения

материала

(shininess). 

Команда

glMaterial[i f]v()

используется

для

задания

остальных

параметров

.  

Параметр

face

определяет

тип

граней

для

которых

задается

этот

материал

и

может

принимать

значения

GL_FRONT

GL_BACK

или

GL_FRONT_AND_BACK

.

Если

в

сцене

материалы

объектов

различаются

лишь

одним

параметром

рекомендуется

сначала

установить

нужный

режим

вызвав

glEnable()

 c 

параметром

GL_COLOR_MATERIAL

а

затем

использовать

команду

void 

glColorMaterial 

(GLenum 

face

, GLenum 

pname


background image

 43

где

параметр

 face

имеет

аналогичный

смысл

а

параметр

pname

может

принимать

все

перечисленные

значения

После

этого

значения

выбранного

с

помощью

pname

свойства

материала

для

конкретного

объекта

(

или

вершины

устанавливаются

вызовом

команды

glColor*()

что

позволяет

избежать

вызовов

более

ресурсоемкой

команды

glMaterial*()

и

повышает

эффективность

программы

Другие

методы

оптимизации

приведены

в

п

. 8.2. 

Пример

определения

свойств

материала

float mat_dif[]={0.8,0.8,0.8}; 
float mat_amb[] = {0.2, 0.2, 0.2}; 
float mat_spec[] = {0.6, 0.6, 0.6}; 
float shininess = 0.7 * 128; 
… 
glMaterialfv (GL_FRONT_AND_BACK,GL_AMBIENT, mat_amb); 
glMaterialfv (GL_FRONT_AND_BACK,GL_DIFFUSE, mat_dif); 
glMaterialfv (GL_FRONT_AND_BACK,GL_SPECULAR, mat_spec); 
glMaterialf  (GL_FRONT,GL_SHININESS, shininess); 

4.3. 

Описание

источников

света

Определение

свойств

материала

объекта

имеет

смысл

только

если

в

сцене

есть

источники

света

Иначе

все

объекты

будут

черными

  (

или

строго

говоря

иметь

цвет

равный

рассеянному

цвету

материала

умноженному

на

интенсивность

глобального

фонового

освещения

см

команду

 glLightModel). 

Добавить

в

сцену

источник

света

можно

с

помощью

команд

void 

glLight[i f] 

(GLenum 

light

, GLenum 

pname

,  

                   GLfloat 

param

void 

glLight[i f] 

(GLenum 

light

, GLenum 

pname

,  

                   GLfloat *

params

Параметр

light

однозначно

определяет

   

источник

света

Он

  

выбирается

из

набора

специальных

символических

имен

вида

GL_LIGHTi

 , 

где

 i  

должно

лежать

в

диапазоне

от

 0 

до

константы

GL_MAX_LIGHT

которая

обычно

не

превосходит

восьми

Параметры

pname 

и

params

имеют

смысл

аналогичный

команде

glMaterial*()

Рассмотрим

значения

параметра

pname

GL_SPOT_EXPONENT 

параметр

param

должен

содержать

целое

или

вещественное

число

от

 0 

до

 128, 

задающее


background image

 44

распределение

интенсивности

света

Этот

параметр

описывает

уровень

сфокусированности

источника

света

Значение

по

умолчанию

: 0 (

рассеянный

свет

).  

GL_SPOT_CUTOFF 

параметр

param

должен

содержать

целое

или

вещественное

число

между

 0 

и

 90 

или

равное

180, 

которое

определяет

максимальный

угол

разброса

света

Значение

этого

параметра

есть

половина

угла

в

вершине

конусовидного

светового

потока

создаваемого

источником

Значение

по

умолчанию

: 180 (

рассеянный

свет

). 

GL_AMBIENT  

параметр

params

должен

содержать

четыре

целых

или

вещественных

значения

цветов

RGBA, 

которые

определяют

цвет

фонового

освещения

Значение

по

умолчанию

: (0.0, 0.0, 

0.0, 1.0).  

GL_DIFFUSE  

параметр

params

должен

содержать

четыре

целых

или

вещественных

значения

цветов

RGBA, 

которые

определяют

цвет

диффузного

освещения

Значение

по

умолчанию

: (1.0, 1.0, 

1.0, 1.0)  

для

GL_LIGHT0

  

и

 (0.0, 0.0, 0.0, 1.0) 

для

остальных

.  

GL_SPECULAR 

параметр

params

должен

содержать

четыре

целых

или

   

вещественных

значения

цветов

RGBA, 

которые

определяют

цвет

зеркального

отражения

Значение

по

умолчанию

: (1.0, 1.0, 

1.0, 1.0)  

для

GL_LIGHT0

  

и

 (0.0, 0.0, 0.0, 1.0) 

для

остальных

GL_POSITION  

параметр

params

должен

содержать

четыре

целых

или

   

вещественных

числа

которые

определяют

положение

источника

света

.  

Если

значение

компоненты

  w  

равно

 0.0, 

то

источник

считается

бесконечно

   

удаленным

и

при

расчете

освещенности

учитывается

только

направление

на

точку

 (x,y,z), 

в

противном

случае

считается

что

источник

расположен

в

точке

 (x,y,z,w). 

В

первом

случае

ослабления

света

при

удалении

от

источника

не


background image

 45

происходит

т

.

е

источник

считается

бесконечно

удаленным

Значение

по

умолчанию

: (0.0, 0.0, 1.0, 0.0).  

GL_SPOT_DIRECTION 

параметр

params

должен

содержать

четыре

целых

или

   

вещественных

числа

которые

определяют

направление

света

Значение

по

умолчанию

: (0.0, 0.0, -1.0, 1.0). 

Эта

характеристика

источника

имеет

смысл

если

значение

GL_SPOT_CUTOFF

отлично

от

180 (

которое

кстати

задано

по

умолчанию

).  

GL_CONSTANT_ATTENUATION

,  

  

GL_LINEAR_ATTENUATION

GL_QUADRATIC_ATTENUATION  

  

параметр

params

задает

значение

одного

из

трех

коэффициентов

определяющих

ослабление

интенсивности

света

при

удалении

от

источника

Допускаются

только

неотрицательные

значения

Если

источник

не

является

направленным

  (

см

GL_POSITION

), 

то

ослабление

обратно

пропорционально

сумме

  

att

constant

+att

linear

*d+ att

quadratic

 *d

2

,  

где

  d – 

расстояние

между

источником

света

и

освещаемой

им

вершиной

att

constant

, att

linear

и

 at-

t

quadratic

равны

параметрам

заданным

с

помощью

констант

GL_CONSTANT_ATTENUATION

GL_LINEAR_ATTENUATION 

и

GL_QUADRATIC_ATTENUATION

соответственно

По

умолчанию

эти

параметры

задаются

тройкой

 (1, 0, 0), 

и

фактически

ослабления

не

происходит

.  

  

При

изменении

положения

источника

света

следует

учитывать

следующий

факт

в

 OpenGL 

источники

света

являются

объектами

во

многом

такими

же

как

многоугольники

и

точки

На

них

распространяется

основное

правило

обработки

координат

в

 OpenGL –