glLight - встановлює параметри джерела світла.
C-специфікація
void glLightf (GLenum light, GLenum pname, GLfloat param) ; void glLighti (GLenum light, GLenum pname, GLint param) ; void glLightfv (GLenum light, GLenum pname, const GLfloat * params) ; void glLightiv (GLenum light, GLenum pname, const GLint * params) ;
Параметри
light вказує джерело світла. Кількість джерел залежить від реалізації, але повинно підтримуватися хоча-б вісім джерел світла. Вони ідентифікуються за символічними іменами від GL_LIGHTi, де i міститься від 0 до значення параметру GL_MAX_LIGHTS - 1.
pname вказує одне значення параметру для джерела світла light. Приймаються константи GL_SPOT_EXPONENT, GL_SPOT_CUTOFF, GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION, GL_QUADRATIC_ATTENUATION, GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_POSITION, GL_SPOT_CUTOFF і GL_SPOT_DIRECTION.
param вказує значення у яке параметр pname для джерела світла light буде встановлено.
params передає вказівник на одне або декілька значень, у які параметр pname буде встановлено для джерела світла light.
Опис
Функція glLight встановлює значення для індивідуальних параметрів джерела світла. Параметр light іменує джерело і являється символічною константою у формі GL_LIGHTi, де i міститься у проміжку від 0 до значення GL_MAX_LIGHTS - 1. Параметр pname вказує один з десяти параметрів джерела світла, знову за іменованою константоює Параметр params являється або одним значенням, або вказівникос на масив, який містить нові значення.
Для увімкнення і вимкнення обчислень освітлення, викличте функцію glEnable або glDisable з аргументом GL_LIGHTING. За умовчанням освітлення вимкнено. Коли воно увімкнене, джерела світла, які увімкнені вносять свої зміни у обчислення освітлення. Джерело світла i вмикається або вимикається за допомогою функцій glEnable і glDisable з аргументом GL_LIGHTi.
Десять параметрів освітлення являються наступними:
- GL_AMBIENT. Параметр params містить чотири цілі або дійсні значення, які вказують RGBA-інтенсивність випромінювання світла навколишнього середовища. Цілі числа лінійно перетворюються у спосіб при якому найбільше позитивне репрезентативне значення перетворюється на 1.0, і найбільш негативне значення перетворюється на -1.0. Дійсні значення залишаються без змін. Жодне з даних типів (ціле і дійсне число) обрізається. За умовчанням, випромінювання навколишнього середовища містить значення (0, 0, 0, 1).
- GL_DIFFUSE. Параметр params містить чотири цілих або дійсних значення, які вказують розсіюючу RGBA-інтенсивність освітлення для даного джерела світла. Цілі числа лінійно перетворюються у спосіб при якому найбільше позитивне репрезентативне значення перетворюється на 1.0, і найбільш негативне значення перетворюється на -1.0. Дійсні значення залишаються без змін. Жодне з даних типів (ціле і дійсне число) обрізається. За умовчанням, інтенсивність випромінювання розсіювання для джерела світла GL_LIGHT0 містить значення (1, 1, 1, 1); для інших джерел світла, значення за умовчанням являється (0, 0, 0, 1).
- GL_SPECULAR. Параметр params містить чотири цілих або дійсних числа, які вказують RGBA-інтенсивність відзеркалення для даного джерела світла. Цілі числа лінійно перетворюються у спосіб при якому найбільше позитивне репрезентативне значення перетворюється на 1.0, і найбільш негативне значення перетворюється на -1.0. Дійсні значення залишаються без змін. Жодне з даних типів (ціле і дійсне число) обрізається. За умовчанням, інтенсивність відзеркалення для GL_LIGHT0 являється (1, 1, 1, 1); для інших джерел світла, значення за умовчанням являється (0, 0, 0, 1).
- GL_POSITION. Параметр params містить чотири цілих або дійсних числа, які вказують розміщення джерела світла у гомогенних координатах об'єкта в просторі. Обидва типи для цілих і дійсних значень використовуються без змін. Позиція перетворюється матрицею огляду моделі, коли викликається функція glLight (так, ніби вона була точкою), і вона зберігається у координатах огляду. Якщо компонента координати w містить значення 0, джерело світла трактується у якості джерела з певниним напрямком. Обчислення освітлення для розсіювання і відзеркалення беруть до уваги напрямок освітлення, а не його фактичну позицію, при чому послаблення вимкнене. В іншому випадку, обчислення освітлення для розсіювання і відзеркалення спираються на фактичне розміщення світла у координатах огляду, і ослаблення увімкнене. Координата розміщення освітлення за умовчанням розміщується у точці (0, 0, 1, 0); тобто, джерело світла за умовчанням являється спрямованим, паралельним до і в напрямку осі -z.
- GL_SPOT_DIRECTION. Параметр params містить три цілих або дійсних значення, які вказують напрямок освітлення у гомогенних координатах об'єкту у просторі. Обидва типи для дійсних і цілих чисел використовуються без змін. Напрямок точки перетворюється за допомогою верхньої 3x3 матриці огляду під час виклику функції glLight, і вона зберігається у координатах огляду. Даний параметр являється вагомим тільки коли GL_SPOT_CUTOFF містить значення відмінне від 180, яке являється значенням за умовчанням. Напрямок за умовчанням являється (0; 0; -1).
- GL_SPOT_EXPONENT. Параметр params містить одне ціле або дійсне число, яке вказує інтенсивність розподілення даного джерела світла. Цілі і дійсні значення використовуються без змін. Приймаються значення з проміжку 0-128. Інтенсивність джерела світла послаблюється на косинус кута між напрямком джерела світла і напрямком від світла до вертекса, який освітлюється, піднятої до ступеня експоненти точки (даний параметр). Тобто, вищі експоненти точки результують у більш сфокусованому джерелі світла, незважаючи на кут відрізання (переглянье GL_SPOT_CUTOFF). Значення за умованням являється 0, яке генерує рівномірне освітлення.
- GL_SPOT_CUTOFF. Параметр params являється одним цілим або дійсним числом, яке вказує максимальний кут розсіювання джерела світла. Цілі і дійсні значення використовуються без мізн. Приймаються значення з проміжку 0-90 і додатково одне спеціальне значення - 180. Якщо кут між напрямком освітлення і напрямком від джерела світла до освітлюваного вертекса більший ніж кут відсікання для даного джерела світла, дане світло не враховується. В іншому випадку, його інтенсивність контролюється точковою експонентою і множниками послаблення. Значення за умовчанням являється 180, яке спричиняє рівномірне розсіювання світла.
- GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION, GL_QUADRATIC_ATTENUATION. Параметр params являє собою ціле або дійсне значення, яке вказує одне з трьох множників послаблення для даного джерела світла. Дійсні і цілі значення використовуються без змін. Приймаються тільки позитивні значення. Якщо світло являється скоріш позиційним, ніж напрямним, його інтенсивність послаблюється оберненням до суми постійного множника, лійнійного множника помноженого на відстань між джерелом світла і освітлюваним вертексом, і квадратичним множником помпоженим на квадрат то ї ж відстані. За замовчуванням дані множники мають значення (1, 0, 0), що спричиняє жодне послаблення.
Нотатки
Завжди GL_LIGHTi = GL_LIGHT0 + i.
Помилки
GL_INVALID_ENUM генерується якщо параметри light або pname містять недопустиме значення.
GL_INVALID_VALUE генерується якщо значення вказаної точкової експоненти лежить за межами проміжку 0-128, або якщо вказаний кут відрізання містить за проміжком 0-90 (за вийнятком спеціального значення 180), або якщо вказаний негативний множник послаблення.
GL_INVALID_OPERATION генерується якщо функція glLight виконується між відповідними викликами функцій glBegin і glEnd.
Пов'язані параметри
glGetLight
glIsEnabled з аргументом GL_LIGHTING.
Перегляньте також
glColorMaterial, glLightModel, glMaterial
Оригінал
https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glLight.xml