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:
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:
R ( e1 )  f 1  a11 e1  a 21 e 2  a 31 e 3
R ( e 2 )  f 2  a12 e1  a 22 e 2  a 32 e3
R ( e 3 )  f 3  a13 e1  a 23 e 2  a 33 e 3

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:
 arc-  ex.x

 arc-  ex.y
 arc-  ex.z

arc-  ey.x
arc-  ey.y
arc-  ey.z
arc-  ez.x 

arc-  ez.y 
arc-  ez.z 
Matriz de Rotação

A seguinte matriz realiza a rotação de
um objeto em torno de um eixo (ex,
ey,ez) qualquer:
 cos   (1  cos  ) e x2

e x e y (1  cos  )  e z sin 
M  
 e e (1  cos  )  e sin 
x z
y

0

e y e x (1  cos  )  e z sin 
e z e x (1  cos  )  e y sin 
cos   (1  cos  ) e y
e z e y (1  cos  )  e x sin 
e y e z (1  cos  )  e x sin 
cos   (1  cos  ) e z
0
0
2
2
0

0
0

1 
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:
e  pt 0 Xpt 1

Já o cosθ é obtido através do produto
interno entre os mesmos dois pontos:
cos   ( pt 0 . pt 1 )

O senθ é naturalmente obtido através
da relação trigonométrica
sen x  cos
2
2
x 1
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):
q  (cos  , ( e x , e y , e z ))

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/Course
s/559f2001/Examples/Gl3D/MyArcBall.cpp
 http://www.java-tips.org/other-apitips/jogl/arcball-rotation-nehe-tutorialjogl-port.html

http://rainwarrior.thenoos.net/dragon/arc
ball.html
 http://www.tecgraf.pucrio.br/~mgattass/Quaternios.pdf
 http://www.tecgraf.pucrio.br/~mgattass/fcg/material/shoemake
92.pdf

Download

Apresentação - PUC-Rio