glMaterial - вказує параметри матеріалу для системи освітлення

C специфікація

void glMaterialf (GLenum face,
                  GLenum pname,
                  GLfloat param) ;
 
void glMateriali (GLenum face,
                  GLenum pname,
                  GLint param) ;

void glMaterialfv (GLenum face,
                   GLenum pname,
                   const GLfloat * params) ;
 
void glMaterialiv (GLenum face,
                   GLenum pname,
                   const GLint * params) ;

Параметри

face - вказує який тип або типи поверхонь необхідно оновити. Повинен містити одну з наступних іменованих констант: GL_FRONT, GL_BACK або GL_FRONT_AND_BACK. pname - вказує однозначний параметр матеріалу поверхні або поверхонь, які необхідно оновити. Повинен містити значення GL_SHINESS (для версій без масиву) або GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION, GL_SHININESS, GL_AMBIENT_AND_DIFFUSE, GL_COLOR_INDEXES. param - вказує значення, яке повинно присвоюватися для властивості матеріалу GL_SHINESS (для безмасивної версії команди). params - параметр передає вказівник на значення або групу значень, які будуть встановлюватися для властивості матеріалу pname.

Опис

Команда glMaterial присвоює значення для властивостей матеріалу графічного об'єкта, який буде конструюватися. Існує два набори властивостей матеріалу. Перша множина - для зовнішніх поверхонь графічного об'єкта, використовується для заповнення точок, ліній, бітових карт і усіх багатокутників (коли двостороннє освітлення вимкнене), або тільки для зовнішніх поверхонь багатокутників (коли двостороннє освітлення увімкнене). Інший набір - внутрішні сторони, використовуються для заповнення внутрішніх сторін багатокутників тільки якщо увімкнена двостороння схема освітлення. Зверніться до сторінки документації команди glLightModel за деталями відносно односторонньої і двосторонньої схеми освітлення. Команда glMaterial отримує три аргументи. Перший параметр face вказує сторону для якої оновляють параметри освітлення, приймає константи GL_FRONT, GL_BACK або GL_FRONT_BACK. Другий параметр pname, вказує який саме параметр оновляти. Третій параметр params, вказує значення або групу значень, які будуть присвоєні для властивості матеріалу. Параметри матеріалу використовуються у рівняннях освітлення, які опціонально застосовуються до кожного вертекса. Рівняння обговорюються у документації до команди glLightModel. Параметри, які можуть бути вказаними за використання команди glMaterial і їхнє інтерпретування рівняннями освітлення являються наступними:
  • GL_AMBIENT - params містить чотири цілих або дійсних значення, які вказують RGBA колір відбиття навколишнього середовища. Цілі значення лінійно перетворюються у спосіб, за якого найбільш позитивне значення перетворюється на 1.0,  найбільш негативне значення перетворюється на -1.0. Дійсні значення беруться безпосередньо. Цілі і дійсні значення не обрізаються проміжком. Значення за умовчанням для усіх поверхонь являється (0.2, 0.2, 0.2, 1.0).
  • GL_DIFFUSE - params містить чотири цілі або дійсні значення, які вказують RGBA колір розсіювання матеріалу. Цілі значення лінійно перетворюються на дійсні у спосіб, за якого найбільш позитивне значення перетворюється у 1.0, і найбільш негативне значення перетворюється на -1.0. Дійсні значення беруться лінійно. Цілі і дійсні значення не обрізаються проміжком. Значення за умовчанням для компоненту розсіювання матеріалу являється (0.8, 0.8, 0.8, 1.0).
  • GL_SPECULAR - params містить чотири цілих або дійсних значень, які вказують дзеркальний RGBA колір відображення матеріалу. Цілі значення лінійно перетворюються на дійсні у спосіб, за якого найбільш позитивне значення перетворюється у 1.0, і найбільш негативне значення перетворюється на -1.0. Дійсні значення беруться лінійно. Цілі і дійсні значення не обрізаються проміжком. Значення за умовчанням для дзеркального відображення матеріалу для обох сторін примітиву являються (0, 0, 0, 1).
  • GL_EMISSION - params містить чотири цілих або дійсних значення, які вказують RGBA колір випромінювання матеріалу. Цілі значення лінійно перетворюються на дійсні у спосіб, за якого найбільш позитивне значення перетворюється у 1.0, і найбільш негативне значення перетворюється на -1.0. Дійсні значення беруться лінійно. Цілі і дійсні значення не обрізаються проміжком. Значення за умовчанням для усіх сторін геометричних примітивів являється значення (0, 0, 0, 1).
  • GL_SHININESS - params містить одне ціле або дійсне значення яку вказує RGBA показник дзеркальності матеріалу. Цілі і дійсні значення беруться безпосередньо. Приймаються значення з проміжку [0, 128]. Значення за умовчанням для даного показника являється 0.
  • GL_AMBIENT_AND_DIFFUSE - еквівалентно подвійного виклику команди glMaterial з однаковими параметрами. Один раз для GL_AMBIENT, а другий для GL_DIFFUSE.
  • GL_COLOR_INDEXES - параметр params містить три цілих або дійсних значення, які вказують індекси кольору для параметрів освітлення навколишнього середовища, розсіювання матеріалу і відзеркалення. Дані три значення, і GL_SHININESS, являються тільки значеннями матеріалу, які використовуються при  індексному режимі вибору кольору для рівнянь освітлення. Зверніться до документації команди glLightModel для опису освітлення у режимі індексного вибору кольору.

Нотатки

Параметри матеріалу можуть бути оновленими в будь-який час. Зокрема, glMaterial може бути викликаною між командами glBegin і відповідній їй glEnd. Якщо змінюється тільки один параметр матеріалу - кращою для використання являється glColorMaterial ніж glMaterial (перегляньте glColorMaterial). Не зважаючи на присутність компоненту прозорості в усіх типах параметрів освітлення, він використовується тільки у параметрі розсіювання матеріалу (diffuse).

Помилки

GL_INVALID_ENUM генерується, якщо параметри face або pname не містять допустимого значення. GL_INVALID_VALUE генерується якщо значення показника дзеркального відображення міститься поза межами проміжку [0, 128].

Пов'язані параметри

glGetMaterial

Перегляньте також

glColorMaterial, glLight, glLightModel Оригінал: https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glMaterial.xml