170 likes | 293 Views
Fundamentos de Computação Gráfica Prof. Marcelo Gattass. Rotação. Guilherme Schirmer de Souza. Introdução. O objetivo dessa apresentação é fazer uma breve descrição teórica do terceiro trabalho da disciplina de Fundamentos de Computação Gráfica.
E N D
Fundamentos de Computação Gráfica Prof. Marcelo Gattass Rotação Guilherme Schirmer de Souza
Introdução • O objetivo dessa apresentação é fazer uma breve descrição teórica do terceiro trabalho da disciplina de Fundamentos de Computação Gráfica. • O trabalho consistia em rotacionar um objeto em torno de um eixo qualquer através da utilização de um Arcball.
Arcball • Arcball é uma técnica de computação gráfica que utiliza o mouse como entrada para ajustar a orientação espacial de um objeto. Para isso é utilizada uma esfera ao redor desse objeto e através do clique e arraste de um determinado ponto da esfera através do mouse tal objeto é rotacionado. Figura 1
Técnicas de Rotação • Existem diversas técnicas de rotação para girar objetos no espaço tridimensional. Nesse trabalho foram utilizadas duas técnicas de rotação: matriz de rotação e quatérnios. Os diagramas abaixo mostram um esquemático de cada técnica:
Matriz Quatérnio Pontos xyz (base da câmera) Pontos xyz (base da câmera) Conversão do xyz para a base do arcball Conversão de xyz para a base do arcball Obtenção da matriz de rotação Obtenção do quatérnio de rotação Correção dos eixos do arcball Correção dos eixos do arcball
Pontos xyz – base da câmera • Para que a rotação de um arcball possa ser realizada, é necessário obter um arco de rotação. Tal arco é obtido quando o usuário clica na esfera e arrasta o mouse, tendo assim dois pontos dessa esfera em relação a base da câmera. Tais pontos são obtidos através do seguinte processo:
pt.x = (screen.x – center.x)/radius; pt.y = (screen.y – center.y)/radius; r = pt.x*pt.x + pt.y*pt.y; IF r > 1.0 THEN 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]; onde pt é o ponto da esfera, screen é o ponto da imagem (ponto bidimensional) e center é o centro da esfera na imagem.
Conversão de pontos entre bases • Suponhamos duas bases {e1,e2,e3} e {f1,f2,f3}. Para convertermos da primeira base para a segunda temos o seguinte conjunto de equações:
Logo, para transformamos os pontos da base da câmera {(1,0,0), (0,1,0),(0,0,1)} para a base do arcball {(arc->ex.x, arc->ey.x, arc->ez.x),(arc->ex.y, arc->ey.y, arc->ez.y),(arc->ex.z, arc->ey.z, arc->ez.z)} basta multiplicar tais pontos pela matriz:
Matriz de Rotação • A seguinte matriz realiza a rotação de um objeto em torno de um eixo (ex, ey,ez) qualquer: onde θ é o ângulo de rotação dos pontos ao redor do eixo e.
O eixo e é obtido através da normal do plano formado pelo dois pontos do arco de rotação. Tal normal é calculada através do produto vetorial dos dois pontos: • Já o cosθ é obtido através do produto interno entre os mesmos dois pontos: • O senθ é naturalmente obtido através da relação trigonométrica
Correção dos eixos do arcball • Após ser feita a rotação do arcball, é necessário fazer a atualização dos eixos desse arcball. Essa atualização é feita através da multiplicação de cada eixo do arcball pela matriz inversa de rotação.
Quatérnio de Rotação • Quatérnio é uma ramificação da matemática que generaliza o cálculo vetorial e os números complexos. Em computação gráfica são muito úteis para realizar rotações de objetos. Um quatérnio de rotação é determinado pelo cosseno do ângulo de rotação (parte real) e o eixo de rotação (parte imaginária):
Finalmente, para finalizar a técnica por quatérnio, basta converter esse para uma matriz de rotação para após isso ser feito o ajuste dos eixos. Tal matriz é calculada pela seguinte forma: Matrix m; m.m[0] = 1 - 2*(q.y*q.y + q.z*q.z); m.m[1] = 2*(q.x*q.y + q.z*q.w); m.m[2] = 2*(q.x*q.z - q.y*q.w); m.m[3] = 0; m.m[4] = 2*(q.x*q.y - q.z*q.w); m.m[5] = 1 - 2*(q.x*q.x + q.z*q.z); m.m[6] = 2*(q.y*q.z + q.x*q.w); m.m[7] = 0; m.m[8] = 2*(q.x*q.z + q.y*q.w); m.m[9] = 2*(q.y*q.z - q.x*q.w); m.m[10] = 1 - 2*(q.x*q.x + q.y*q.y); m.m[11] = 0; m.m[12] = 0; m.m[13] = 0; m.m[14] = 0; m.m[15] = 1;
Referências • Notas de Aula. • http://pt.wikipedia.org/wiki/Teoria_de_quaternions • http://www.cs.wisc.edu/graphics/Courses/559-f2001/Examples/Gl3D/MyArcBall.cpp • http://www.java-tips.org/other-api-tips/jogl/arcball-rotation-nehe-tutorial-jogl-port.html
http://rainwarrior.thenoos.net/dragon/arcball.html • http://www.tecgraf.puc-rio.br/~mgattass/Quaternios.pdf • http://www.tecgraf.puc-rio.br/~mgattass/fcg/material/shoemake92.pdf