transformações 3d -...
TRANSCRIPT
Transformações & Recorte 3DDetecção de Colisão
Processamento Gráfico
Desenvolvimento de Jogos & Entretenimento Digital
UNISINOS
Prof. MSc. João Ricardo Bittencourt
Transformações 3D
Update: 23 Out. 2007
Sumário
.1 Transformações 3D
.2 Recorte 3D (Culling & Clipping)
.3 Detecção de Colisão Trivial: Contexto 2D Em ambientes 3D
Conceitos As transformações 3D seguem o mesmo
princípio das transformações 2D Considera o espaço tridimensional Chave: Multiplicação de matrizes! Baseadas nas coordenadas homogêneas As transformações podem ser combinadas
Na OpenGL sempre são acumulativas Transformações
Translação Escala Rotação
Transformações 3D Translação
x ' y ' z ' 1= x y z 1⋅1 0 0 Dx0 1 0 Dy0 0 1 Dz0 0 0 1 glTranslated(dx,dy,dz)glTranslatef(dx,dy,dz)
Transformações 3D Escala
x ' y ' z ' 1= x y z 1⋅Sx 0 0 00 Sy 0 00 0 Sz 00 0 0 1
glScaled(sx,sy,sz)glScalef(sx,sy,sz)
Transformações 3D Rotação – Eixo Z
x ' y ' z ' 1= x y z 1⋅cos −sen 0 0sen cos 0 00 0 1 00 0 0 1
glRotated(angGraus,0.0,0.0,1.0)glRotatef(angGraus,0.0,0.0,1.0)glRotatef(angGraus,vx,vy,vz)
Transformações 3D Rotação – Eixo X
x ' y ' z ' 1= x y z 1⋅1 0 0 00 cos −sen 00 sen cos 00 0 0 1
glRotated(angGraus,1.0,0.0,0.0)glRotatef(angGraus,1.0,0.0,0.0)
Transformações 3D Rotação – Eixo Y
x ' y ' z ' 1= x y z 1⋅ cos 0 sen 00 1 0 0
−sen 0 cos 00 0 0 1
glRotated(angGraus,0.0,1.0,0.0)glRotatef(angGraus,0.0,1.0,0.0)
Recorte 3D Objetivo: otimizar o processamento eliminando
polígonos desnecessários. Culling
Eliminar porções ou objetos inteiros que não são visíveis. Polígonos que estão fora do frustrum ou que estão encobertos
Clipping Computar a intersecção dos objetos no
frustrum. Mesmo princípio do clipping 2D
Algoritmo de Cohen-Sutherland
Recorte 3D Culling
Definir uma caixa imaginária em torno do objeto
Esta caixa é chamada de bounding volume Esfera, caixas,cápsulas, losangos,
cilindros,elipsóides
Recorte 3D Culling
Recorte 3D Culling
Otimização: organização dos bounding volumes dos objetos em uma árvore.
Se o nodo pai envolve a área dos nodos filhos, a verificação de culling é feita somente para o nodo pai.
Se colide com um nodo pai nem verifica para os nodos filhos
Recorte 3D Culling
ADAEJDJECDCE
B B
E DP
P
B E D
Ce Je Ae Cd Jd Ad
Recorte 3D Clipping
Os objetos que não foram excluídos no culling poderão interseccionar com o frustrum. Logo, precisam ser cortados
Algoritmo de Cohen-Sutherland adaptado para 3D. São usados 6 bits:
Bit 1 – ponto acima do frustrum y>1 Bit 2 – ponto abaixo do frustrum y<-1 Bit 3 – ponto a direita do frustrum x>1 Bit 4 – ponto a esquerda do frustrum x<-1 Bit 5 – ponto atrás do frustrum z<-1 Bit 6 – ponto em frente do frustrum z>0
Recorte 3D Clipping
Trivialmente aceito Trivialmente rejeitado Cálculo da intersecção dos polígonos do objeto
3D com os planos do frustrum
Detecção de Colisão Cercar o objeto com uma caixa invisível
(bounding volume) Pseudo-código (2D)
Se algum vértice do quadrado amarelo está contido no quadrado azul
Ocorreu colisão
Detecção de Colisão Podem ser usadas outras formas: eclipse,
esfera,losango,... Os objetos 3D podem ser organizados
hierarquicamente Pseudo-código trivial(3D) Se algum vértice da caixa amarela está contido
na caixa azul Ocorreu colisão