Download ppt - Programação em OpenGL

Transcript
Page 1: Programação em OpenGL

Programação em OpenGL

Daniel de Vasconcelos Campos

Page 2: Programação em OpenGL

Tópicos

• Problema proposto• Análise do problema• Possíveis abordagens• Técnica do ARCBALL

Page 3: Programação em OpenGL

Tópicos

• Problema proposto• Análise do problema• Possíveis abordagens• Técnica do ARCBALL

Page 4: Programação em OpenGL

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.

Page 5: Programação em OpenGL

Tópicos

• Problema proposto• Análise do problema• Possíveis abordagens• Técnica do ARCBALL

Page 6: Programação em OpenGL

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.

Page 7: Programação em OpenGL

Tópicos

• Problema proposto• Análise do problema• Possíveis abordagens para o 1⁰ subproblema• Técnica do ARCBALL

Page 8: Programação em OpenGL

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

Page 9: Programação em OpenGL

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.

Page 10: Programação em OpenGL

Tópicos

• Problema proposto• Análise do problema• Possíveis abordagens para o 2⁰ subproblema• Técnica do ARCBALL

Page 11: Programação em OpenGL

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.

Page 12: Programação em OpenGL

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

Page 13: Programação em OpenGL

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.

Page 14: Programação em OpenGL

Tópicos

• Problema proposto• Análise do problema• Possíveis abordagens para o 2⁰ subproblema• Técnica do ARCBALL

Page 15: Programação em OpenGL

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.

Page 16: Programação em OpenGL

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

Page 17: Programação em OpenGL

ARCBALL

• Há duas possibilidades de algoritmos:- Quaternions- Eixo fixo de rotação e o ângulo que se deseja

rotacionar( Matriz de rotação).

Page 18: Programação em OpenGL

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.

Page 19: Programação em OpenGL

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.

Page 20: Programação em OpenGL

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]


Recommended