Файл: графическая библиотека opengl.pdf

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

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

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

Добавлен: 09.06.2020

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

Скачиваний: 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 –