По следующей ссылке можно получить документацию по всем официальным расширениям OpenGL:
http://oss.sg i .com/projects/ogl-sample/reg istry/index. html.
/*
Вывод версии OpenGL и списка расширений, поддерживаемых драйвером видеокарты.
*/
// массив строк - имен расширений vector <string> ext; string glversion="OpenGL ";
// индексы первой и последней строки uint b=0,e=30;
void example_init()
{
int i=l;
gl.set(1) ;
glListBase(1);
gl.font(); // создаем шрифт
glClearColor(1,1,1,1); // цвет очищения
glColor3f(1,0.5,0); // текущий цвет
// сохраняем версию OpenGL
glversion+=(char*)glGetString(GL_VERSION) ;
// сохранение имен расширений
string temp=(char*)glGetString(GL_EXTENSIONS) ; // разбиение на раздельные строки while(i > 0)
{
// имена разделены пробелами i=temp.find(' ', 0) ;
ext.push_back(temp.substr(0, i) ) ; temp.erase(0,i+1);
)
)
void example_deinit()
(
glDeleteLists(1, 255) ; gl.deinit();
)
void input()// обработка ввода {
// прокручиваем список вверх if(in.vkeys[VK_UP]) if (b>0) (b-; e-;}
// прокручиваем список вниз if(in.vkeys[VK_DOWN]) if(e + l<ext.size ()) fb++; e + +;}
)
void draw() // вывод {
input();
glClear(GL_COLOR_BUFFER_BIT); glLoadldentity(); float tx=-45,ty=90;
// вывод списка
for(uint i=b;i<e&&i<ext.size();i++)
{
glPushMatrix();
// позиционирования строки glTranslatef(tx,ty,0) ; glScalef(5, 6,1) ; ty-=6;
// вывод имени расширения
glCallLists(ext[i].size(),GL_UNSIGNED_BYTE, ext[i].c_str()); glPopMatrix() ;
}
// выводим версию OpenGL glTranslatef(-80,90,0); glScalef(5,6,1);
glCallLists(glversion.size(),GL_UNSIGNED_BYTE, glversion.c_str());
}
Фрактальные алгоритмы
Одна из интересных областей компьютерной графики - это фрактальные алгоритмы. С помощью них в некоторых программах генерируют такие реалистичные трехмерные объекты, как ландшафт, кусты и деревья. Большинство фракталов обладают полным или частичным самоподобием.
Бенуа Мандельброт первым рассмотрел такое понятие, как фрактал и получил на компьютере его изображение, поэтому вкратце опишем пос^иение множества Мандельброта и Жюлиа.
Рассмотрим последовательность Zn=Zn.i2+c, где Z и с принадлежат комплексным числам. Если зафиксировать Zo=0 и изменять с, то получим множество последовательностей, известных как множество Мандельброта. Если же зафиксировать с и изменять Z0, то получим множество Жюлиа. Примем за ось X реальную часть комплексного числа, а за ось Y мнимую. В этой плоскости определим некий прямоугольник, который и отобразим в наше 8-битное изображение. Функция отображения будет возвращать число вычисленных элементов последовательности. На практике каждая последовательность вычисляется, пока очередной Zn находится внутри некоторого круга радиуса R, и ограничивается максимальным числом итераций.
Один из простых способов построения фракталов - это применение системы итерируемых функций (IFS - Iterated Function System). Определим некий набор матриц преобразований и стартовую точку с координатами (х,у). Применяя п преобразований к точке, мы получаем фрактал. Преобразование на каждой итерации выбирается случайным образом. Заметим, что какой бы ни была стартовая точка, с некоторой итерации она начнет блуждать только по изображению фрактала.