3 d transformaci i
TRANSCRIPT
Графика и визуелизација
Координатни системи и 3D трансформации
Факултет за информатика – Универзитет „Гоце Делчев“
3D Трансформации
Иста идеја како и 2D трансформациите:
Хомогени координати: (x,y,z,w)
4x4 матрици на трансформација
Лев и десен 3D координатен системOpenGL користи координатен систем
дефиниран со десна рака
Z- оската е насочена од мониторот кон
набљудувачот (излегува од мониторот)
Дефиниции на позитивни насоки на 3Д ротации околу оските
Основни 3D трансформации
Единечна матрица Издолжување
Транслација Огледално пресликување во
однос на Y/Z рамнината
Основни 3D трансформации
Ротација околу Z оската
Ротација околу Y оската
Ротација околу X оската
OpenGL - 3D трансформацииglTranslate{fd}(TYPE x, TYPE y, TYPE z);
▫ Го придвижува објектот за соодветни вредности по x-, y-, z- оските.
OpenGL - 3D трансформации
glRotate{fd}(TYPE angle, TYPE x, TYPE y, TYPE z);
▫ Врши ротација на еден објект во насока спротивна на насоката на
движење на стрелките на часовникот околу векторот (x,y,z).
▫ Пр. glRotatef(45.0, 0.0, 0.0, 1.0);
OpenGL - 3D трансформации
glScale{fd}(TYPE, x, TYPE y, TYPE z);
▫ Врши множење на секоја од x-, y-, z- координатите на секоја точка од
еден објект со соодветниот аргумент на функцијата x, y, или z.
▫ Пр. glScalef(2.0, -0.5, 1.0);
Негативен знак –
огледално пресликување
OpenGL - 3D трансформации
glScale{fd}(TYPE, x, TYPE y, TYPE z);
▫ Врши множење на секоја од x-, y-, z- координатите на секоја точка од
еден објект со соодветниот аргумент на функцијата x, y, или z.
▫ Пр. glScalef(2.0, -0.5, 1.0);
OpenGL - 3D трансформации
Трансформационите матрици во OpenGL се 4x4
P’ = M * P
Концепт на тековна матрица на транформација (ТМТ)
ТМТ иницијално се поставува на 4x4 единечна матрица
glScalef()
TMТ <- TMТ * S
glTranslatef()
TMТ <- TMТ * T
…
TMT се множи од десно
Трансформациите се аплицираат во „обратен редослед“
Употреблива е на хиерархиски модели
OpenGL - 3D трансформации
За да се повикаат претходните трансформации
се користи т.н. Магацин (stack) од матрици.
OpenGL - 3D трансформации
glPushMatrix()
<=> glPopMatrix()
OpenGL - 3D трансформации
glPushMatrix(void) – Ја
„поттурнува“ тековната матрица
едно ниво подолу во
магацинот.
glPopMatrix(void) – Ја
„извлекува“ најгорната матрица
од магацинот, при што истата
се губи!
(Тековниот магацин на кој се
однесуваат операциите се
подесува со glMatrixMode).
GL_MODELVIEW
GL_PROJECTION
GL_TEXTURE
GL_COLOR
M5
M4
M3
M2
M1
M5
M4
M3
M2
M1
Pop
Push
M4
M3
M2
M1
M4
M4
M3
M2
M1
Тековна матрица
на трансформација
Тековна матрица
на трансформација
OpenGL - 3D трансформации
45 степени ротација околу z-оската, и 10 единици транслација по +x
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMultMatrixf(R); // rot
glMultMatrixf(T); // trans
draw_the_object();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMultMatrixf(T); // trans
glMultMatrixf(R); // rot
draw_the_object();
Ја множи од десно ТМТ со 4 х 4 матрицата дадена како параметар на функцијата
OpenGL - 3D трансформацииglLoadIdentity();
glTranslatef (20.0, 20.0, 0.0);
glColor3f(0.0, 0.8, 0.1);
glRectf(0.,0.,20.,20.);
glTranslatef (20.0, 20.0, 0.0);
glColor3f(0.0, 0.0, 0.0);
glRectf(0.,0.,20.,20.);
glLoadIdentity();
glTranslatef (20.0, 20.0, 0.0);
glColor3f(0.0, 0.8, 0.1);
glRectf(0.,0.,20.,20.);
glLoadIdentity();
glTranslatef (20.0, 20.0, 0.0);
glColor3f(0.0, 0.0, 0.0);
glRectf(0.,0.,20.,20.);