(системы координат)
Вход - выход
Конвейер систем координат
Модельно-видовые преобразования: сдвиг
Модельно-видовые преобразования: сдвиг
Модельно-видовые преобразования: масштабирование
Модельно-видовые преобразования: масштабирование
Модельно-видовые преобразования: поворот
Модельно-видовые преобразования: поворот
Модельно-видовые преобразования: поворот
Модельно-видовые преобразования: поворот
Модельно-видовые преобразования: поворот
Модельно-видовые преобразования: изменение положения камеры
Модельно-видовые преобразования: изменение положения камеры
Преобразования проекции: куб видимости
Преобразования проекции: куб видимости
Преобразования проекции: ортографическая (параллельная) проекция
Преобразования проекции: ортографическая (параллельная) проекция
Преобразования проекции: перспективная (центральная) проекция
Преобразования проекции: перспективная (центральная) проекция
Преобразования проекции: задание центра системы координат
Дополнительные возможности отсечения
Преобразование координат: 1. Мировые координаты
Преобразование координат: 2. Видовые координаты
Преобразование координат : 3. Нормализованные координаты
Преобразование координат : 4. Оконные координаты
Преобразование координат : конвейер
Матричные операции в OpenGL
502.92K

Интерактивная компьютерная графика. Системы координат

1. (системы координат)

Часть 5-2
(системы координат)

2. Вход - выход

Система
объектов
Экранное окно
Мировое окно
Картинная плоскость
Экран
Дисплей
Монитор
2 (28)
1 из портов
просмотра
5.2.1 Среда окружения

3. Конвейер систем координат

Мировые координаты 3D
Модельно-видовые
преобразования
Видовые координаты 4D
Проецирование
Отсечение
Нормализация
Нормализованние координаты 3D
Преобразование
в порт просмотра
Оконные координаты 2D
3 (28)
5.2.2 Конвейер систем координат

4. Модельно-видовые преобразования: сдвиг

Перемещение (сдвиг, перенос) на вектор (dx, dy, dz)T
x` = x + dx
y` = y + dy
z` = z + dz
glTranslatef (dx, dy, dz)
4 (28)
1
0
M trans
0
0
5.2.3 Модельно-видовые преобразования [1/11]
0 0 dx
1 0 dy
0 1 dz
0 0 1

5. Модельно-видовые преобразования: сдвиг

glTranslatef ( 100, 100, 10 )
5 (28)
5.2.3 Модельно-видовые преобразования [2/11]

6. Модельно-видовые преобразования: масштабирование

Масштабирование (сжатие и растяжение)
вдоль осей в (sx, sy, sz) раз
x` = x * sx
y` = y * sy
z` = z * sz
Примечание: если один из параметров равен 0,
тогда преобразование не будет афинным
glScalef (sx, sy, sz)
6 (28)
sx 0
0 sy
M scale
0 0
0 0
5.2.3 Модельно-видовые преобразования [3/11]
0
0 0
sz 0
0 1
0

7. Модельно-видовые преобразования: масштабирование

glScalef ( 1.5, 0.5, 1 )
7 (28)
5.2.3 Модельно-видовые преобразования [4/11]

8. Модельно-видовые преобразования: поворот

Поворот на угол angle против часовой стрелки
относительно начала координат
вдоль вектора (rx, ry, rz)
glRotatef (angle, rx, ry, rz)
gl Rotatef (angle, 1, 0, 0) gl Rotatef (angle, 0, 1, 0) gl Rotatef (angle, 0, 0, 1)
0 s 0
c s
s c
1 0 0
M OX
M OZ
0 0
0 c 0
0 0 1
0 0
c cos( angle )
M rotate M OZ * M OY * M OX s sin( angle)
1
0
0
0
8 (28)
0
c
0
c s 0
M OY
s
s c 0
0 0 1
0
0
0
5.2.3 Модельно-видовые преобразования [5/11]
0 0
0 0
1 0
0 1

9. Модельно-видовые преобразования: поворот

glRotatef ( 15, 0,0,1 )
9 (28)
5.2.3 Модельно-видовые преобразования [6/11]

10. Модельно-видовые преобразования: поворот

glRotatef ( 15, 0,0,1 )
10 (28)
5.2.3 Модельно-видовые преобразования [7/11]

11. Модельно-видовые преобразования: поворот

glRotatef ( 15, 0,0,1 )
11 (28)
5.2.3 Модельно-видовые преобразования [8/11]

12. Модельно-видовые преобразования: поворот

glPushMatrix();
glRotatef ( 15, 0, 0, 1)
glRotatef ( 15, 0, 0, 1)
glColor3ub ( 255, 0, 0 );
glBegin ( GL_QUADS );
glVertex2f ( 100, 100 );
glVertex2f ( 100, 300 );
glVertex2f ( 300, 300 );
glVertex2f ( 300, 100 );
glColor3ub ( 255, 0, 0 );
glBegin ( GL_QUADS );
glVertex2f ( 100, 100 );
glVertex2f ( 100, 300 );
glVertex2f ( 300, 300 );
glVertex2f ( 300, 100 );
glEnd ();
glPopMatrix();
glColor3ub ( 0, 255, 0 );
glVertex2f ( 200, 200 );
glVertex2f ( 200, 400 );
glVertex2f ( 400, 400 );
glVertex2f ( 400, 200 );
glEnd ();
12 (28)
glColor3ub ( 0, 255, 0 );
glBegin ( GL_QUADS );
glVertex2f ( 200, 200 );
glVertex2f ( 200, 400 );
glVertex2f ( 400, 400 );
glVertex2f ( 400, 200 );
glEnd ();
5.2.3 Модельно-видовые преобразования [9/11]

13. Модельно-видовые преобразования: изменение положения камеры

gluLookAt (eyeX, eyeY, eyeZ,
atX, atY, atZ,
upX, upY, upZ)
Y
(atX,atY,atZ)
точка наблюдения
X
(upX,upY,upZ)
направление вверх
Z
(eyeX, eyeY, eyeZ)
точка наблюдателя
13 (28)
5.2.3 Модельно-видовые преобразования [10/11]

14. Модельно-видовые преобразования: изменение положения камеры

glTranslatef ( 100, 100, 10 )
gluLookAt (-100,-100,10, -100,-100,0, 0,1,0 )
14 (28)
5.2.3 Модельно-видовые преобразования [11/11]

15. Преобразования проекции: куб видимости

Куб
видимости
Плоскости
отсечения
15 (28)
near
Передняя (ближняя) по OZ
far
Задняя (дальняя) по OZ
left
Левая
right
Правая
top
Верхняя
bottom
Нижняя
5.2.4 Преобразования проекции [1/8]

16. Преобразования проекции: куб видимости

Объекты
не видимы
Куб
видимости
OY
Объекты
видимы
OZ
Плоскость
просмотра
OX
Наблюдатель
(точка просмотра)
Плоскости
отсечения
(границы
видимости,
грани куба
видимости)
16 (28)
far,
конец
видимости
near,
начало
видимости
near
Передняя (ближняя) по OZ
far
Задняя (дальняя) по OZ
left
Левая
right
Правая
top
Верхняя
bottom
Нижняя
5.2.4 Преобразования проекции [2/8]

17. Преобразования проекции: ортографическая (параллельная) проекция

glOrtho ( GLdouble left,
GLdouble right,
GLdouble bottom, GLdouble top,
GLdouble near,
GLdouble far )
gluOrtho2D ( GLdouble left,
GLdouble right,
GLdouble bottom, GLdouble top )
gluOrtho2D ( left, right, bottom, top )

glOrtho ( left, right, bottom, top, -1, 1 )
Куб видимости
Параллелограмм
Система координат
Левосторонняя
( left, bottom, -near )
левый нижний угол окна вывода
( right, top,
правый верхний угол окна вывода
17 (28)
-near )
5.2.4 Преобразования проекции [3/8]

18. Преобразования проекции: ортографическая (параллельная) проекция

2
right left
0
0
0
0
0
2
top bottom
0
0
0
2
far near
0
right left
right left
top bottom
top bottom
far near
far near
1
glOrtho
(
left, right,
bottom, top,
near, far
)
к точке наблюдения
18 (28)
5.2.4 Преобразования проекции [4/8]

19. Преобразования проекции: перспективная (центральная) проекция

gluPerspective ( GLdouble angle_y, GLdouble aspect,
GLdouble near, GLdouble far )
glFrustum ( GLdouble left,
GLdouble right,
GLdouble bottom, GLdouble top,
GLdouble near,
GLdouble far )
glFrustum ( -right, right, -top, top, near, far)

gluPerspective ( angle_y, aspect, near, far )
far > near > 0
Куб видимости
Усеченная пирамида
Система координат
Левосторонняя
angle_y
Угол видимости по OY ( 0° - 180°) = 2 * arctg( top / near )
aspect
Угол видимости по OX = right / top
19 (28)
5.2.4 Преобразования проекции [5/8]

20. Преобразования проекции: перспективная (центральная) проекция

2 near
right left
0
0
0
0
2 near
top bottom
0
0
right left
right left
top bottom
top bottom
far near
far near
1
0
2 far near
far near
0
0
glFrustum
(
left, right,
bottom, top,
near, far
)
к точке наблюдения
20 (28)
5.2.4 Преобразования проекции [6/8]

21. Преобразования проекции: задание центра системы координат

gluOrtho2D ( 0,512, 0,256)
Центр системы координат
задан в левом нижнем
угле окна
gluOrtho2D ( -256,256, -128,128)
Центр системы координат
задан в центре окна
21 (28)
5.2.4 Преобразования проекции [7/8]

22. Дополнительные возможности отсечения

Дополнительные плоскости отсечения в OpenGL (до 6 штук)
glClipPlane (*)
glEnable ( GL_CLIP_PLANE plane )
glDisable ( GL_CLIP_PLANE plane )
// включить
// выключить
Прямоугольник области вырезания
(команды могут модифицировать только пиксели,
лежащие внутри этой области)
glEnable ( GL_SCISSOR_TEST )
glDisable ( GL_SCISSOR_TEST )
// включить
// выключить
glScissor ( x0,y0, width,height )
22 (28)
// область вырезания
5.2.4 Преобразования проекции [8/8]

23. Преобразование координат: 1. Мировые координаты

На входе: координаты в локальных системах координат
(xL, yL, zL)T
Перевод в мировую (глобальную, правостороннюю)
систему координат
(xG, yG, zG)T
23 (28)
5.2.5 Преобразования координат [1/5]

24. Преобразование координат: 2. Видовые координаты

На входе: мировые координаты
(x, y, z)T
Перевод в расширенные координаты:
(x, y, z, 1)T
Модельно-видовые преобразования:
M * (x, y, z, 1)T = (x`, y`, z`, 1)T
На выходе: видовые координаты
(x`, y`, z`, 1)T
24 (28)
5.2.5 Преобразования координат [2/5]

25. Преобразование координат : 3. Нормализованные координаты

На входе: видовые координаты
(x, y, z, w)T
Преобразования проекции и отсечения:
M * (x, y, z, w)T = (xс, yс, zс, wс)T
Преобразование нормализации:
xC xC xC
,
,
wC wC wC
T
x N, x N, x N T
На выходе: нормализованные координаты:
x N, x N, x N T
25 (28)
5.2.5 Преобразования координат [3/5]

26. Преобразование координат : 4. Оконные координаты

На входе: нормализованные координаты
(x, y, z)T
Определяется порт просмотра:
glViewPort(xP, yP, width, height)
Определяется параметры буфера глубины:
glDepthRange(near, far)
Расчет оконных координат (xw, yw, zw)T:
width
xW
1 * x x P
2
height
yW
1 * y y P
2
far near
far near
zW
*
z
0
2
2
26 (28)
5.2.5 Преобразования координат [4/5]

27. Преобразование координат : конвейер

ЛСК2
Y
w=1
Z
Y
X
X
ВСК
Z
X
НСК
Y
X
ОСК
27 (28)
ЛСК1
Y
5.2.5 Преобразования координат [5/5]
Z
МСК

28. Матричные операции в OpenGL

Выбор матрицы: glMatrixMode(*)
GL_MODELVIEW
GL_PROJECTION
GL_TEXTURE
– модельно-видовая матрица
– проекционная матрица
– текстурная матрица
Сохранение матрицы в массив 4х4 (16 элементов) по столбцам:
glGetFloatv ( GL_MODELVIEW_MATRIX, matr )
Загрузка матрицы из массива: glLoadMatrix(matr)
Сброс матрицы: glLoadIdentity()
Умножение матрицы слева: glMultMatrix(matr)
Сохранение матрицы в стеке: glPushMatrix()
Восстановление матрицы из стека: glPopMatrix()
28 (28)
5.2.6 Матричные операции
English     Русский Правила