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