}

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

{

switch(in.vkey)

{

case VK_ADD: // следующий режим

mode++; mode%=10; break;

case VK_SUBTRACT: // предыдущий режим mode--; mode=(mode<0)?9:mode; break;

case VK_F1: // изменяем способ отображения type=!type; break;

default:;

}

in.vkey=-l;

}

void example_deinit()

{

gl.deinit() ;

}

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

{

input();

// очищение буфера цвета glClear(GL_COLOR_BUFFER_BIT);

if(type) // отображение с использованием массивов {

// сохраняем атрибуты массивов

glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS) ;

// инициализируем массив вершин glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2,GL_FLOAT,sizeof(float)*2, points) // инициализация массива цветов glEnableClientState(GL_COLOR_ARRAY); glColorPointer(3,GL_FLOAT,sizeof(float)*3,color) gIDrawArrays(begin_mode[mode],0,8); // вывод glPopClientAttrib(); // восстановление атрибутов }

else // отображение с использование glBegin

{

glBegin(begin_mode[mode]); for(int i=0;i<8;i++)

{

glColor3fv(color[i]); // текущий цвет

glVertex2fv(points[i]); // вывод вершины

}

glEnd();

}

}

Атрибуты примитивов

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

Точки - размер и сглаживание.

Линии - ширина, сглаживание, образец трафарета, задающий пункгирность линии.

Многоугольники - сглаживание, способ закраски, образец трафарета, задающий штриховку. На маломощных системах штриховку можно использовать для имитации прозрачности многоугольника. Например, для многоугольника прозрачного на 20% нужно подготовить образец с 20% битов, установленных в 0. Многоугольник характеризуется двумя гранями: лицевой и задней. По умолчанию грань, вершины которой следуют против часовой стрелки, когда на нее смотришь, является лицевой.

Демонстрация атрибутов точек, линий и полигонов. Клавиши <2, А изменяют размер точек.

Клавиши изменяют ширину линий.

Клавиша F1 изменяет режим сглаживания точек, линий и полигонов. Результат сглаживания может изменяться от используемой видеокарты.

*/

float points[8][2]= // массив точек {{-50,50},{0,70},{40,40},{30,0},

{50,-50}, {0,-70}, {-40,-40}, {-30.-0} };

// массив режимов построения

int begin_mode[3] = {GL_POINTS,GL_LINES,GL_POLYGON} ;

int mode=0; // текущий режим

int smooth=0; // сглаживание точек и линий

// размер точек, ширина линий

float pointsize,linewidth;

// образец штриховки char

pattern[128]={128,0,0,1,64,0,0,2,32,0,0,4,16,0,0,8} void example_init ()

{

gl.set(l); // настройка OpenGL // цвет очищения буфера цвета glClearColor(1, 1,1, 1);

glColor3f(0,0,1); // текущий цвет вершины // устанавливаем образец штриховки полигонов glEnable(GL_POLYGON_STIPPLE) ; copy(pattern,pattern+1б, pattern + 1б) ; reverse(pattern+16,pattern+32) ; copy(pattern,pattern+32*3, pattern+32); glPolygonStipple(pattern) ;


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