CV 06 Visualização 3D - sweet.ua.ptsweet.ua.pt/jmadeira/CV/CV_06_Visualização_3D_BSS_JM.pdf ·...
Transcript of CV 06 Visualização 3D - sweet.ua.ptsweet.ua.pt/jmadeira/CV/CV_06_Visualização_3D_BSS_JM.pdf ·...
Visualização 3D
Universidade de Aveiro
Departamento de Electrónica,
Telecomunicações e Informática
Computação Visual Beatriz Sousa Santos, J. Madeira
2
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.)
3
Transformações de coordenadas no Pipeline de
Visualização 3D
É ainda necessário identificar as superfícies
visíveis a aplicar os processos de surface
rendering
Passos necessários para transformar coordenadas da cena em coordenadas
do dispositivo:1º passo - definir a transformação
de visualização
Coordenadas
de visualização
Coordenadas
do mundo
2º passo - definir a transformação
de projecção
4
• 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
5
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
6
• 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
7
• 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”
• 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 Direcção da rotação positiva
x y para z
y z para x
z x para y
Sistema de
“mão esquerda”
(z aumenta para
trás do ecrã)
8
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
9
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
10
• 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)
Coordenadas
do mundoCoordenadas
de visualização
Matriz de transformação
11
Pipeline de Visualização 3D:
2º passo - definir a
transformação de projecção
Coordenadas
de visualização
?
É necessário definir o volume
de clipping
12
• 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
Projecção
13
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 !
15
Projecções
Projecções geométricas
planas
Paralelas Perspectivas
Cavaleira
Oblíquas
Com 3 pontos
de fuga
Com 1 ponto
de fuga
Com 2 pontos
de fuga
de Gabinete
Outras
Ortogonais
Outras
Isométricas
Axonométricas
Planta
Vista
frontal
Vista
lateral
16
Projecções paralelas e perspectivas
Nas projecções paralelas as rectas
projectantes são paralelas, i.e.,
convergem num ponto a uma
distância infinita.
Plano de
visualização
Nas projecções perspectivas
as rectas projectantes
convergem no centro de
projecção.
Plano de
visualização
Ponto de
convergência
(Centro de projecção)
17
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 gran-
deza 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
18
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)
21
• 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
Projecções ortogonais axonométricas
Projecção isométrica do cubo:
são mostradas várias faces e as três
arestas são representadas com a
mesma grandeza
Plano de
visualização
29
Janela de clipping e volume de projecção ortogonal
View plane• Na fotografia, é o tipo de lente
que determina que “quantidade”
da cena é transferida para o filme
• 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
30
Volume de visualização e clipping para projecções ortogonais
Volume de visualização finito correspondente a uma projecção ortogonal
com planos de clipping à frente e atrás
Janela de
clipping
Plano de clipping
Plano de
clipping
32
Projecções paralelas oblíquas
• 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:
– são fáceis de produzir
– dão uma boa ideia do objecto
Plano de visualização
Plano de visualização
Projectores
Projecção oblíqua do cubo:
são mostradas várias faces
33
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º
34
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º
38
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
40
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
44
Perspectivas com um e dois pontos de fuga (frontal e angular)
Um ponto de fuga
(perspectiva frontal)
Dois pontos de fuga
(perspectiva angular)
45
Perspectiva na arte
Considerada a primeira
pintura com perspectiva
A Trindade e a Virgem
Mastaccio, 1427
47
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
53
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
54
Projecção perspectiva com plano de projecção z=d
P (x, y, z) - ponto original
Pp (xp, yp, zp) - ponto projectado
Por semelhança de triângulos:
xp /d = x / z yp /d = y / z
Multiplicando por d:
xp = d . x = x
z z / d
yp = d . y = y
z z / d
A divisão por z implica que a projecção
de objectos mais distantes seja menor
x
z
y
cop d
P (x,y,z)
P
Plano z=d
yp
xp
55
Projecção perspectiva com plano de
projecção z=d e centro de projecção
na origem
P (x, y, z) - ponto original
Pp (xp, yp, zp) - ponto projectado
Todos os valores de z são possíveis
excepto z=0
A projecção pode ser representada como:
1 0 0 0
Mpers = 0 1 0 0
0 0 1 0
0 0 1/d 0
x
z
y
cop d
P (x,y,z)
P
Plano z=d
yp
xp
Multiplicando P por Mpers obtém-se o ponto projectado – FAZER na AULA !
Pp = M pers . P
56
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 = d . x = x
z + d z / d +1
yp = d . y = y
z + d z / d + 1
1 0 0 0
M’ pers = 0 1 0 0
0 0 0 0
0 0 1/d 1
Multiplicando P por Mpers obtém-se o ponto projectado – FAZER na AULA !
57
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?
58
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]
59
OpenGL (Pré-3.1) – Projecção Paralela Ortogonal
• 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)
[OpenGL - The Red Book]
60
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)?
61
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]
62
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]
63
OpenGL (Pré-3.1) – Projecção Perspectiva
• 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)
[OpenGL - The Red Book]
64
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.
65
OpenGL (Pré-3.1) – Funções auxiliares
gluPerspective( fov, aspect, near, far );
• A sua utilização pode não ser fácil…
[OpenGL - The Red Book]
66
OpenGL (Pré-3.1) – Funções auxiliares
gluLookAt( eyex, eyey,eyez, atx, aty, atz,upx, upy, upz);
• A sua utilização pode não ser fácil…
[OpenGL - The Red Book]
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 ?
67
OpenGL / WebGL
68
modelview
transformation
projection
transformation
perspective
division
clipping projection
4D 3D
default cube3D 2D
[Ed Angel]
• 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
OpenGL / WebGL - Default
69
[Ed Angel]
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
70
OpenGL / WebGL – Projecção Paralela Ortogonal
• Volume de Visualização para a Projecção Paralela
Ortogonal
ortho(left,right,bottom,top,near,far)
74
[Ed Angel]
OpenGL / WebGL – Projecção Paralela Ortogonal
• Volume de Visualização para a Projecção Paralela
Ortogonal
ortho(left,right,bottom,top,near,far)
75
[Ed Angel]
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))
• Matriz de Projecção:
76
[Ed Angel]
P = ST =
1000
200
02
0
002
nearfar
nearfar
farnear
bottomtop
bottomtop
bottomtop
leftright
leftright
leftright
P = MorthST
• Observador na origem
• Olhando na direção do semi-eixo negatvo ZZ’
frustum(left,right,bottom,top,near,far);
OpenGL / WebGL – Projecção Perspectiva
77
[Ed Angel]
OpenGL / WebGL – Projecção Perspectiva
78
[Ed Angel]
• Observador na origem
• Olhando na direção do semi-eixo negatvo ZZ’
perspective(fovy,aspect,near,far);
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
80
Convertendo para coordenadas cartesianas, o ponto (x, y, z, 1)
corresponde a
OpenGL / WebGL – Generalização
82
[Ed Angel]
0100
βα00
0010
0001
N =
x’’ = x/z
y’’ = y/z
z’’ = -(a+b/z)
cuja projecção ortogonal é (x’’, y’’, 0), como desejado
Seleccionando
a =
b =
nearfar
farnear
farnear
farnear2
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 !!
OpenGL / WebGL – Generalização
83
OpenGL / WebGL – Generalização
84
original clippingvolume original object new clipping
volume
distorted object
projects correctly
[Ed Angel]
88
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