Алгоритм Коэна

advertisement
1
Графическое программирование
Моделирование 2D сцен с
применением OpenGl
1.
Интерфейс OpenGL.
2.
Синтаксис команд OpenGL.
3.
Подключение и работа с библиотеками GL и
GLU.
4.
Визуализация двумерных объектов.
Преподаватель:
Татьяна Олеговна Перемитина,
к.т.н., доцент каф.АОИ ТУСУР
Проверка домашнего задания
 Используя алгоритм Коэна-Сазерленда,
выявить видимые, невидимые и отсекаемые
отрезки АВ, СD, EF, GH, IJ, KL.
 Если известны: А(0000), В(0010), С(0001),
D(1001), E (0110), F(0010), G(0000),
H(0000), I(1000), J(0010), K(1001), L(1010).
 Отобразите расположение отрезков
относительно окна отсечения.
Алгоритм Коэна-Сазерленда
Отрезки
Коды концов
АВ
0000 0010
СD
0001 1001
EF
0110 0010
GH
0000 0000
IJ
1000 0010
KL
1001 1010
Пусть X - код точки-начала отрезка, Y - код
точки-конца отрезка, тогда возможны три
случая:
1.X = Y = 0000. Этот случай означает, что обе
точки лежат внутри прямоугольника (т. е.
отсечение не требуется).
2.X and Y ≠ 0. В этом случае точки лежат по
одну сторону от какой-либо отсекающей линии
(с внешней ее стороны). Следовательно, отрезок
полностью лежит вне окна.
3.Если не выполнены условия 1 или 2, то
необходимо находить точки пересечения с
некоторыми из отсекающих прямых. Для этого
разбивают отрезок найденными точками
пересечения и затем применяют тот же анализ
кодов концов для полученных новых отрезков.
Алгоритм Коэна-Сазерленда
 Случай 1
 G = H=0:
 Отрезок GH
Отрезки
Коды концов
АВ
0000 0010
СD
0001 1001
EF
0110 0010
GH
0000 0000
IJ
1000 0010
KL
1001 1010
Алгоритм Коэна-Сазерленда
 Случай 2
 X and Y≠0:
 Отрезок KL
 Отрезок DC
 Отрезок EF
Алгоритм Коэна-Сазерленда
 Случай 3
 Отсекаемые отрезки: Отрезок AB; Отрезок IJ.
Алгоритм Коэна-Сазерленда
Отрезки
Коды концов
Результаты
логического
умножения
АВ
0000 0010
0000
СD
0001 1001
0001
Целиком невидим
EF
0110 0010
0010
Целиком невидим
GH
0000 0000
0000
Целиком видим
IJ
1000 0010
0000
KL
1001 1010
1000
Примечание
Целиком невидим
Алгоритм Коэна-Сазерленда
OpenGL (Open Graphic Library) –
библиотека графических
функций, интерфейс для
графических прикладных
программ.
Интерфейс OpenGL
GLU
ПИКЛАДНАЯ
GL
ПРОГРАММА
БУФЕР
Win32 API
GLUT
•Graphics Library (GL)
•Graphics Library Utility (GLU)
•Graphics Library Utility Toolkit (GLUT)
КАДРА
Соглашение о наименовании функций
glBegin(<тип>);
// указываем тип примитива
glVertex[2 3][ i f v](...); // первая вершина
……………………………// остальные вершины
glVertex[2 3][ i f v](...); // последняя вершина
glEnd;
В OpenGL левый нижний угол области вывода имеет
координаты [-1; -1], правый верхний [1; 1].
Визуализация двумерных объектов
Значение <тип>
Описание
GL_POINTS
Каждый вызов glVertex задает отдельную точку
GL_LINES
Каждая пара вершин задает отрезок
GL_LINE_STRIP
Рисуется ломанная
GL_LINE_LOOP
Рисуется ломанная, причем ее последняя точка
соединяется с первой
Визуализация двумерных объектов
GL_TRIANGLES
Тройки вершин образуют треугольник
GL_TRIANGLE_STRIP
Связанные треугольники
GL_TRIANGLE_FAN
Связанные треугольники с общей первой
вершиной
GL_QUADS
Каждые четыре
четырехугольники
GL_QUAD_STRIP
Связанные четырехугольники
GL_POLYGON
Один выпуклый многоугольник
вершины
образуют
Визуализация двумерных объектов
Область вывода
После применения матрицы проекций на вход
следующего
преобразования
подаются
усеченные
координаты, для которых значения всех компонент
(xc, yc, zc, wc)T находятся в отрезке [-1,1].
После этого находятся нормализованные координаты
вершин по формуле:
(xn, yn, zn)T=(xc/wc, yc/wc, zc/wc)T.
Область вывода:
glViewPort(x, y, width, height: GLint).
Матрицы OpenGl
glMatrixMode(mode);
Mode:
 Видовая: GL_MODELVIEW,
 Проекций: GL_PROJECTION,
 Tекстуры: GL_TEXTURE
glLoadIdentity = glPushMatrix
glPopMatrix
Преобразования OpenGL
 Масштабирование:
glScale[2 3] [I f d] (α, β ,γ);
α – относительно оси абсцисс,
β – ординат; γ –аппликат.
 Поворот:
glRotate[2 3] [I f d] (α , x, y, z);
Значения x, y, z  0,1
 Сдвиг:
glTranslate[2 3] [I f d] (dx, dy, dz);
Визуализация двумерных объектов
Визуализация двумерных объектов
Визуализация двумерных объектов
Визуализация двумерных объектов
Визуализация двумерных объектов
Quadric-объекты библиотеки GLU
Шаг 1. Создаем указатель на quadric объект с помощью команды gluNewQuadric.
•
•
Шаг 2. Вызываем одну из команд
gluSphere(), gluCylinder(),
gluDisk(), gluPartialDisk().
•Шаг 3. По окончанию использования объекта,
вызвать процедуру gluDeleteQuadric().
Quadric-объекты
Quadric-объекты
gluQuadricDrawStyle(quadObj, style),
определяющая стиль отображения объекта.
GLU_FILL – отображение примитивов со
сплошной заливкой;
GLU_LINE – примитивы отображаются при
помощи линий;
GLU_SILHOUETTE – примитивы
отображаются как силуэт, где линии только на
стыках граней;
GLU_POINT – примитивы отображаются при
помощи точек.
Спасибо за внимание!
Download