ЛЕКЦИЯ 5. Цвет и освещение
Цветовая модель RGB Свет представляет собой электромагнитные волны видимого диапазона. Воспринимаемый человеком свет фокусируется на сетчатке глаза, в которой есть рецепторы двух типов: колбочки и палочки. Цвет воспринимается только колбочками, причем есть три типа колбочек, преимущественно чувствительных к разным длинам волн: красному свету, зеленому и синему. Сама по себе электромагнитная волна определенной длины никакого цвета не имеет. Ощущение цвета возникает в результате психофизиологических преобразований в глазу и мозге человека. На мониторе компьютера видимые цвета формируются путем смешивания трех основных цветов – красного (Red), зеленого (Green) и синего (Blue). В памяти компьютера значение цвета хранится в виде трех чисел – компонент R, G и B. К ним иногда добавляется четвертая компонента A (прозрачность). В OpenGL текущий цвет задается функциями glColor...(). В OpenGL двумерное изображение для вывода на экран хранится в виде массива значений цветов, соответствующих каждому пикселу изображения. Этот массив называется цветовым буфером. Значения компонент R, G и B лежат в диапазоне от 0.0 (минимальная интенсивность) до 1.0 (максимальная интенсивность). Цветовое пространство модели RGB, внутри которого располагаются все возможные цвета, удобно представлять в виде куба (рис. 5.1). По трем координатным осям откладываются интенсивности красного, синего и зеленого цвета. Рис. 5.1. Цветовое пространство RGB.
Если в OpenGL включено освещение, то для вычисления цвета пиксела в цветовом буфере производится ряд вычислений, в которых участвует цвет примитива. Получившийся цвет не обязательно совпадает с цветом примитива, например, красный мяч в ярком синем свете будет выглядеть иначе, чем при белом свете.
Задание способа закраски При рисовании примитивов можно задавать цвет в его вершинах. Цвет внутренних точек отрезка или многоугольника вычисляется в соответствии с установленным способом закраски. При плоской закраске отрезок или залитый многоугольник рисуются одним цветом, а при плавной закраске – различными цветами. Способ закраски задается с помощью функции: void glShadeModel(GLenum mode); где mode может быть GL_SMOOTH (плавная закраска, значение по умолчанию) или GL_FLAT (плоская закраска). При плоской закраске примитив рисуется цветом первой вершины. При плавной закраске цвет каждой вершины рассматривается независимо и цвет промежуточных точек рассчитывается интерполяцией в цветовом пространстве (см. программу 2.1).
#include <windows.h> #include <GL/gl.h> #include <GL/glu.h> #include <GL/glaux.h>
void triangle() { glBegin(GL_TRIANGLES); glColor3f(1.0, 0.0, 0.0); glVertex2f(5.0, 5.0); glColor3f(0.0, 1.0, 0.0); glVertex2f(25.0, 5.0); glColor3f(0.0, 0.0, 1.0); glVertex2f(5.0, 25.0); glEnd(); }
void CALLBACK display() { glClear(GL_COLOR_BUFFER_BIT); triangle(); glFlush(); }
void CALLBACK resize(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) gluOrtho2D(0.0, 30.0, 0.0, 30.0*(float)h/(float)w); else gluOrtho2D(0.0, 30.0*(float)w/(float)h, 0.0, 30.0); glMatrixMode(GL_MODELVIEW); }
void main() { auxInitDisplayMode(AUX_SINGLE | AUX_RGBA); auxInitPosition(0, 0, 400, 400); auxInitWindow ("Лекция 5, программа 2.1"); glShadeModel(GL_SMOOTH); auxReshapeFunc(resize); auxMainLoop(display); } Программа 2.1. Рисование треугольника с плавной закраской.
Освещение При вычислении цвета пикселей в цветовом буфере необходимо учитывать действующие источники света и отражающие свойства материалов, из которых "сделаны" объекты сцены. Например, у моря разный цвет в ясный солнечный день и в пасмурный облачный день. Наличие солнечного света или облаков определяет, каким вы увидите море: ярко-бирюзовым или темно-серо-зеленым. Освещение очень важно, и без него большинство объектов не будут выглядеть объемными (рис. 5.2).
Рис. 5.2. Освещенная и неосвещенная сфера. Неосвещенная сфера на рис. 5.2 не отличается от плоского диска. Этот пример показывает, что при построении трехмерной сцены крайне важно учитывать взаимодействие между источниками света и объектами сцены. Для создания реалистичных изображений программист в OpenGL может изменять ряд свойств источников света и материалов объектов.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|