Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка комR_А5.doc
Скачиваний:
13
Добавлен:
09.11.2019
Размер:
419.84 Кб
Скачать

Властивості матеріалу

Для завдання параметрів поточного матеріалу використовуються команди

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).

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]() можливий тільки для установки міри дзеркального віддзеркалення матеріалу. У більшості моделей враховується дифузне і дзеркальне відбите світло; перший визначає природний колір об'єкту, а другий - розмір і форму відблисків на його поверхні.

Параметр face визначає тип граней, для яких задається цей матеріал і може набувати значень GL_FRONT, GL_BACK або GL_FRONT_AND_BACK.

Якщо в сцені матеріали об'єктів розрізняються лише одним параметром, рекомендується спочатку встановити потрібний режим, викликавши glEnable() з параметром GL_COLOR_MATERIAL, а потім використовувати команду

void glColorMaterial (GLenum face, GLenum pname)

де параметр face має аналогічний зміст, а параметр pname може набувати усіх перерахованих значень. Після цього, значення вибраного з допомогою pname властивості матеріалу для конкретного об'єкту (чи вершини) встановлюється викликом команди glColor..(), що дозволяє уникнути викликів більше ресурсоємної команди glMaterial..() і підвищує ефективність програми.

Приклад.

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);