glEnable(GL_DEPTH_TEST); glClearColor(1, 1, 1,1) ;

// разрешаем двухмерные текстуры glEnable(GL_TEXTURE_2D);

// установка изображений в качестве текстур IMAGE img;

img.load2dtexture("texl.bmp tex2.bmp",tex,2,0); cam.position(0,0,-4 0);

m.scenel(l); // компиляция тестовой сцены }

void example_deinit()

{

glDeleteLists(l,1); gl.deinit();

>

// обработка ввода void input()

{

cam.input(&in); switch(in.vkey) f

case 'Y': sp[2]+=0.05; break; case 'H': sp[2]-=0.05; break; case 'U': sp[3]+=0.05; break; case 'J': sp[3]-=0.05; break; case 'I': tp[l]+=0.05; break; case 'K': tp[l]-=0.05; break; case 'O': tp[3]+=0.05; break; case 'L': tp[3]-=0.05; break; default : ;

>

in.vkey=0;

>

void draw() // вывод сцены {

input();

// очищение буфера кадра

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadldentity(); cam.transform() ;

// выбираем первую текстуру glBindTexture(GL_TEXTURE_2D,tex[0]) ; glCallList(1); // отображаем тестовую сцену // разрешаем генерацию текстурных координат glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T);

// выбираем вторую текстуру glBindTexture(GL_TEXTURE_2D, tex[1]) ;

// выбираем режим генерации glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR); glTexGeni(GL_T,GL_TEXT URE_GEN_MODE,GL_OBJECT_LINEAR); // устанавливаем коэффициенты glTexGenfv(GL_S,GL_OBJECT_PLANE,sp); glTexGenfv(GL_T,GL_OBJECT_PLANE, tp) ;

// выводим четырехугольник m.planeYZ(40, -1, 0, - 40, -100) ;

// запрещаем генерацию текстурных координат glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T);

}

Освещение, источник света и материал

OpenGL обладает достаточными возможностями для обработки такого сложного процесса, как освещение. Из-за сложности вычисления по умолчанию освещение отключено, так как это может сильно замедлить отображение сложной сцены. Для ускорения программы можно выбрать упрощенную модель освещения, но с более низким качеством результата. Для расчета освещения необходимо знать некоторые свойства источника света и освещаемой модели. Ниже кратко будут рассмотрены предоставляемые OpenGL возможности.

Каждый источник света характеризуется позицией, направлением света, углом распространения света, коэффициентом затухания света. При своих расчетах OpenGL разделяет общий свет на три независимые составляющие.

Свет, источник и направление которого определить невозможно, называется фоновым или заполняющим светом (ambient light). Такой свет, отражаясь ог поверхности, распространяется равномерно во всех направлениях.

Свет, имеющий направление падения, но отражающийся от поверхности во всех направлениях, называется рассеянным светом (diffuse light). В результате поверхность, освещенная этим светом, не изменяет свою яркость от расположения глаза.

Свет, имеющий четкое направление падения и отражения, называется зеркальным (specular light). На поверхности, сильно освещенной этим светом, образуются блики.

Компоненты освещения

Рис. 6. Компоненты освещения Описывая источник, вы указываете цвета этих составляющих. Например, луч красного лазера в лаборатории состоит почти из чистой зеркальной компоненты красного цвета. Однако, дым или пыль рассеивают этот луч по всему помещению. Это рассеивание представляется значением рассеянного света.


⇐ вернуться назад | | далее ⇒