Programação em OpenGL
Daniel de Vasconcelos Campos
Tópicos
• Problema proposto• Análise do problema• Possíveis abordagens• Técnica do ARCBALL
Tópicos
• Problema proposto• Análise do problema• Possíveis abordagens• Técnica do ARCBALL
Problema Proposto:
Faça um programa que com um botão leia um arquivo de cena do tipo do rt4 e, através das teclas, , , mova a câmera para esquerda, direita, para cima e para baixo, respectivamente. O usuário deve também poder apontar com o mouse um objeto da cena e com isto a câmera deve rotacionar de forma a que o centro do objeto fique no eixo óptico da câmera. Implemente esta rotação inicialmente de qualquer maneira mas depois faça uma animação onde o movimento da câmera seja o mais suave e natural possível.
Tópicos
• Problema proposto• Análise do problema• Possíveis abordagens• Técnica do ARCBALL
Análise do problema :
• O problema foi dividido em partes para que fosse mais fácil resolvê-lo;
• Parte 1: Faça um programa que com um botão leia um
arquivo de cena do tipo do rt4 e, através das teclas, , , , mova a câmera para esquerda, direita, para cima e para baixo, respectivamente.
Tópicos
• Problema proposto• Análise do problema• Possíveis abordagens para o 1⁰ subproblema• Técnica do ARCBALL
Glu Look At
Dados: eye, center, up (definem o sistema de coordenadas do olho)
Determine a matriz que leva do sistema de Coordenadas dos Objetospara o sistema de Coordenadas do Olho
void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz);
up eye
center
Coordenadas dosobjetos
Coordenadas doolho
eye
Análise do problema :
• Parte 2: (Não implementado)– O usuário deve também poder apontar com o
mouse um objeto da cena e com isto a câmera deve rotacionar de forma a que o centro do objeto fique no eixo óptico da câmera. Implemente esta rotação inicialmente de qualquer maneira mas depois faça uma animação onde o movimento da câmera seja o mais suave e natural possível.
Tópicos
• Problema proposto• Análise do problema• Possíveis abordagens para o 2⁰ subproblema• Técnica do ARCBALL
Possíveis abordagens para o 2⁰ subproblema
• O próximo ponto seria utilizar a matriz que faz a rotação xe ye ze para xw yw zw. Este passo é
melhor explicado no próximo slide.
Roda xe ye ze para xw yw zw
xe , xo
ye , yo
ze , zo
1000
0
0
0
ezeyex
ezeyex
ezeyex
zzz
yyy
xxx
R
zo
yo
xo
center
eye
ze
xe
ye
A partir daí, a técnica do ARCBALL, seria útil para que o usuário tenha a possibilidade de enxergar o objeto do melhor ângulo de interesse.
Tópicos
• Problema proposto• Análise do problema• Possíveis abordagens para o 2⁰ subproblema• Técnica do ARCBALL
ARCBALL
• Transforma as coordenadas 2D do Mouse em rotações.
• No modelo proposto por [2], possui a importante propriedade de conservação das rotações.
ARCBALL
• O procedimento mapeia as coordenadas dos pontos inicial e final na esfera.
• pt.x = (screen.x – center.x)/radius; // center : Centro da Esfera• pt.y = (screen.y – center.y)/radius; // radius : raio da esfera• r = pt.x*pt.x + pt.y*pt.y;• IF r > 1.0 THEN // Fora da Esfera• s = 1.0/sqrt[r];• pt.x = s*pt.x;• pt.y = s*pt.y;• pt.z = 0.0;• ElSE• pt.z = sqrt(1.0 r)‐• ENDIF
ARCBALL
• Há duas possibilidades de algoritmos:- Quaternions- Eixo fixo de rotação e o ângulo que se deseja
rotacionar( Matriz de rotação).
ARCBALL
- Quaternions:• Com os pontos, cria se dois quaternions p0 e p1‐ p0 = (x0,y0,z0,0) // x,y,z calculados no mapeamento p1 = (x1,y1,z1,0) // x,y,z calculados no mapeamento q = p1 p0*// onde p0* é o conjugado de p0• q é o quaternion que descreve a rotação.
ARCBALL
-Ângulo e Eixo fixo de rotação: Com os pontos, cria se dois vetores p0 e p1‐
p0 = (x0,y0,z0) // x,y,z calculados no mapeamentop1 = (x1,y1,z1) // x,y,z calculados no mapeamentovrot = p0 × p1 // Eixo de Rotaçãoang = 2 * acos(p0 p1)// Angulo de Rotação∙– Nesse caso gira se o ângulo correto, já em relação `a ‐
quaternions o ângulo é a metade.
Referências
• [1] Notações de aula [ Marcelo Gattass]• [2] ARCBALL:A User Interface for Specifying• Three-Dimensional Orientation Using a
Mouse[Ken Shoemake]• [3] Utilização de quatérnios para representação
de rotações em 3D[ Sergio Coutinho de Biasi e Marcelo Gattass]