Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Chast_II_Osn_progr_trekhmernoy_grafiki.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1.83 Mб
Скачать

2.5 Кривые

С помощью отрезков (многоугольников) можно с любой требуемой точностью аппроксимировать любую гладкую кривую (поверхность). Точки для соединения отрезками (многоугольниками) выбираются путем деления кривой (поверхности) на небольшие сегменты. При достаточной степени разбиения кривая или поверхность будет выглядеть гладкой (рис. 3.4).

Рис. 3.4. Аппроксимация кривой отрезками.

2.6 Задание вершин

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

void glVertex{23}{sifd}[v](TYPEcoords);

В двумерном случае принимается z=0.

Функции glVertex*() надо обязательно вызывать между вызовами glBegin() и glEnd(), обозначающими начало и конец рисования примитива. Ниже приведено несколько примеров:

glVertex2s( 2, 3 ); // Вершина с координатами (2, 3, 0)

glVertex3d( 0.0, 0.0, 3.1415926535898 );

GLdouble dvect[3] = {5.0, 9.0, 1992.0};

glVertex3dv( dvect );

2.7 Геометрические примитивы OpenGl

Вершины надо задавать обязательно применительно к какому-нибудь примитиву. Рисование примитива начинается с вызова функции glBegin(), которой в качестве параметра передается константа, обозначающая тип примитива. Завершается примитив функцией glEnd(). Прототипы этих функций:

void glBegin( Glenum mode );

void glEnd( void );

Между вызовами glBegin() и glEnd() делаются вызовы glVertex*(). Например, для описания многоугольника, показанного на рис. 3.5 слева, надо вызвать следующие функции:

glBegin( GL_POLYGON );

  glVertex2d( 0.0, 0.0 );

  glVertex2d( 0.0, 3.0 );

  glVertex2d( 3.0, 3.0 );

  glVertex2d( 4.0, 1.5 );

  glVertex2d( 3.0, 0.0 );

glEnd();

Рис. 3.5. Примитивы двух типов: многоугольник и множество точек.

Если в качестве типа примитива вместо GL_POLYGON указать GL_POINTS, то будет нарисовано множество из 5-ти точек (рис. 3.5, справа). В табл. 3.1 перечислены все допустимые типы примитивов, которые можно указывать при вызове glBegin().

Таблица 3.1. Имена и назначение геометрических примитивов.

Имя константы

Назначение

GL_POINTS

Отдельные точки

GL_LINES

Пары вершин, являющиеся концами отрезков

GL_POLYGON

Граница простого выпуклого многоугольника

GL_TRIANGLES

Тройки вершин, которые интерпретируются как вершины треугольников

GL_QUADS

Четверки вершин, которые интерпретируются как вершины четырехугольников

GL_LINE_STRIP

Вершины ломаной линии

GL_LINE_LOOP

Вершины замкнутой ломаной линии (то же, что и предыдущий тип, но последняя и первая вершина соединяются автоматически)

GL_TRIANGLE_STRIP

Связная полоса из треугольников (триангулированная полоса)

GL_TRIANGLE_FAN

Веер из треугольников

GL_QUAD_STRIP

Связная полоса из четырехугольников (квадрированная полоса)

На рис. 3.6 показаны примеры примитивов, перечисленных в табл. 3.1. Предполагается, что между glBegin() и glEnd() перечислено n вершин (v0, v1, v2, ..., vn-1). Как следует из рис. 3.6, кроме точек, отрезков и многоугольников, в OpenGL есть еще несколько специальных типов примитивов.

Рис. 3.6. Типы геометрических примитивов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]