Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки? Спасибо! |
Свойства источника света
Зеркальная составляющая освещения источника света
Интенсивность и цвет зеркального отражения от источника света определяет значение параметра pname команды Light:
C#: LightParameter.Specular Object Pascal: GL_SPECULAR
По умолчанию значение зеркального отражения от "нулевого" источника света равно (1, 1, 1, 1), для других источников света она равна (0, 0, 0, 1).
Положение источника света в пространстве
Для определения положения источника света в пространстве используется значение для параметра pname команды Light:
C#: LightParameter.Position Object Pascal: GL_POSITION
В качестве значения параметра param команды Light в библиотеке OpenTK (C#) передается массив из четырех значений, в Object Pascal - указатель на массив из четырёх значений.
Значения массива определяют нормализованные координаты источника света в пространстве. Если положение источника света необходимо задать в декартовых координатах (что чаще всего используется), то четвертый параметр массива должен быть равен 1, а первые три параметра должны определять декартовые координаты x, y, z.
Эта позиция преобразуется видовой матрицей и сохраняется в видовых координатах. Если компонент положения w (последний элемент массива) равен нулю, то источник света расположен в бесконечности, освещение от него направлено в начало координат, ослабление освещения от расстояния в этом случае не происходит.
По умолчанию нулевой источник освещения имеет координаты (0, 0, 1 ,0), и является направленным вдоль отрицательного направления оси OZ.
Направление источника света
Для определения направления источника света в однородных мировых координатах для параметра pname команды Light используется значение:
C#: LightParameter.SpotDirection Object Pascal: GL_SPOT_DIRECTION
Параметр params должен содержать указатель на четыре значения, определяющих направление источника света в однородных мировых координатах. По умолчанию направление источника света задается значениями (0, 0, 1, 1). Отработка этого параметра имеет смысл, если угол освещения источником света имеет значение отличное от 180° (параметр LightParameter.SpotCutoff на C# и GL_SPOT_CUTOFF на Object Pascal).
Сфокусированность источника света
Для определения сфокусированности источника света используется значение для параметра pname команды Light:
C#: LightParameter.SpotExponent Object Pascal: GL_SPOT_EXPONENT
Параметр param должен содержать целое или вещественное значение из диапазона [0, 128]. Максимальное значение соответствует максимальной сфокусированности источника света. Значение 0 соответствует рассеянному освещению, которое используется как значение по умолчанию для всех источников света.
Угол освещения источником света
Mаксимальный угол разброса излучения света определяется командой Light с помощью значения параметра pname:
C#: LightParameter.SpotCutoff Object Pascal: GL_SPOT_CUTOFF
Параметр param должен содержать значение из диапазона [0, 90] или 180, которое задает максимальный угол разброса излучения света. Чем больше это значение, тем больше область освещения. По умолчанию данный параметр имеет значение 180, что соответствует рассеянному освещению.
Зависимость интенсивности освещения от расстояния
Для определения ослабления источника света с увеличением расстояния до освещаемого примитива так же используется команда Light.
Как уже описывалось выше, определение зависимости интенсивности освещения от расстояния в OpenGL выполняется по формуле:
![S=\frac{1}{(k_0+k_1\times l+k_2\times l^2)}](/sites/default/files/tex_cache/1eefe9554ab0afb5190717345b427882.png)
Для изменения коэффициентов используются значения параметра pname, перечисленные в
таблица
7.1.
Константа | Значение параметра pname команды Light | |
---|---|---|
Библиотека OpenTK, C# | Object Pascal | |
![]() |
LightParameter.ConstantAttenuation | GL_CONSTANT_ATTENUATION |
![]() |
LightParameter.LinearAttenuation | GL_LINEAR_ATTENUATION |
![]() |
LightParameter.QuadraticAttenuation | GL_QUADRATIC_ATTENUATION |
Краткие итоги
Все источники света библиотеки OpenGL можно разделить на две группы: точечные и бесконечно удалённые. Точечные источники света имеют конкретные координаты. У бесконечно удаленных источников света четвертая координата равна нулю. "Нулевой" источник света относится к бесконечно удалённым источникам света, так как его координаты (0,0,1,0). Бесконечно удаленные источники света всегда направлены в начало координат. Для всех источников света могут быть определены рассеянная, диффузная и зеркальная составляющие освещения.