По следующей ссылке можно получить документацию по всем официальным расширениям 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). Определим некий набор матриц преобразований и стартовую точку с координатами (х,у). Применяя п преобразований к точке, мы получаем фрактал. Преобразование на каждой итерации выбирается случайным образом. Заметим, что какой бы ни была стартовая точка, с некоторой итерации она начнет блуждать только по изображению фрактала.


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