Escolar Documentos
Profissional Documentos
Cultura Documentos
Transformações Geométricas 3D
SCC0250/0650 - Computação Gráfica
16 de abril de 2018
1 / 84
Transformações Geométricas 3D
Introdução
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
2 / 84
Transformações Geométricas 3D
Introdução
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
3 / 84
Transformações Geométricas 3D
Introdução
Introdução
4 / 84
Transformações Geométricas 3D
Transformações Básicas
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
5 / 84
Transformações Geométricas 3D
Transformações Básicas
Translação 3D
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
6 / 84
Transformações Geométricas 3D
Transformações Básicas
Translação 3D
Translação 3D
7 / 84
Transformações Geométricas 3D
Transformações Básicas
Translação 3D
Translação 3D
8 / 84
Transformações Geométricas 3D
Transformações Básicas
Translação 3D
Translação 3D Inversa
9 / 84
Transformações Geométricas 3D
Transformações Básicas
Escala 3D
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
10 / 84
Transformações Geométricas 3D
Transformações Básicas
Escala 3D
Escala 3D
11 / 84
Transformações Geométricas 3D
Transformações Básicas
Escala 3D
Escala 3D
x0
sx 0 0 0 x
y0 0 sy 0 0 y
0 = ·
z 0 0 sz 0 z
1 0 0 0 1 1
12 / 84
Transformações Geométricas 3D
Transformações Básicas
Escala 3D
Escala 3D
Escala 3D
14 / 84
Transformações Geométricas 3D
Transformações Básicas
Escala 3D
Escala Inversa 3D
15 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
16 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D
17 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D
18 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
19 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
20 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
21 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
22 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
23 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
x0
1 0 0 0 x
y 0 0 cos θ − sen θ 0 y
0 = ·
z 0 sen θ cos θ 0 z
1 0 0 0 1 1
0
x cos θ 0 sen θ 0 x
y0 0 1 0 0 y
0 = ·
z − sen θ 0 cos θ 0 z
1 0 0 0 1 1
24 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Inversa
25 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
26 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
27 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
28 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
29 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
30 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
31 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
32 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
33 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
34 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
35 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
36 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
37 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
38 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
39 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
40 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
Temos
sen β = −a
41 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
42 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
43 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
44 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
0 0 0 1
45 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
46 / 84
Transformações Geométricas 3D
Transformações Básicas
Rotação 3D
Rotação 3D Geral
47 / 84
Transformações Geométricas 3D
Transformações Básicas
Compondo Transformações 3D
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
48 / 84
Transformações Geométricas 3D
Transformações Básicas
Compondo Transformações 3D
Compondo Transformações 3D
49 / 84
Transformações Geométricas 3D
Outras Transformações 3D
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
50 / 84
Transformações Geométricas 3D
Outras Transformações 3D
Reflexão 3D
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
51 / 84
Transformações Geométricas 3D
Outras Transformações 3D
Reflexão 3D
Reflexão 3D
52 / 84
Transformações Geométricas 3D
Outras Transformações 3D
Reflexão 3D
Reflexão 3D
0 0 0 1
53 / 84
Transformações Geométricas 3D
Outras Transformações 3D
Cisalhamento 3D
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
54 / 84
Transformações Geométricas 3D
Outras Transformações 3D
Cisalhamento 3D
Cisalhamento 3D
55 / 84
Transformações Geométricas 3D
Outras Transformações 3D
Cisalhamento 3D
Cisalhamento 3D
56 / 84
Transformações Geométricas 3D
Transformações Afim
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
57 / 84
Transformações Geométricas 3D
Transformações Afim
Transformações Afim
58 / 84
Transformações Geométricas 3D
Programação OpenGL
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
59 / 84
Transformações Geométricas 3D
Transformações Afim
Sumário
1 Introdução
2 Transformações Básicas
Translação 3D
Escala 3D
Rotação 3D
Compondo Transformações 3D
3 Outras Transformações 3D
Reflexão 3D
Cisalhamento 3D
4 Transformações Afim
5 Programação OpenGL
6 Transformações Afim
60 / 84
Transformações Geométricas 3D
Transformações Afim
Ambiente Visual 2D
61 / 84
Transformações Geométricas 3D
Transformações Afim
Ambiente Visual 2D
Exemplo
Baixar e compilar o arquivo (ExemploViewport2D).
62 / 84
Transformações Geométricas 3D
Transformações Afim
Transformações Geométricas
63 / 84
Transformações Geométricas 3D
Transformações Afim
Matriz de Transformação
64 / 84
Transformações Geométricas 3D
Transformações Afim
Transformações Geométricas
Translação
void glTranslatef(GLfloat x, y, z)
x, y, z: representam a quantidade a ser transladada no respectivo
eixo.
Rotação
void glRotatef(GLfloat angulo, x, y, z)
angulo: especifica o ângulo de rotação (em graus).
x, y, z: o eixo a ser realizada a rotação.
Escala
void glScalef(GLfloat x, y, z)
x, y, z: Representam o fator de escala nos respectivos eixos.
65 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
1 #include <GLUT/glut.h>
2
3 float alpha = 0;
4 float beta = 0;
5 float delta = 1;
6
7 void init() {
8 glClearColor(0, 0, 0, 0); //define a cor de fundo
9 glEnable(GL_DEPTH_TEST); //remocao de superficie oculta
10 glMatrixMode(GL_PROJECTION); //define que a matrix eh a de projecao
11 glLoadIdentity(); //carrega a matrix de identidade
12 glOrtho(-5, 5, -5, 5, -5, 5); //define uma projecao ortografica
13 }
66 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
1 void display() {
2 glClearColor(0.0,0.0,0.0,0.0);
3 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
4
5 //define que a matrix eh a de modelo
6 glMatrixMode(GL_MODELVIEW);
7 glLoadIdentity(); //carrega matrix identidade
8
9 //rotaciona e escala uma esfera 'aramado'
10 glRotatef(beta, 0, 1, 0);
11 glRotatef(alpha, 1, 0, 0);
12 glScalef(delta, delta, delta);
13 glColor3f(1, 1, 0);
14 glutWireSphere(1.0f, 20, 20);
15
16 //desenha um 'piso' sob a esfera
17 glTranslatef(0, -1, 0);
18 glScalef(4, 0.1f, 4);
19 glColor3f(0, 0, 1);
20 glutSolidCube(1.0f);
21
22 //forca o desenho das primitivas
23 glFlush();
24 }
67 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
68 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
69 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
70 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
1 void display() {
2
3 glClearColor(0.0,0.0,0.0,0.0);
4 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
5
6 //define que a matrix eh a de modelo
7 glMatrixMode(GL_MODELVIEW);
8 glLoadIdentity();
9
10 glScalef(delta, delta, delta); //faca a escala de todos objetos
11
12 glPushMatrix(); //armazena a matriz corrente
13 glTranslatef(-3, 0, 0);
14 glRotatef(beta, 0, 1, 0);
15 glRotatef(alpha, 1, 0, 0);
16 glColor3f(1, 1, 0);
17 glutWireSphere(1, 20, 20);
18 glPopMatrix(); //restaura a matriz anterior
19
20 glPushMatrix(); //armazena a matriz corrente
21 glTranslatef(3, 0, 0);
22 glRotatef(beta, 0, 1, 0);
23 glRotatef(alpha, 1, 0, 0);
24 glColor3f(1, 0, 0);
25 glutWireSphere(1, 20, 20);
26 glPopMatrix(); //restaura a matriz anterior
27
28 //forca o desenho das primitivas
29 glFlush();
30 }
71 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
72 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
1 #include <GLUT/glut.h>
2 #include <stdlib.h>
3
4 // Variaveis para controles de navegacao
5 GLfloat angle, fAspect;
6 GLfloat rotX, rotY, rotX_ini, rotY_ini;
7 GLfloat obsX, obsY, obsZ, obsX_ini, obsY_ini, obsZ_ini;
8 int x_ini,y_ini,bot;
9
10 // Funcao que desenha um cubo cujas cores dos vertices
11 // mostram como eh o espaco RGB
12 void DesenhaCuboRGB(void)
13 {
14 // Desenhas as linhas das "bordas" do cubo
15 glColor3f(0.0f, 0.0f, 0.0f);
16 glLineWidth(1.6f);
17 glBegin(GL_LINE_LOOP); // frontal
18 glVertex3f(40.0, -40.0, 40.0);
19 glVertex3f(-40.0, -40.0, 40.0);
20 glVertex3f(-40.0, 40.0, 40.0);
21 glVertex3f(40.0, 40.0, 40.0);
22 glEnd();
23 glBegin(GL_LINE_LOOP); // posterior
24 glVertex3f(40.0, 40.0, -40.0);
25 glVertex3f(40.0, -40.0, -40.0);
26 glVertex3f(-40.0, -40.0, -40.0);
27 glVertex3f(-40.0, 40.0, -40.0);
28 glEnd();
29 glBegin(GL_LINES); // laterais
30 glVertex3f(-40.0, 40.0, -40.0);
31 glVertex3f(-40.0, 40.0, 40.0);
32 glVertex3f(-40.0, -40.0, -40.0);
33 glVertex3f(-40.0, -40.0, 40.0);
34 glVertex3f(40.0, 40.0, -40.0);
35 glVertex3f(40.0, 40.0, 40.0);
36 glVertex3f(40.0, -40.0, -40.0);
37 glVertex3f(40.0, -40.0, 40.0);
38 glEnd();
73 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
1 glBegin(GL_QUADS); // Desenha as faces do cubo preenchidas
2 // Face frontal
3 glColor3f(1.0f, 1.0f, 1.0f);
4 glVertex3f(40.0, 40.0, 40.0);
5 glVertex3f(-40.0, 40.0, 40.0);
6 glVertex3f(-40.0, -40.0, 40.0);
7 glVertex3f(40.0, -40.0, 40.0);
8 // Face posterior
9 glColor3f(0.0f, 0.0f, 0.0f);
10 glVertex3f(40.0, 40.0, -40.0);
11 glVertex3f(40.0, -40.0, -40.0);
12 glVertex3f(-40.0, -40.0, -40.0);
13 glVertex3f(-40.0, 40.0, -40.0);
14 // Face lateral esquerda
15 glColor3f(0.0f, 1.0f, 0.0f);
16 glVertex3f(-40.0, 40.0, 40.0);
17 glVertex3f(-40.0, 40.0, -40.0);
18 glVertex3f(-40.0, -40.0, -40.0);
19 glVertex3f(-40.0, -40.0, 40.0);
20 // Face lateral direita
21 glColor3f(1.0f, 0.0f, 0.0f);
22 glVertex3f(40.0, 40.0, 40.0);
23 glVertex3f(40.0, -40.0, 40.0);
24 glVertex3f(40.0, -40.0, -40.0);
25 glVertex3f(40.0, 40.0, -40.0);
26 // Face superior
27 glColor3f(1.0f, 1.0f, 0.0f);
28 glVertex3f(-40.0, 40.0, -40.0);
29 glVertex3f(-40.0, 40.0, 40.0);
30 glVertex3f(40.0, 40.0, 40.0);
31 glVertex3f(40.0, 40.0, -40.0);
32 // Face inferior
33 glColor3f(0.0f, 0.0f, 1.0f);
34 glVertex3f(-40.0, -40.0, -40.0);
35 glVertex3f(40.0, -40.0, -40.0);
36 glVertex3f(40.0, -40.0, 40.0);
37 glVertex3f(-40.0, -40.0, 40.0);
38 glEnd();
39 }
74 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
75 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
76 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
77 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
1
2 // Funcao callback para tratar eventos de teclas especiais
3 void TeclasEspeciais (int tecla, int x, int y)
4 {
5 switch (tecla) {
6 case GLUT_KEY_HOME: if(angle>=10) angle -=5;
7 break;
8 case GLUT_KEY_END: if(angle<=150) angle +=5;
9 break;
10 }
11 EspecificaParametrosVisualizacao();
12 glutPostRedisplay();
13 }
14
15 // Funcao callback para eventos de botoes do mouse
16 void GerenciaMouse(int button, int state, int x, int y)
17 {
18 if(state==GLUT_DOWN)
19 {
20 // Salva os par?metros atuais
21 x_ini = x;
22 y_ini = y;
23 obsX_ini = obsX;
24 obsY_ini = obsY;
25 obsZ_ini = obsZ;
26 rotX_ini = rotX;
27 rotY_ini = rotY;
28 bot = button;
29 }
30 else bot = -1;
31 }
78 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
1 // Funcao callback para eventos de movimento do mouse
2 #define SENS_ROT 5.0
3 #define SENS_OBS 10.0
4 #define SENS_TRANSL 10.0
5 void GerenciaMovim(int x, int y)
6 {
7 if(bot==GLUT_LEFT_BUTTON) // Botao esquerdo
8 {
9 // Calcula diferencas
10 int deltax = x_ini - x;
11 int deltay = y_ini - y;
12 // E modifica ?ngulos
13 rotY = rotY_ini - deltax/SENS_ROT;
14 rotX = rotX_ini - deltay/SENS_ROT;
15 }
16 else if(bot==GLUT_RIGHT_BUTTON)// Botao direito
17 {
18 // Calcula diferenca
19 int deltaz = y_ini - y;
20 // E modifica distancia do observador
21 obsZ = obsZ_ini + deltaz/SENS_OBS;
22 }
23
24 else if(bot==GLUT_MIDDLE_BUTTON)// Botao do meio
25 {
26 // Calcula diferencas
27 int deltax = x_ini - x;
28 int deltay = y_ini - y;
29 // E modifica posicoes
30 obsX = obsX_ini + deltax/SENS_TRANSL;
31 obsY = obsY_ini - deltay/SENS_TRANSL;
32 }
33 PosicionaObservador();
34 glutPostRedisplay();
35 }
79 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
80 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
1 // Programa Principal
2 int main(int argc, char **argv)
3 {
4 glutInit(&argc, argv);
5 // Define do modo de operacao da GLUT
6 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
7 // Especifica a posicao inicial da janela GLUT
8 glutInitWindowPosition(5,5);
9 // Especifica o tamanho inicial em pixels da janela GLUT
10 glutInitWindowSize(450,450);
11 // Cria a janela passando como argumento o titulo da mesma
12 glutCreateWindow("Cubo RGB");
13 // Registra a funcao callback de redesenho da janela de visualizacao
14 glutDisplayFunc(Desenha);
15 // Registra a funcao callback de redimensionamento da janela de visualizacao
16 glutReshapeFunc(AlteraTamanhoJanela);
17 // Registra a funcao callback para tratamento das teclas normais
18 glutKeyboardFunc (Teclado);
19 // Registra a funcao callback para tratamento das teclas especiais
20 glutSpecialFunc (TeclasEspeciais);
21 // Registra a funcao callback para eventos de bot?es do mouse
22 glutMouseFunc(GerenciaMouse);
23 // Registra a funcao callback para eventos de movimento do mouse
24 glutMotionFunc(GerenciaMovim);
25 // Chama a funcao responsavel por fazer as inicializacoes
26 Inicializa();
27 // Inicia o processamento e aguarda interacoes do usuario
28 glutMainLoop();
29 }
81 / 84
Transformações Geométricas 3D
Transformações Afim
Programação OpenGL
82 / 84
Transformações Geométricas 3D
Transformações Afim
Bibliografia
Básica:
Hearn, D. Baker, M. P. Computer Graphics with OpenGL, Prentice
Hall, 2004. (livro texto)
Neider, J. Davis, T. Woo, M. OpenGL programming guide, 2007.
Angel, E. Interactive computer graphics: a top-down approach with
OpenGL, Addison Wesley, 2000.
Foley, J. et. al. Introduction to Computer Graphics, Addison-Wesley,
1993.
83 / 84
Transformações Geométricas 3D
Transformações Afim
Bibliografia
Complementar:
Computer Graphics Comes of Age: An Interview with Andries van
Dam. CACM, vol. 27, no. 7. 1982
The RenderMan – And the Oscar Goes to... IEEE Spectrum, vol. 38,
no. 4, abril de 2001.
Material do ano passado:
https://sites.google.com/site/computacaograficaicmc2017t2/
Apostilas antigas da disciplina Computação Gráfica
http://www.gbdi.icmc.usp.br/material?q=system/files/
apostilas.pdf
Curso da ACM SIGGRAPH (on line)
84 / 84