200 likes | 309 Views
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:.
E N D
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
up eye center Coordenadas dos objetos Coordenadas do olho Glu Look At void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz); Dados: eye, center, up (definem o sistema de coordenadas do olho) Determine a matriz que leva do sistema de Coordenadas dos Objetos para o sistema de Coordenadas do Olho 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.
yo ye ye , yo ze xe xo eye ze , zo zo xe , xo center Roda xe ye ze para xw yw zw
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 mapeamento p1 = (x1,y1,z1) // x,y,z calculados no mapeamento vrot = p0 × p1 // Eixo de Rotação ang = 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]