}
void example_deinit()
{
gl.deinit();
}
// обработка ввода void input ()
{
switch(in.vkey)
{
case VK_ADD: // следующий режим mode++; mode%=3; break;
case VK_SUBTRACT: // предыдущий режим mode--; mode=(mode<0)?2:mode; break;
// увеличиваем размер точки case 'Q': pointsize+=0.2; break;
// уменьшаем размер точки case 'A': pointsize-=0.2; break;
// увеличиваем ширину линий case ' W' : linewidth+=0.2; break;
// уменьшаем ширину линий case 'S': linewidth-=0.2; break;
// изменяем режим сглаживания точек и линий case VK_F1:
smooth=!smooth;
if(smooth) // разрешаем сглаживание {
glEnable(GL_POINT_SMOOTH); glEnable(GL_LIN E_SMOOT H); glEnable(GL_POLYGON_SMOOTH);
}
else // запрещаем сглаживание {
glDisable(GL_POINT_SMOOTH); glDisable(GL_LINE_SMOOTH); glDisable(GL_POLYGON_SMOOTH);
}
break; default:;
}
// корректируем значения переменных pointsize=(pointsize<l)?l:pointsize; linewidth=(linewidth<l)?1:1inewidth; glPointSize(pointsize); // изменяем размер точки glLineWidth(linewidth); // изменяем ширину линий in.vkey=-l;
}
void draw() // вывод сцены
{
input();
// очищение буфера цвета glClear(GL_COLOR_BUFFER_BIT);
// вывод вершин glBegin(begin_mode[mode]) ; for(int i=0;i<8;i++) glVertex2fv(points[i]) ; glEnd();
}
Геометрические модели
Помимо примитивов низшего уровня, рассмотренных ранее, OpenGL обеспечивает вывод более сложных.
Для создания кривых линий и поверхностей можно воспользоваться механизмом вычислителей, формирующих сплайны Безье или NURBS (неравномерных рациональных В-сплайнов). Для задания сплайнов необходимо указать контрольные точки, формирующие форму. Так как на форму сплайна Безье влияют все контрольные точки, то при большом их количестве сплайн может потерять свою гладкость. NURBS разбивается на сегменты, и форму каждого определяют четыре ближайшие контрольные точки. Поэтому при любом числе точек NURBS остается гладким. Помимо контрольных точек NURBS характеризуется дополнительными значениями - узлами, определяющих степень влияния контрольных точек на форму сплайна.
Механизм вычислителей является достаточно мощным инструментом, позволяющим сформировать поверхность любой сложности с автоматическим вычислением текстурных координат и нормалей.
Список функция для отображения сплайнов.
glEvalCoord - вычисляет указанную точку кривой или поверхности.
glEvalMesh - вычисляет сетку.
glEvalPoint - вычисляет указанную точку сетки.
gIMap - устанавливает вычислитель.
gIMapGrid - задает равномерную сетку.
gluNewNurbsRenderer- создание NURBS объекта.
gluNurbsCurve - данные кривой NURBS.
gluBeginCurve- создание кривой NURBS.
gluNurbsSurface - данные поверхности NURBS.
gluBeginSurface - создание поверхности NURBS.
gluDeleteNurbsRenderer- уничтожение NURBS объекта.
gluPwICurve - кривая для NURBS поверхности.
В OpenGL нет механизма составления сложных многоугольников из частей, а лишь интерфейс для этого механизма. Другими словами, программист сам должен позаботиться о функциях сборки. В качестве функций сборки можно указать стандартные функции OpenGL.
Функции для отображения сложных многоугольников: gluBeginPolygon - данные многоугольника; gluNewTess - создание мозаичного объекта; gluTessBeginContour- определение контура; gluTessCallback - функция сборки мозаичного объекта; gluTessNormal - установление нормали мозаичного объекта; gluTessProperty - установление свойств мозаичного объекта; gluTessVertex - вершина мозаичного объекта.