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

ЛЕКЦИЯ 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- 2021 megalektsii.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.