}

Туман

OpenGL поддерживает наложение равномерно распределенного в пространстве тумана. Это можно использовать также для иллюзии задымления или мутности, если камера находится в жидкой среде. Все свойства тумана управляются лишь одной функцией: gIFog. По умолчанию обработка тумана отключена.

Для создания более сложных моделей тумана можно воспользоваться функцией gIFogCoord, добавленной в последней версии OpenGL, или расширением EXT_fog_coord. После выбора свойства тумана GL_FOG_COORDINATE OpenGL будет использовать текущую координату тумана для каждой вершины, а не ее расстояние до наблюдателя.

/*

Демонстрация тумана.

Для активации управления камерой нажмите ESC.

*/

GLobj cam; // камера // цвет тумана

float fogcolor[4]={0.5,0.5,0.5,0};

int fogtype=GL_LINEAR; // тип тумана

float fogend=200; // дальняя дистанция тумана

void example_init()

{

gl.set (5);

cam.position(0,0,-4 0); glEnable(GL_DEPTH_TEST);

// разрешаем туман glEnable(GL FOG);

// устанавливаем ближнюю дистанцию тумана glFogf(GL_FOG_START, 0) ;

// компилируем тестовую сцену Models m; m.scene1(1);

}

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

{

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

{

// изменение цвета тумана case ’Y': fogcolor[0]+=0.1; break; case 'H': fogcolor[0]-=0.1; break; case 'U': fogcolor[1]+=0.1; break; case * J': fogcolor[1]-=0.1; break; case 'I': fogcolor[2]+=0.1; break; case 'K': fogcolor[2]-=0.1; break; case 'O': fogcolor[3]+=0.1; break; case 'L': fogcolor[3]-=0.1; break;

// выбор типа тумана case VK_F1: fogtype=GL_LINEAR; break; case VK_F2: fogtype=GL_EXP; break; case VK_F3: fogtype=GL_EXP2; break; case VK_ADD: fogend+=l; break; case VK_SUBTRACT: fogend-=l; break; default:;

}

// корректируем значения переменных minmax(fogend,1,300); minmax(fogcolor[0],0,1); minmax(fogcolor[1],0,1);

minmax(fogcolor[2] , 0, 1) ; minmax(fogcolor[3] , 0, 1) ; in.vkey=0;

}

void example_deinit()

{

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

}

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

glLoadldentity() ;

// используем цвет тумана как цвет // очищения буфера цвета glClearColor(fogcolor[0] , fogcolor[1] , fogcolor[2],fogcolor[3]);

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

glClear(GL_COLOR_BOFFER_BIT|GL_DEPTH_BOFFER_BIT); input();

cam.trans form() ;

// устанавливаем цвет тумана glFogfv(GL_FOG_COLOR, fogcolor) ;

// выбираем тип тумана glFogi(GL_FOG_MODE,fogtype) ;

// устанавливаем дальнюю дистанцию тумана glFogf(GL_FOG_END,fogend) ; glCallList(1) ;

}

Вывод текста

Редкая программа обходится без вывода текстовой информации. Хотя ОрепС! не имеет специальных функций для этого, имеющихся средств вполне достаточно. Одним из способов отображения текста является представление символов в виде растровых изображений. Особенно для этого удобны битовые изображения, так как после вызова функции дШтар текущая растровая позиция автоматически сдвигается на указанную ширину. В некоторых случаях можно воспользоваться текстурами, содержащими нужный текст.

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


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