Universidade de Aveiro
Departamento de Electrónica,
Telecomunicações e Informática
Visualização 3D
Computação Visual
Beatriz Sousa Santos, J. Madeira
Visualização 3D
• Os processos envolvidos na obtenção de uma imagem de uma cena 3D são
de alguma forma semelhantes a tirar uma fotografia
• É preciso escolher os parâmetros de visualização:
- posição
(correspondente à posição da câmara,
dependente da vista pretendida)
- orientação
(correspondente à orientação da
câmara)
Mas em Computação Gráfica há mais
flexibilidade na produção da imagem que na
fotografia (ex: pode-se escolher o tipo de
projecção, a localização do plano de
visualização, etc.)
2
Transformações de coordenadas no Pipeline de
Visualização 3D
Passos necessários para transformar coordenadas da cena em coordenadas
do dispositivo:
1º passo - definir a transformação
de visualização
Coordenadas
do mundo
2º passo - definir a transformação
de projecção
Coordenadas
de visualização
É ainda necessário identificar as superfícies
visíveis a aplicar os processos de surface
rendering
3
•
Algumas das operações envolvidas na visualização de uma cena 3D são
semelhantes às envolvidas no pipeline de visualização 2D:
- Usa-se um viewport 2D para mostrar uma projecção da cena no
dispositivo de saída
- A janela de clipping está sobre um plano de visualização
- MAS o clipping das cenas é feito em relação a um volume definido por um
conjunto de planos de clipping
• A posição de visualização, o plano de visualização,
a janela de clipping e os planos de clipping são
definidos num :
Sistema de coordenadas de visualização
4
Coordenadas de Visualização 3D
• Estabelecer um sistema de coordenadas de visualização 3D é análogo
a estabelecer um sistema de coordenadas de visualização 2D:
1- Estabelecer um ponto Po (xo, yo, zo) para origem:
posição do observador ou ponto de vista (viewing position)
2- Especificar um vector view-up que define a direcção yview
3- Especificar uma direcção de um outro eixo: zview
5
•
Em geral o plano de visualização (ou de projecção) é definido como sendo
perpendicular ao zview
•
A orientação do plano de visualização (e a direcção positiva de zview ) é
definida a partir de um vector normal N
•
Usa-se ainda um parâmetro para definir
a posição do plano de visualização zvp
sobre o eixo zview
Três posições possíveis para o
plano de visualização
6
• Em geral o sistema de coordenadas de visualização é definido como um
sistema de coordenadas de “mão direita”
(o convencional em Matemática)
• Alguns packages gráficos usam
sistemas de “mão esquerda”
Sistema de
“mão esquerda”
(z aumenta para
trás do ecrã)
• Num sistema de “mão direita”, as rotações positivas são tais que, quando
se olha para a origem ao longo de um semi-eixo positivo, uma rotação de 90º
no sentido anti-horário transforma um semi-eixo positivo noutro semi-eixo
positivo
eixo de rotação
x
y
z
Direcção da rotação positiva
y para z
z para x
x para y
7
Efeitos de Visualização 3D
•
Variando os parâmetros de visualização é possível obter diferentes efeitos
de visualização (por exemplo, diferentes vistas de um objecto, panning,
etc.)
Mantendo um ponto de observação fixo e variando a direcção de N podem mostrar-se
objectos em posições em torno do ponto de observação e compor uma cena
8
Variando o ponto de observação e
mantendo a direcção de N,
obtemos um efeito de panning,
como quando uma câmara segue
um objecto numa cena
9
• Conhecendo os parâmetros de visualização que definem o sistema de
coordenadas de visualização é fácil calcular a matriz que permite transformar
as coordenadas do mundo (WC) em coordenadas de visualização (VC)
Matriz de transformação
Coordenadas
do mundo
Coordenadas
de visualização
10
Pipeline de Visualização 3D:
Coordenadas
de visualização
?
2º passo - definir a
transformação de projecção
É necessário definir o volume
de clipping
11
Projecção
•
A cena 3D é projectada num plano de visualização 2D
(vai haver perda de informação)
Plano de visualização
Embora já existam dispositivos de display 3D (ver artigo, A. Sullivan, “3Deep”,
IEEE Spectrum. Abril, 2005, pp. 30-35) na esmagadora maioria dos casos
usam-se dispositivos de display 2D
12
Projecções
• As projecções geométricas planas têm este nome porque são obtidas com
rectas projectantes e superfícies planas
• Há outros tipos que não vamos considerar…
• Existem duas classes de projecções geométricas planas:
- Projecções paralelas
- Projecções perspectivas
• As projecções perspectivas permitem gerar imagens com mais realismo
• Mas envolvem cálculos mais complexos, e nem sempre são a melhor opção !
13
Projecções paralelas e perspectivas
projecção paralela
projecção perspectiva
14
Projecções
Projecções geométricas
planas
Paralelas
Oblíquas
Ortogonais
Planta
Perspectivas
Cavaleira
Axonométricas
Vista
frontal
Com 1 ponto
de fuga
Com 2 pontos
de fuga
Com 3 pontos
de fuga
de Gabinete
Vista
lateral
Outras
Isométricas
Outras
15
Projecções paralelas e perspectivas
Plano de
visualização
Plano de
visualização
Ponto de
convergência
(Centro de projecção)
Nas projecções paralelas as rectas
projectantes são paralelas, i.e.,
convergem num ponto a uma
distância infinita.
Nas projecções perspectivas
as rectas projectantes
convergem no centro de
projecção.
16
Projecções paralelas ortogonais (ou ortográficas)
•
São projecções paralelas obtidas por
projectores perpendiculares ao plano
de projecção
•
As projecções deste tipo, em que o
plano de projecção é paralelo a um
conjunto de faces do objecto, são
frequentemente usadas em engenharia
e arquitectura
•
Alguns ângulos, distâncias e áreas são
representados em verdadeira grandeza e podem ser directamente
medidos nas vistas
•
Têm a desvantagem de não dar
facilmente uma ideia da estrutura
tridimensional dos objectos
Planta
Vista lateral
Vista frontal
17
Coordenadas da projecção ortogonal
•
Se a direcção de projecção for paralela ao eixo zview quais são as
coordenadas do ponto projectado?
(x,y,z)
18
Projecções Paralelas Ortogonais
19
Planta e alçados
20
Projecções ortogonais axonométricas
•
São projecções ortogonais em que o
plano de visualização não é paralelo
a um conjunto de faces do objecto
•
Dão uma ideia melhor da estrutura
tridimensional do objecto
•
Podem ser
• Isométricas
• Dimétricas
• Trimétricas
Plano de
visualização
Projecção isométrica do cubo:
são mostradas várias faces e as três
arestas são representadas com a
mesma grandeza
21
Projecções Isométricas
22
Projecções Dimétricas
23
Projecções Trimétricas
24
Forma prática de construir uma
projecção isométrica
25
Janela de clipping e volume de projecção ortogonal
• Na fotografia, é o tipo de lente
que determina que “quantidade”
da cena é transferida para o filme
View plane
• Em computação gráfica usa-se
a janela de clipping que está
sobre o plano de visualização
• Os packages gráficos permitem,
em geral usar janelas de clipping
rectangulares e paralelas aos
eixos
• A janela de clipping permite
definir o volume de visualização
26
Volume de visualização e clipping para projecções ortogonais
Plano de
clipping
Janela de
clipping
Plano de clipping
Volume de visualização finito correspondente a uma projecção ortogonal
com planos de clipping à frente e atrás
27
Projecções paralelas oblíquas
Projectores
•
São projecções paralelas obtidas por
rectas projectantes oblíquas ao plano
de visualização
•
São muito usadas em engenharia e
arquitectura pois:
–
Plano de visualização
são fáceis de produzir
– dão uma boa ideia do objecto
Plano de visualização
Projecção oblíqua do cubo:
são mostradas várias faces
28
Projecção cavaleira
•
Nesta projecção a profundidade (L1) do
cubo é representada com uma grandeza
igual à largura e à altura
•
Tem a desvantagem de não parecer muito
realista
•
O ângulo Φ é geralmente:
– Φ = 30º
– Φ = 45º
29
Projecção de gabinete
•
Nesta projecção a profundidade (L1) do
cubo é representada com uma grandeza
igual a metade da largura e da altura
•
Tem a vantagem de parecer mais realista
que a projecção cavaleira
•
O ângulo Φ é geralmente:
– Φ = 30º
– Φ = 45º
30
Projecções cavaleiras e de gabinete
31
Projecção perspectiva
•
Segmentos de recta com o mesmo comprimento, mas que se encontrem a
distâncias diferentes do plano de visualização, projectam-se com
comprimentos diferentes
• Em relação às projecções paralelas
- Tem a vantagem de produzir imagens mais realistas
- Mas não preserva proporções dos objectos
- E é mais complexa
32
Projecções perspectivas com um, dois e três pontos de fuga
•
Ponto principal de fuga é um ponto
para onde convergem as rectas
paralelas a um eixo coordenado que
intersecta o plano de projecção
n. de pontos de fuga principais:
n. de eixos coordenados intersectados pelo plano de projecção
33
Perspectiva com um ponto de fuga
34
Perspectivas com um e dois pontos de fuga (frontal e angular)
Um ponto de fuga
(perspectiva frontal)
Dois pontos de fuga
(perspectiva angular)
35
Perspectiva na arte
A Trindade e a Virgem
Mastaccio, 1427
Considerada a primeira
pintura com perspectiva
36
Perspectiva com um ponto de fuga
From http://www.sanford-artedventures.com
37
Volume de visualização e clipping para projecções perspectiva
Volume de visualização finito correspondente a uma projecção perspectiva
com planos de clipping
38
Imagem de uma cena tridimensional gerada usando projecção perspectiva
39
Matemática das Projecções
•
As projecções podem aplicar-se através de multiplicação de matrizes de
projecção 4x4 (em coordenadas homogéneas)
•
Isto permite a sua combinação com matrizes correspondentes às
transformações estudadas
– Animações
– Projecções mais complexas decompostas numa sequência de operações mais
simples
•
Vamos considerar casos simples de projecções perspectivas e ortogonais
com plano de visualização (ou projecção) paralelos ao plano xoy
40
Projecção perspectiva com plano de
projecção z=d
P (x, y, z) - ponto original
Pp (xp, yp, zp) - ponto projectado
x
xp
Por semelhança de triângulos:
xp /d = x / z
yp /d = y / z
P (x,y,z)
Plano z=d
cop
z
d
Multiplicando por d:
yp
xp
=
d.x
z
=
x
z/d
yp
=
d.y
z
=
y
z/d
y
P
A divisão por z implica que a projecção
de objectos mais distantes seja menor
41
Projecção perspectiva com plano de
projecção z=d e centro de projecção
na origem
x
P (x, y, z) - ponto original
Pp (xp, yp, zp) - ponto projectado
Todos os valores de z são possíveis
excepto z=0
xp
cop
0
0
0
Mpers = 0
1
0
0
0
1
1/d
0
0
0
0
0
z
d
yp
A projecção pode ser representada como:
1
P (x,y,z)
Plano z=d
y
P
Pp = M pers . P
Multiplicando P por Mpers obtém-se o ponto projectado – FAZER na AULA !
42
Projecção perspectiva com plano de
projecção z=0 e centro de projecção
em z=-d
P (x, y, z) - ponto original
Pp (xp, yp, zp) - ponto projectado
Por semelhança de triângulos:
xp /d = x / (z + d)
yp /d = y / (z + d)
Multiplicando por d:
xp
=
yp
=
d.x
z+d
d.y
z+d
=
x
z / d +1
=
y
z/d+1
M’ pers =
1
0
0
0
0
1
0
0
0
0
0
1/d
0
0
0
1
Multiplicando P por Mpers obtém-se o ponto projectado – FAZER na AULA !
43
Esta formulação permite fazer d tender
para ∞, obtendo-se a matriz de
projecção paralela ortogonal num
plano de projecção em z= 0:
Como são as coordenadas do ponto projectado?
Estávamos à espera deste resultado?
44
OpenGL (Pré-3.1) – Projecção Paralela Ortogonal
• A direcção de projecção é definida pelo vector (0, 0, -1) e é paralela
ao eixo ZZ’
• O plano de projecção é o plano XOY (z=0)
• O volume de visualização (i.e., as faces do paralelepípedo) é
definido por
glOrtho( left, right, bottom, top, near, far );
[OpenGL - The Red Book]
45
OpenGL (Pré-3.1) – Projecção Paralela Ortogonal
[OpenGL - The Red Book]
•
Distâncias (com sinal) relativamente à origem:
right > left, top > bottom, e far > near (atenção !)
•
Os planos de clipping z = -near e z = -far podem não ter o mesmo sinal.
•
Canto inferior esquerdo da janela definida no plano frontal de clipping
(left, bottom, -near)
•
Canto superior direito da janela definida no plano frontal de
clipping
(right, top, -near)
46
OpenGL (Pré-3.1) – Exemplo
• Volume de visualização cúbico e de lado 2
glMatrixMode( GL_PROJECTION );
glLoadIdentity( );
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
• Quais são os valores por omissão (default)?
47
OpenGL (Pré-3.1) – Projecção Perspectiva
• O observador encontra-se na origem do sistema de
coordenadas
• A olhar na direcção do semi-eixo negativo dos ZZ’
[OpenGL - The Red Book]
48
OpenGL (Pré-3.1) – Projecção Perspectiva
• O observador encontra-se na origem do sistema de coordenadas
• A olhar na direcção do semi-eixo negativo dos ZZ’
• O volume de visualização (i.e., as faces da pirâmide truncada) é
definido por
glFrustum( left, right, bottom, top, near, far );
[OpenGL - The Red Book]
49
OpenGL (Pré-3.1) – Projecção Perspectiva
[OpenGL - The Red Book]
•
Os planos de clipping z = - near (frontal) e z = - far (à rectaguarda) são
definidos tendo em atenção:
far > near > 0
•
Canto inferior esquerdo da janela definida no plano frontal de clipping
(left, bottom, -near)
•
Canto superior direito da janela definida no plano frontal de
clipping
(right, top, -near)
50
OpenGL (Pré-3.1) – Projecção Perspectiva
• Definir um volume de visualização
glMatrixMode( GL_PROJECTION );
glLoadIdentity( );
glFrustum( -1.0, 1.0, -1.0, 1.0, 1.0, 5.0 );
• Quais são os valores por omissão (default)?
• O observador (centro de projecção) não pode estar
localizado no interior do volume de visualização.
51
OpenGL (Pré-3.1) – Funções auxiliares
[OpenGL - The Red Book]
gluPerspective( fov, aspect, near, far );
• A sua utilização pode não ser fácil…
52
OpenGL (Pré-3.1) – Funções auxiliares
[OpenGL - The Red Book]
gluLookAt( eyex, eyey,eyez,
atx, aty, atz,
upx, upy, upz);
• A sua utilização pode não ser fácil…
53
OpenGL / WebGL
• As funções auxiliares das versões anteriores já não existem !!
• É necessário:
– Posicionar o observador
• Model-View Matrix
– Seleccionar o tipo de projecção
• Projection Matrix
– Estabelecer o volume de visualização de acordo com a projeccção
• View-Volume
• Funções auxiliares !!
• O que está definido por omissão ?
54
OpenGL / WebGL - Default
• Projecção Paralela Ortogonal
– Observador a uma distância infinita da origem
– Olha na direcção do semi-eixo negativo ZZ’
• Volume de Visualização
– Cubo centrado na origem
– Arestas de comprimento 2
[Ed Angel]
55
OpenGL / WebGL
• Como visualizar primitivas que estejam fora do volume de
visualização?
– Aplicar translações apropriadas
• E se quisermos ver uma face lateral de um modelo?
– Aplicar rotações apropriadas
• Estamos a alterar a Model-View Matrix !!
– Ordem dos produtos matriciais
– Funções auxiliares para estabelecer e multiplicar as matrizes
56
OpenGL / WebGL
• E se quisermos uma projecção perspectiva ?
• Converter na projecção paralela ortogonal
– Aplicar uma transformação apropriada a todos os modelos da cena
– E ao volume de visualização perspectivo
•
É só efectuar produtos matriciais e obter a matriz global de
transformação
– CPU ou GPU
57
OpenGL / WebGL
modelview
transformation
projection
transformation
perspective
division
4D  3D
clipping
default cube
projection
3D  2D
[Ed Angel]
58
OpenGL / WebGL – Projecção Paralela Ortogonal
• Volume de Visualização para a Projecção Paralela
Ortogonal
ortho(left,right,bottom,top,near,far)
[Ed Angel]
59
OpenGL / WebGL – Projecção Paralela Ortogonal
• Volume de Visualização para a Projecção Paralela
Ortogonal
ortho(left,right,bottom,top,near,far)
[Ed Angel]
60
OpenGL / WebGL – Projecção Paralela Ortogonal
• 2 passos:
T(-(left+right)/2, -(bottom+top)/2,(near+far)/2))
S(2/(left-right),2/(top-bottom),2/(near-far))
P = ST =
2

 right  left


0


0


0

0
0
2
top  bottom
0
0
0
2
near  far
0
right  left 
right  left 

top  bottom 

top  bottom 
far  near 

far  near 
1


• Matriz de Projecção:
P = MorthST
[Ed Angel]
61
OpenGL / WebGL – Projecção Perspectiva
• Observador na origem
• Olhando na direção do semi-eixo negatvo ZZ’
frustum(left,right,bottom,top,near,far);
[Ed Angel]
62
OpenGL / WebGL – Projecção Perspectiva
• Observador na origem
• Olhando na direção do semi-eixo negatvo ZZ’
perspective(fovy,aspect,near,far);
[Ed Angel]
63
OpenGL / WebGL – Projecção Perspectiva
M = 1 0
0
0 1 0 0 


0 0 1 0 


0 0  1 0 
0
[Ed Angel]
64
OpenGL / WebGL – Generalização
N=
1
0

0

0
0
1 0 0
0 α β

0  1 0
0
0
[Ed Angel]
Convertendo para coordenadas cartesianas, o ponto (x, y, z, 1)
corresponde a
x’’ = x/z
y’’ = y/z
z’’ = -(a+b/z)
cuja projecção ortogonal é (x’’, y’’, 0), como desejado
65
OpenGL / WebGL – Generalização
Seleccionando
near  far
far  near
2near  far
b=
near  far
a=
o plano near é mapeado em z = -1
o plano far é mapeado em em z =1
e as faces laterais são mapeadas em x =  1, y =  1
Obtém-se o volume de visualização definido por omissão !!
66
OpenGL / WebGL – Generalização
distorted object
projects correctly
original clipping
volume
original object
new clipping
volume
[Ed Angel]
67
Principal bibliografia
• D. Hearn and M. P. Baker, Computer Graphics with OpenGL, 3rd
Ed., Addison-Wesley, 2004
• E. Angel and D. Shreiner, Introduction to Computer Graphics, 6th
Ed., Pearson Education, 2012
• J. Foley et al., Introduction to Computer Graphics, Addison-Wesley,
1993
• D. Rogers and J. Adams, Mathematical Elements for Computer
Graphics, 2nd Ed., McGraw-Hill, 1990
68
Download

Visualização 3D - Universidade de Aveiro › SWEET