Основы компьютерной графики для программистов 75
____________________________________________________________________________________________________________________
http://www.ksu.ru/persons/9134.ru.html
Затем устанавливаем требуемую функцию смешения, которая дает необходимый
эффект:
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
Функция glBlendFunc принимает два параметра, первый из которых определяет
функцию, применяемую к цвету-источнику, а второй функцию применяемую к цвету
который накладывается поверх текущего. В документации по OpenGL указывается, что
наилучший эффект полупрозрачности достигается сочетанием параметров, которые
приведены в данном примере. Эффект наиболее хорошо выглядит если выводить
многоугольники в порядке от наиболее удаленного
к наименее удаленному. Функция
glBlendFunc может принимать ряд других значений своих параметров, их подробный
список можно найти в документации.
Отключается режим смешения цветов командой:
glEnable(GL_BLEND).
Модель освещенности с использованием источника света и
цвета вершины
В этой модели освещенности рассмотрим свойства источников света в OpenGL.
Система OpenGL версии 1 поддерживает всего 8 или менее одновременно
действующих источников света. В общем случае для выяснения максимально
разрешенного количества источников света используем функцию
glGetIntegerv(GL_MAX_LIGHTS, @num), где num – целочисленная переменная, в
которую запишется результат - количество источников света.
Источники света задаются именованными константами вида
GL_LIGHTх,где вместо х
подставляется номер источника, начиная с нулевого. Например, включение первого
источника минимально достигается вызовом двух команд:
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
Источник света в OpenGL состоит из нескольких цветовых составляющих: рассеянный
свет – Ambient, диффузный – Diffuse, зеркальный – Specular. Хотя кажется что это
противоречит здравому смыслу, но в OpenGL вполне можно настроить источник света
так, например, чтобы он “светил” красной рассеянной составляющей, зеленой
диффузной составляющей и синей зеркальной. В результате можно получить очень
интересные визуальные эффекты. Рассмотрим фрагмент
программы настройки
компонент источника света с помощью векторной версии функции
glLight:
var
//
параметры источника света
ambient: array[1..4]of GLfloat = (0.7, 0.9, 0.9, 1.0);
diffuse: array[1..4]of GLfloat = (1.0, 1.0, 1.0, 1.0);
specular: array[1..4]of GLfloat = ( 1.0, 1.0, 1.0, 1.0 );
begin
...
glLightfv(GL_LIGHT0, GL_AMBIENT, @ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, @diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, @Specular);