Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

ЛЕКЦИЯ 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...