Post on 05-Jan-2016
description
Fundamentos de Computação Gráfica
Prof. Marcelo Gattass
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:
Pontos xyz (base da câmera)
Conversão do xyz para a base
do arcball
Obtenção da matriz de rotação
Correção dos eixos do arcball
Matriz Quatérnio
Pontos xyz (base da câmera)
Conversão de xyz para a base
do arcball
Obtenção do quatérnio de
rotação
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.0THEN 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:
33122111111)( eaeaeafeR
33222211222 )( eaeaeafeR
33322311333)( eaeaeafeR
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:
ez.zarc-ey.zarc-ex.zarc-
ez.yarc-ey.yarc-ex.yarc-
ez.xarc-ey.xarc-ex.xarc-
Matriz de Rotação
A seguinte matriz realiza a rotação de um objeto em torno de um eixo (ex, ey,ez) qualquer:
1000
0)cos1(cossin)cos1(sin)cos1(
0sin)cos1()cos1(cossin)cos1(
0sin)cos1(sin)cos1()cos1(cos
2
2
2
zxzyyzx
xyzyzyx
yxzzxyx
eeeeeee
eeeeeee
eeeeeee
M
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:
10Xptpte Já o cosθ é obtido através do produto
interno entre os mesmos dois pontos:).(cos 10 ptpt
O senθ é naturalmente obtido através da relação trigonométrica
1cos22 xxsen
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):
)),,(,(cos zyx eeeq
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;
Software
Referências
Notas de Aula. http://pt.wikipedia.org/wiki/Teoria_de_qu
aternions 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