Рисование точек, линий и многоугольников
Для задания размеров точки служит процедура glPointSize(GLfloat size), которая устанавливает размер точки в пикселях, по умолчанию он равен единице.
Для задания ширины линии в пикселях служит процедура gflineWidth(GLfloatwidth). Шаблон, которым будет рисоваться линия, можно задать при помощи процедуры glLineStipple(Glint factor, GLushort pattern). Шаблон задается переменной pattern и растягивается в factor раз. Использование шаблонов линии необходимо разрешить при помощи команды glEnable(GL_UNE_STIPPLE). Запретить использование шаблонов линий можно командой glDisable(GL_LINE_ST1PPLE).
Многоугольники рисуются как заполненные области пикселей внутри границы, хотя их можно рисовать либо только как граничную линию, либо просто как набор граничных вершин.
Многоугольник имеет две стороны (лицевую и нелицевую) и может быть отрисован по-разному, в зависимости от того, какая сторона обращена к наблюдателю. По умолчанию обе стороны рисуются одинаково. Для задания того, как именно следует рисовать переднюю и заднюю стороны многоугольника, служит процедура glPolygonMode(GLenum face, GLenum mode). Параметр face может принимать значения GL_FRONT_AND_BACK (обе стороны), GL_FRONT (лицевая сторона) или GL_BACK (нелицевая сторона). Параметр mode может принимать значения GL_POINT, GL_LINE или GL_FILL, обозначая, что многоугольник должен рисоваться как набор граничных точек, граничная ломаная линия или заполненная область, например:
glPolygonMode(GL_FRONT, GL_FILL);
glPolygonMode(GL_BACK, GLJJNE).
По умолчанию вершины многоугольника, которые появляются на экране в направлении против часовой стрелки, называются лицевыми. Это можно изменить при помощи процедуры glFrontFace(GLenum mode). По умолчанию параметр mode равняется GL_CCW, что соответствует направлению обхода против часовой стрелки. Если задать этот параметр равным GL_CW, то лицевыми будут считаться многоугольники с направлением обхода вершин по часовой стрелке.
При помощи процедуры glCullFace(GLenum mode) вывод лицевых или нелицевых граней многоугольников можно запретить. Параметр mode принимает одно из значений GL_FRONT (оставить только лицевые грани), GL_BACK (оставить нелицевые) или GL_FRONT_AND_BACK (оставить все грани). Для отсечения граней необходимо разрешить отсечение при помощи команды glEnable(GL_CULL_FACE).
Шаблон для заполнения грани можно задать при помощи процедуры gIPolygonStipple(const GLubyte * mask), где mask задает массив битов размером 32 на 32.
Для разрешения использования шаблонов при выводе многоугольников служит команда glEnable(GL_POLYGON_STIPPLE).
Свой вектор нормали для каждой вершины можно задать при помощи одной из следующих процедур:
glNormal3{b s i d f}(TYPE nx, TYPE ny, TYPE nz);
glNormal3{b s I d f}v(const TYPE * v).
В версиях с суффиксами b, s или i значения аргументов масштабируются в отрезок [-1, 1].
В качестве примера приведём процедуру, строящую прямоугольный параллелепипед с рёбрами, параллельными координатным осям, по диапазонам изменения х, у и z.
#include <windows.h>
#include <gl\gl.h>
drawBox(GLfloat x1, GLfloat x2, GLfloat y1, GLfloat y2, GLfloat z1, GLfloat
z2)
{
glBegin ( GL_POLYGON );
glNormal3f ( 0.0, 0.0, 1.0 );
glVertex3f ( x1, y1, z2 );
glVertex3f ( x2, y1, z2 );
glVertex3f ( x2, y2, z2 );
glVertex3f ( x1, y2, z2 );
glEnd ();
glBegin ( GL_POLYGON );
glNormal3f ( 0.0, 0.0, -1.0 );
glVertex3f ( x2, y1, z1 );
glVertex3f ( x1, y1, z1 );
glVertex3f ( x1, y2, z1 );
glVertex3f ( x2, y2, z1 );
glEnd ();
glBegin ( GL_POLYGON );
glNormal3f ( -1.0, 0.0, 0.0 );
glVertex3f ( x1, y1, z1 );
glVertex3f ( x1, y1, z2 );
glVertex3f ( x1, y2, z2 );
glVertex3f ( x1, y2, z1 );
glEnd ();
glBegin ( GL_POLYGON );
glNormal3f ( 1.0, 0.0, 0.0 );
glVertex3f ( x2, y1, z2 );
glVertex3f ( x2, y1, z1 );
glVertex3f ( x2, y2, z1 );
glVertex3f ( x2, y2, z2 );
glEnd ();
glBegin ( GL_POLYGON );
glNormal3f ( 0.0, 1.0, 0.0 );
glVertex3f ( x1, y2, z2 );
glVertex3f ( x2, y2, z2 );
glVertex3f ( x2, y2, z1 );
glVertex3f ( x1, y2, z1 );
glEnd ();
glBegin ( GL_POLYGON );
glNormal3f ( 0.0, -1.0, 0.0 );
glVertex3f ( x2, y1, z2 );
glVertex3f ( x1, y1, z2 );
glVertex3f ( x1, y1, z1 );
glVertex3f ( x2, y1, z1 );
glEnd ();
}
- «Национальный исследовательский томский политехнический университет»
- Введение
- Способы представления изображений в эвм
- Растровое представление изображений
- Параметры растровых изображений
- Векторное представление изображений
- Представление изображений с помощью фракталов
- Геометрические фракталы
- Алгебраические фракталы
- Системы итерируемых функций
- Представление цвета в компьютере
- Свет и цвет
- Цветовые модели и пространства
- Цветовая модель rgb
- Субтрактивные цветовые модели
- Модели hsv и hsl
- Системы управления цветом
- Графические файловые форматы
- Растровые алгоритмы
- Алгоритмы растеризации
- Растровое представление отрезка. Алгоритм Брезенхейма
- Растровая развёртка окружности
- Кривые Безье
- Закраска области, заданной цветом границы
- Заполнение многоугольника
- Методы устранения ступенчатости
- Метод увеличения частоты выборки
- Метод, основанный на использовании полутонов
- Методы обработки изображений
- Яркость и контраст
- Масштабирование изображения
- Преобразование поворота
- Цифровые фильтры изображений
- Линейные фильтры
- Сглаживающие фильтры
- Контрастоповышающие фильтры
- Разностные фильтры
- Нелинейные фильтры
- Преобразования растровых изображений
- Векторизация с помощью волнового алгоритма
- Построение скелета изображения
- Оптимизация скелета изображения
- Сегментация изображений
- Методы, основанные на кластеризации
- Алгоритм разрастания регионов
- Компьютерная геометрия
- Двумерные преобразования
- Однородные координаты
- Двумерное вращение вокруг произвольной оси
- Трехмерные преобразования
- 2. Трехмерное изменение масштаба
- 3. Трехмерный сдвиг
- 4. Трехмерное вращение
- Проекции
- Математическое описание плоских геометрических проекций
- Изображение трехмерных объектов
- Видимый объем
- Преобразование видимого объема
- Представление пространственных форм
- Полигональные сетки
- Явное задание многоугольников
- Задание многоугольников с помощью указателей в список вершин
- Явное задание ребер
- Удаление невидимых линий и поверхностей
- Классификация методов удаления невидимых линий и поверхностей
- Алгоритм плавающего горизонта
- Алгоритм Робертса
- Определение нелицевых граней
- Удаление невидимых ребер
- Алгоритм, использующий z–буфер
- Методы трассировки лучей
- Алгоритмы, использующие список приоритетов
- Алгоритм Ньюэла-Ньюэла-Санча для случая многоугольников
- Алгоритм Варнока (Warnock)
- Алгоритм Вейлера-Азертона (Weiler-Atherton)
- Методы закраски
- Диффузное отражение и рассеянный свет
- Зеркальное отражение
- Однотонная закраска полигональной сетки
- Метод Гуро
- Метод Фонга
- Поверхности, пропускающие свет
- Детализация поверхностей
- Детализация цветом
- Детализация фактурой
- Библиотека OpenGl
- Особенности использования OpenGl в Windows
- Основные типы данных
- Рисование геометрических объектов
- Работа с буферами и задание цвета объектов
- Задание графических примитивов
- Рисование точек, линий и многоугольников
- Преобразование объектов в пространстве
- Преобразования в пространстве
- Получение проекций
- Задание моделей закрашивания
- Освещение
- Полупрозрачность. Использование α-канала
- Наложение текстуры
- Аппаратные средства машинной графики
- Устройства ввода
- Сканеры
- Основные характеристики
- Фирмы-производители
- Дигитайзеры
- Принцип действия
- Основные характеристики
- Фирмы-производители
- Цифровые фотокамеры
- Принцип действия
- Фирмы-производители
- Литература
- Оглавление
- Отпечатано в Издательстве тпу в полном соответствии с качеством предоставленного оригинал-макета