prof. fernando v. paulovich ...paulovic/aulas/cg/scc0250-slides-09-viewing... · linhas paralelas...
TRANSCRIPT
Viewing 3D
Viewing 3D
SCC0250 - Computação Grá�ca
Prof. Fernando V. Paulovichhttp://www.icmc.usp.br/~paulovic
Instituto de Ciências Matemáticas e de Computação (ICMC)Universidade de São Paulo (USP)
18 de maio de 2012
1 / 114
Viewing 3D
Introdução
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
2 / 114
Viewing 3D
Introdução
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
3 / 114
Viewing 3D
Introdução
Visão Geral
Viewing Pipeline 3D
As funções de viewing processam a descrição de objetos por meio deum conjunto de procedimentos a �m de projetar uma visãoespecí�ca desses na superfície do dispositivo de saída
Alguns desses procedimentos são similares aos do Viewing Pipeline2D
Rotinas de recorte
Mas outros são especí�cos do 3DRotinas de projeçãoIdenti�cação de partes visíveis da cenaEfeitos de luz
4 / 114
Viewing 3D
Introdução
Visualizando uma Cena 3D
Para se obter uma visão de uma cena 3D descrita por coordenadasdo mundo, primeiro é necessário de�nir um sistema de referênciapara os parâmetros de visão (ou câmera)
De�ne a posição e orientação do plano de visão (ou plano de
projeção) � plano do �lme da câmera
5 / 114
Viewing 3D
Introdução
Projeções
É possível escolher diferentes métodos para projetar uma cena noplano de visão
Projeção Paralela: projeta os pontos de um objeto ao longo delinhas paralelas � usado para desenhos arquitetônicos e de engenhariaProjeção Perspectiva: projeta os pontos de um objeto ao longo decaminhos convergentes � cenas mais realísticas (objetos longe daposição de visão são mostrados menores)
(a) Projeção Paralela (b) Projeção Perspectiva
6 / 114
Viewing 3D
Introdução
Depth Cueing (Profundidade)
Com raras exceções, informação de profundidade é importante paraa composição de uma cena 3D: identi�car a parte da frente e de trásdos objetos
Figura: Problemas de ambiguidade pela falta de informação de profundidadeem (a), que pode ser interpretada como (b) ou (c)
7 / 114
Viewing 3D
Introdução
Depth Cueing (Profundidade)
Depth Cueing
Forma simples de indicar profundidade de objetos aramados(wire-frame) variando o brilho das linhas
Linhas mais próximas da posição de visão são mais brilhantes
8 / 114
Viewing 3D
Introdução
Identi�cando Linhas e Superfícies Visíveis
Cenas Wire-Frame
Existem outras formas de tornar visualizações de wire-frame maisrealísticas
Colorir as linhas visíveis de forma diferente das não-visíveisMostrar as linhas não visíveis como linhas pontilhadasRemover as linhas não visíveis � também remove informação sobre aforma do objeto
Cenas Realísticas
Para cenas realísticas, as partes não visíveis de um objeto sãocompletamente eliminadas, e somente as visíveis são mostradas
Os pixels da tela terão informação apenas das cores das superfíciesda frente
9 / 114
Viewing 3D
Introdução
Rendering de Superfície
Efeitos realísticos são alcançados usando efeitos de iluminaçãoDe�ne-se a luz ambienteEspecí�ca-se a localização e cor das diferentes fontes de luz
As características dos materiais são também especi�cadasTransparente, opaco, rugoso, etc.
10 / 114
Viewing 3D
Viewing Pipeline 3D
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
11 / 114
Viewing 3D
Viewing Pipeline 3D
Viewing Pipeline 3D
O processo para se criar uma imagem de computação grá�ca de umacena 3D é parecida com se tirar uma foto
É necessário escolher a posição de visão, onde será posta a câmeraÉ preciso de�nir a orientação da câmera
Como apontar a câmera a partir da posição de visãoComo a câmera vai estar rotacionada, de�nindo a posição up
12 / 114
Viewing 3D
Viewing Pipeline 3D
Viewing Pipeline 3D
Algumas das operações do Viewing Pipeline 3D são semelhantes ao2D
Uma viewport 2D é usada para posicionar a visão projetada nodispositivo de saídaUma janela de recorte 2D é usada para selecionar uma visão queserá mapeada na viewport
Uma janela de saída é de�nida em coordenadas da tela
Porém, outras são diferentesA janela de recorte é posicionada sobre um plano de visão, e a cena érecortada considerando um volume no espaço (volume de recorte)usando planos de recorte
13 / 114
Viewing 3D
Viewing Pipeline 3D
Viewing Pipeline 3D
A posição de visão, o plano de visão, a janela de recorte e osplanos de recorte são especi�cados dentro do sistema decoordenadas de mundo
14 / 114
Viewing 3D
Parâmetros de Coordenadas de Visão 3D
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
15 / 114
Viewing 3D
Parâmetros de Coordenadas de Visão 3D
Parâmetros de Coordenadas de Visão 3D
Para estabelecer um sistema de coordenadas de visão 3D é precisode�nir
A origem do sistema P0 = (x0, y0, z0), chamada de ponto de visão
(também referido como posição do olho ou da câmera)O vetor view-up V, que de�ne a direção yviewUma segunda direção para um dos eixos coordenados restantes,normalmente o zview, com a direção de visão ao longo desse eixo
16 / 114
Viewing 3D
Parâmetros de Coordenadas de Visão 3D
Vetor Normal ao Plano de Visão
Como a direção de visão em geral é de�nida sobre o eixo zview, oplano de projeção é normalmente assumido ser perpendicular a esseeixo
Assim, a orientação do plano de projeção e a direção positiva do eixozview podem ser de�nidas com um vetor normal N ao plano de
projeção
17 / 114
Viewing 3D
Parâmetros de Coordenadas de Visão 3D
Vetor Normal ao Plano de Visão
Uma valor escalar é usado para de�nir a posição do plano deprojeção em alguma coordenada zvp ao longo do eixo zview
Especi�ca a distância da origem da visão ao longo da direção devisão, normalmente na direção negativa de zviewPortanto, o plano de projeção é sempre paralelo ao plano xviewyview
18 / 114
Viewing 3D
Parâmetros de Coordenadas de Visão 3D
Vetor Normal ao Plano de Visão
O vetor normal N pode ser especi�cado de várias formasA direção de N pode ser de�nida ao longo da linha partindo de umponto de referência Pref até a origem de visão P0 (o contráriotambém é válido)
Nessa caso, esse ponto de referência é denominado look-at point,com a direção de visão oposta a de N
19 / 114
Viewing 3D
Parâmetros de Coordenadas de Visão 3D
O Vetor View-Up
Uma vez estabelecida a direção normal ao plano de projeção N,podemos estabelecer o vetor view-up V que dá a direção do eixoyviewUsualmente V é de�nido selecionando uma posição relativa a origemdo sistema de coordenadas do mundo
20 / 114
Viewing 3D
Parâmetros de Coordenadas de Visão 3D
O Vetor View-Up
V pode ser de�nido em qualquer direção, desde que não paralela aN
Uma forma conveniente seria de�nir uma direção paralela ao eixo yw,V = (0, 1, 0)Se esse não for exatamente perpendicular a N as rotinas de visãopodem ajustá-lo projetando-o em um plano perpendicular a N
Figura: Ajuste do vetor view-up V para torná-lo perpendicular a N
21 / 114
Viewing 3D
Parâmetros de Coordenadas de Visão 3D
Sistema de Coordenadas de Visão uvn
Sistema de Coordenadas de Visão uvn
Como a normal N de�ne a orientação zview, e o vetor view-up V éusado para de�nir yview, só é necessário de�nir a direção positiva dexview
Essa direção é representada pelo vetor U, calculada como o produtovetorial de N e VO produto vetorial de N e U também pode ser usado para ajustar ovalor de V ao longo do eixo yview
22 / 114
Viewing 3D
Parâmetros de Coordenadas de Visão 3D
Sistema de Coordenadas de Visão uvn
Para se obter o sistema de coordenadas uvn fazemos
n =N
|N|= (nx, ny, nz)
u =V × n
|V × n|= (ux, uy, uz)
v = n× u = (vx, vy, vz)
23 / 114
Viewing 3D
Parâmetros de Coordenadas de Visão 3D
Gerando Efeitos de Visão 3D
Variando-se os parâmetros de visão é possível obter diferentes efeitos
De uma posição de visão �xa é possível mudar N para mostrarobjetos em posições ao redor da origemVariar N para criar uma cena composta de múltiplas visões de umaposição �xa da câmera
Quando alterar N não esqueça de mudar os outros eixos para semanter o sistema orientado pela mão direita
24 / 114
Viewing 3D
Parâmetros de Coordenadas de Visão 3D
Gerando Efeitos de Visão 3D
Efeitos de mover a câmera (pam) podem ser obtidos �xando N emodi�cando o ponto de visãoPara mostrar diferentes visões de uma objeto (visão lateral, frontal,etc.) podemos mover o ponto de visão ao redor do objeto
(a) Efeito de pam (b) Visões diferentes
25 / 114
Viewing 3D
Transformação do Sistema de Coordenadas de Mundo para o de Visão
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
26 / 114
Viewing 3D
Transformação do Sistema de Coordenadas de Mundo para o de Visão
Transformação do Sistema de Coordenadas de Mundopara o de Visão
No Viewing Pipeline 3D, o primeiro passo a ser executado após acena ser construída é transferir a descrição dos objetos ao sistema decoordenadas de visão
Essa conversão é equivalente a sobrepor o sistema de referência devisão sobre o sistema de referência de mundo
Esse mapeamento pode ser feito1 Transladando a origem do sistema de coordenadas de visão para a
origem do sistema de coordenadas de mundo2 Rotacionando para alinhar os eixos xview, yview e zview com os eixos
de mundo xw, yw e zw
27 / 114
Viewing 3D
Transformação do Sistema de Coordenadas de Mundo para o de Visão
Transformação do Sistema de Coordenadas de Mundopara o de Visão
Se a origem do sistema de visão for P0 = (x0, y0, z0) a matriz detranslação será
T =
1 0 0 −x00 1 0 −y00 0 1 −z00 0 0 1
28 / 114
Viewing 3D
Transformação do Sistema de Coordenadas de Mundo para o de Visão
Transformação do Sistema de Coordenadas de Mundopara o de Visão
A matriz de rotação pode ser obtida direto dos vetoresu = (ux, uy, uz), v = vx, vy, vz e n = (nx, ny, nz)
R =
ux uy uz 0vx vy vz 0nx ny nz 00 0 0 1
29 / 114
Viewing 3D
Transformação do Sistema de Coordenadas de Mundo para o de Visão
Transformação do Sistema de Coordenadas de Mundopara o de Visão
A matriz de transformação é portanto
MWC,V C = R ·T
=
ux uy uz −u ·P0
vx vy vz −v ·P0
nx ny nz −n ·P0
0 0 0 1
30 / 114
Viewing 3D
Transformações de Projeção
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
31 / 114
Viewing 3D
Transformações de Projeção
Transformações de Projeção
Após a transformação para a coordenadas de visão, o próximo passodo Viewing Pipeline 3D é a projeção no plano de projeção
Em geral os pacotes grá�cos suportamProjeção Paralela: as coordenadas são transferidas para o plano deprojeção ao longo de linhas paralelasProjeção Perspectiva: as coordenadas são transferidas para o planode projeção ao longo de linhas que convergem a um ponto
(c) Projeção Paralela (d) Projeção Perspectiva
32 / 114
Viewing 3D
Transformações de Projeção
Projeções Ortogonais
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
33 / 114
Viewing 3D
Transformações de Projeção
Projeções Ortogonais
Projeções Ortogonais
Projeção Ortogonal (ou Ortográ�ca)
Transformação da descrição dos objetos a um plano de projeção aolongo de linhas paralelas ao vetor normal N
Frequentemente usada para produzir a visão frontal, lateral esuperior de um objetoPreserva tamanhos e ângulos: útil para desenhos arquitetônicos e deengenharia
34 / 114
Viewing 3D
Transformações de Projeção
Projeções Ortogonais
Projeções Ortogonais Axonométricas e Isométricas
Projeção Ortogonal Axonométrica
Projeção ortogonal que mostra mais de uma face de um objeto
A projeção axonométrica mais comum é a isométrica
O plano de projeção é alinhado de forma a intersectar cada eixocoordenado no qual o objeto é de�nido a mesma distância da origem
Figura: Essa projeção é obtida alinhando o vetor N com a diagonal do cubo
35 / 114
Viewing 3D
Transformações de Projeção
Projeções Ortogonais
Coordenadas de Projeções Ortogonais
Com a direção de projeção paralela a zview, as equações para atransformação de projeção ortogonal de um posição (x, y, z) são
xp = x
yp = y
O valor de z é armazenado para uso futuro nos procedimentos paradeterminar visibilidade
36 / 114
Viewing 3D
Transformações de Projeção
Projeções Ortogonais
Janela de Recorte e Volume de Projeção Ortogonal
Para se determinar o quanto de uma cena 3D será transferida para oplano de projeção, uma Janela de Recorte é utilizada
É necessário determinar os limites dessa janela sobre o plano deprojeção com as arestas paralelas aos eixos xview e yview
37 / 114
Viewing 3D
Transformações de Projeção
Projeções Ortogonais
Janela de Recorte e Volume de Projeção Ortogonal
As arestas de Janela de Recorte especi�cam os limites x e y da parteda cena que será mostrada, formando o volume de visão deprojeção ortogonal
38 / 114
Viewing 3D
Transformações de Projeção
Projeções Ortogonais
Janela de Recorte e Volume de Projeção Ortogonal
Para se limitar a extensão desse volume na direção zview dois planosde fronteira, chamados planos de recorte near/far, sãoconsiderados paralelos aos planos de visão
Permite eliminar objetos que estão na frente ou atrás de uma parteda cenaCom a direção de visão ao longo do eixo negativo zview, temoszfar < znear
39 / 114
Viewing 3D
Transformações de Projeção
Projeções Ortogonais
Transformação de Normalização para Projeção Ortogonal
Como qualquer posição (x, y, z) em uma projeção ortogonal émapeada para (x, y), as coordenadas dentro do volume de visão sãoas coordenadas de projeção, assim essas podem ser mapeadas paraum volume de visão normalizado sem precisar ser reprojetadas
Figura: Transformação de normalização em um sistema de referência dado pelamão esquerda (normalmente o sistema da tela)
40 / 114
Viewing 3D
Transformações de Projeção
Projeções Ortogonais
Transformação de Normalização para Projeção Ortogonal
Ess transformação de normalização é semelhante a obtida em 2D,com a adição dos valores da coordenada z sendo normalizados dointervalo znear a zfar para −1 a 1
Mortho,norm =2
xwmax−xwmin 0 0 −xwmax+xwminxwmax−xwmin0 2
ywmax−ywmin 0 − ywmax+ywminywmax−ywmin0 0 −2
znear−zfarznear+zfarznear−zfar
0 0 0 1
41 / 114
Viewing 3D
Transformações de Projeção
Projeções Ortogonais
Transformação de Normalização para Projeção Ortogonal
A multiplicação dessa matriz pela matriz que transforma ascoordenadas do mundo em coordenadas de visão produz atransformação completa para se obter as coordenadas normalizadasda projeção ortogonal
Mortho,norm ·MWC,V C
Outras operações, como recorte, identi�cação de superfícies visíveis,etc. podem ser executadas de forma mais e�ciente
42 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
43 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Projeções Perspectivas
Para conseguir maior realismo que o obtido nas projeções paralelastemos que considerar que os raios de luz re�etidos na cena seguemcaminhos convergentesIsso pode ser aproximado projetando objetos ao plano de visão aolongo de caminhos convergentes a uma posição chamada ponto dereferência de projeção (ou centro de projeção)
44 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Transformação de Coordenadas de Projeção Perspectiva
Algumas bibliotecas grá�cas permitem que se escolha o ponto dereferência de projeção (xprp, yprp, zprp)
45 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Transformação de Coordenadas de Projeção Perspectiva
Considerando que a projeção do ponto (x, y, z) intersecte o plano deprojeção na posição (xp, yp, zvp) podemos descrever qualquer pontoao longo desse linha de projeção como
x′ = x+ u(xprp − x)
y′ = y + u(yprp − y)
z′ = z + u(zprp − z)
0 ≤ u ≤ 1
No plano de visão z′ = zvp, então podemos encontrar u
u =zvp − zzprp − z
46 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Transformação de Coordenadas de Projeção Perspectiva
Substituindo esse valor de u para as equações de x′ e y′ obtemos asequações de projeção perspectiva
xp = x′ = x
(zprp − zvpzprp − z
)+ xprp
(zvp − zzprp − z
)
yp = y′ = y
(zprp − zvpzprp − z
)+ yprp
(zvp − zzprp − z
)
47 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Casos Especiais das Equações de Projeção Perspectiva
Os parâmetros de projeção podem ser restringidos para facilitar oscálculos
Se o centro projeção estiver sobre o eixo zview, entãoxprp = yprp = 0
xp = x
(zprp − zvpzprp − z
), yp = y
(zprp − zvpzprp − z
)
Se o centro de projeção for �xado na origem, então é(xprp, yprp, zprp) = (0, 0, 0)
xp = x(zvpz
), yp = y
(zvpz
)
48 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Casos Especiais das Equações de Projeção Perspectiva
Os parâmetros de projeção podem ser restringidos para facilitar oscálculos
Se o plano de projeção for o plano uv e o centro de projeção estiversobre o eixo zview, então xprp = yprp = zvp = 0
xp = x
(zprp
zprp − z
), yp = y
(zprp
zprp − z
)
49 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Casos Especiais das Equações de Projeção Perspectiva
Em geral o plano de projeção está entre o centro de projeção e acena, mas outras posições são possíveis (menos sobre o plano deprojeção)
Figura: Os objetos são invertido se o ponto de referência está entre o plano devisão e a cena.
50 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Casos Especiais das Equações de Projeção Perspectiva
Os efeitos de perspectiva também dependem da distância entre ocentro de projeção e o plano de visão
Figura: Se o centro de projeção está próximo ao plano de projeção, objetosmais próximos ao plano aparecerão maiores do que os distantes
51 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Pontos de Fuga para Projeções Perspectivas
Na projeção perspectivalinhas paralelas entre si e ao plano de projeção são projetadas comolinhas paralelaslinhas paralelas que não são paralelas ao plano de projeção sãoprojetadas em linhas convergentes
O ponto que parece que as linhas convergem é chamado ponto defuga
52 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Pontos de Fuga para Projeções Perspectivas
Conjuntos de linhas que são paralelas a algum dos eixos principais deum objeto levam a composição dos pontos de fuga principais
É possível controlar o número desses pontos de fuga (um, dois outrês) por meio da orientação do plano de projeçãoO número de pontos de fuga principais é igual a quantidade de eixosprincipais que intersectam o plano de projeção
Figura: Em (b) o plano de projeção é paralelo ao plano xy (só intersecta z), eem (c) os eixos x e z são intersectados.
53 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Volume de Projeção Perspectiva
Em uma projeção perspectiva, o volume de visão de�nido é umapirâmide in�nita com seu ápice no centro de projeção, normalmentechamada de pirâmide de visão
Objetos fora dessa pirâmide são eliminados pelas rotinas de recorte
54 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Volume de Projeção Perspectiva
Adicionando os planos de recorte near/far perpendiculares ao eixozview essa pirâmide é truncada resultando em um tronco depirâmide (frustum)
55 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Matriz de Transformação de Projeção Perspectiva
Não é possível a partir das equações derivadas anteriormente de�niruma matriz de transformação perspectiva � os denominadores doscoe�cientes de x e y são função de z
xp = x
(zprp − zvpzprp − z
)+ xprp
(zvp − zzprp − z
)
yp = y
(zprp − zvpzprp − z
)+ yprp
(zvp − zzprp − z
)
Essa limitação pode ser superada usando coordenadas homogêneas
xp =xhh, yp =
yhh
Onde o parâmetro homogêneo é
h = zprp − z
56 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Matriz de Transformação de Projeção Perspectiva
Os numeradores permanecem os mesmos
xp = x(zprp − zvp) + xprp(zvp − z)
yp = y(zprp − zvp) + yprp(zvp − z)
E o fator homogêneo é
h = zprp − z
57 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Matriz de Transformação de Projeção Perspectiva
Então pode-se de�nir uma matriz de transformação que converteuma posição espacial em coordenadas homogêneas
Inicialmente calcula-se as coordenadas homogêneasPh = (xh, yh, zh, h) de um ponto P = (x, y, z, 1) usando a matrizde projeção perspectiva
Ph = Mpers ·P
Então essas são divididas por h para se obter as coordenadas dasposições transformadas
58 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Matriz de Transformação de Projeção Perspectiva
De�nir a matriz para encontrar xh e yh é de forma direta, masinformação de profundidade deve ser introduzida para o parâmetrohomogêneo h não distorcer z
Isso pode ser feito de�nindo os valores para a transformação de z deforma a normalizar as coordenadas zp da projeção
Isso pode ser feito de várias formas, uma delas
Mpers =
zprp − zvp 0 −xprp xprpzprp
0 zprp − zvp −yprp yprpzprp0 0 sz tz0 0 −1 zprp
Onde sz e tz são fatores de escala e translação para a normalizaçãodas coordenadas z
59 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Frustum Simétrico de Projeção Perspectiva
A linha do centro de projeção através do centro da janela de recortee da volume de visão é a linha central do frustum de projeçãoperspectiva
Se essa for perpendicular ao plano de visão temos um frustum
simétrico
60 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Frustum Simétrico de Projeção Perspectiva
Como a linha central do frustum intersecta o plano em(xprp, yprp, zvp) é possível expressar os cantos da janela de recorteem termos das dimensões da janela
xwmin = xprp −width
2, xwmax = xprp +
width
2
ywmin = yprp −height
2, ywmax = yprp +
height
2
Assim é possível especi�car uma projeção perspectiva simétricausando a largura e altura da janela de recorte ao invés dascoordenadas da janela
61 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Frustum Simétrico de Projeção Perspectiva
Uma projeção perspectiva pode também ser aproximadaconsiderando o cone de visão, de�nido pelo ângulo do campo devisão, de uma câmera
Grandes ângulos de campo de visão correspondem a lentesgrandes-angulares
De forma geral, o ângulo do campo de visão é de�nido entre o planode recorte superior e o inferior do frustum
62 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Frustum Simétrico de Projeção Perspectiva
Dado um ponto de referência e a posição do plano de visão, oângulo do campo de visão determina a altura da janela de recorte
tan
(θ
2
)=
height/2
zprp − zvp
63 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Frustum Simétrico de Projeção Perspectiva
Para de�nir a largura é necessário considerar um parâmetro adicionalque poderia ser a largura da janela ou a razão de aspectoaspect = (width/height)
Assim podemos substituir os elementos (zprp − zvp) da diagonal damatriz Mpers por
height = 2(zprp − zvp) tan(θ
2
)zprp − zvp =
height
2cot
(θ
2
)
Ou por
zprp − zvp =width · cot(θ/2)
2 · aspect64 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Frustum Simétrico de Projeção Perspectiva
Assim temos
Mpers =
height
2 cot(θ2
)0 −xprp xprpzprp
0 height2 cot
(θ2
)−yprp yprpzprp
0 0 sz tz0 0 −1 zprp
Ou
Mpers =
width·cot(θ/2)
2·aspect 0 −xprp xprpzprp
0 width·cot(θ/2)2·aspect −yprp yprpzprp
0 0 sz tz0 0 −1 zprp
65 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Frustum Simétrico de Projeção Perspectiva
Diminuir o ângulo do campo de visão diminui a janela de recorteMover o ponto de projeção para longe do plano de visãoZoom-in de uma pequena região da cena
Aumentar o ângulo do campo de visão aumenta a janela de recorteMover o ponto de projeção para próximo do plano de visãoZoom-out da cena
66 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Frustum Simétrico de Projeção Perspectiva
Observação Importante
Para um frustum simétrico, a transformação perspectiva mapeialocalizações dentro do frustum a coordenadas de projeção ortogonaisdentro de um paralelepípedo retangular
67 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Frustum Oblíquo de Projeção Perspectiva
Se a linha central do volume de visão não é perpendicular ao planode visão, temos um frustum oblíquo
Primeiro transformar esse em um frustum simétrico
Maiores detalhes podem ser encontrados no livro texto
68 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Transformação de Projeção Perspectiva Normalizada
O último passo da projeção perspectiva é mapear o paralelepípedoobtido para um volume de visão normalizado
É aplicado o mesmo procedimento da projeção paralela
69 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Transformação de Projeção Perspectiva Normalizada
Os parâmetros para normalização da coordenada z já estão incluídosna matriz de projeção perspectiva, mas esses ainda precisam serde�nidos
Também é necessário os parâmetros para a normalização dascoordenadas x e y
Não precisa de translação porque a linha central do paralelepípedoretangular é zview, só precisa uma escala com relação a origem
Mxyscale =
sx 0 0 00 sy 0 00 0 1 00 0 0 1
70 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Transformação de Projeção Perspectiva Normalizada
Concatenando essa matriz de escala com a matriz de projeçãoperspectiva temos
Mnormpers = Mxyscale ·Mobliquepers
=
−znear · sx 0 sx
xwmin+xwmax2 0
0 −znear · sy syywmin+ywmax
2 00 0 sz tz0 0 −1 0
71 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Transformação de Projeção Perspectiva Normalizada
Desta transformação obtemos as coordenadas homegêneasxhyhzhh
= Mnormpers ·
xyz1
Que resulta na coordenadas de projeção
xp =xhh
=−znear · sx · x+ sx(xwmin + xwmax)/2
−z
yp =yhh
=−znear · sy · y + sy(ywmin + ywmax)/2
−z
zp =zhh
=sz · z + tz−z
72 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Transformação de Projeção Perspectiva Normalizada
Para normalizar essa projeção queremos que(xp, yp, zp) = (−1,−1,−1) quando as coordenadas de entradaforem (xwmin, ywmin, znear) e (xp, yp, zp) = (1, 1, 1) quando essasforem (xwmax, ywmax, zfar)
Assim, resolvendo as equações anteriores com essas restriçõesobtemos
sx =2
xwmax − xwmin, sy =
2
ywmax − ywmin
sz =znear + zfarznear − zfar
, tz =2 · znear · zfarznear − zfar
73 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Transformação de Projeção Perspectiva Normalizada
Resultando na seguinte matriz de projeção perspectiva normalizada
Mnormpers =−2·znear
xwmax−xwmin 0 xwmax+xwminxwmax−xwmin 0
0 −2·znearywmax−ywmin
ywmax+ywminywmax−ywmin 0
0 0znear+zfarznear−zfar − 2·znear·zfar
znear−zfar0 0 −1 0
74 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Transformação de Projeção Perspectiva Normalizada
Se o volume de projeção perspectiva for de�nido como simétrico, épossível expressar os elementos da projeção perspectiva normalizadaem termos do ângulo do campo de visão e das dimensões da janelade recorte
Com o ponto de referência da projeção na origem e o plano de visãosobre o plano de recorte near, temos
Mnormsympers =cot( θ2 )
aspect 0 0 0
0 cot( θ2 ) 0 0
0 0znear+zfarznear−zfar − 2·znear·zfar
znear−zfar0 0 −1 0
75 / 114
Viewing 3D
Transformações de Projeção
Projeções Perspectivas
Transformação de Projeção Perspectiva Normalizada
A matriz completa de transformação das coordenadas do mundopara projeção perspectiva normalizada é a composição
Mnormviewvol = Mnormpers ·R ·T = Mnormpers ·MWC,V C
Após essa matriz ser aplicada, as rotinas de recorte podem serexecutadas
76 / 114
Viewing 3D
Transformações de Projeção
Transformação de Viewport e Coordenadas de Tela 3D
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
77 / 114
Viewing 3D
Transformações de Projeção
Transformação de Viewport e Coordenadas de Tela 3D
Transformação de Viewport e Coordenadas de Tela 3D
Após o conteúdo do volume de visão ter sido de�nido, esse pode sertransferido para coordenadas da tela
Esse é um processo semelhante ao 2D, porém informação deprofundidade é preservada para teste de visibilidade e rendering
A variável z é normalizada entre 0 e 1, sendo que z = 0 temos aaltura da tela
Mnormviewvol,3Dscreen =xvmax−xvmin
2 0 0 xvmax+xvmin2
0 yvmax−yvmin2 0 yvmax+yvmin
20 0 1/2 1/20 0 0 1
78 / 114
Viewing 3D
Transformações de Projeção
Transformação de Viewport e Coordenadas de Tela 3D
Transformação de Viewport e Coordenadas de Tela 3D
Nas coordenadas normalizadas, znorm = −1 é mapeada para acoordenada na tela zscreen = 0
Viewport é de�nida como (xvmin, yvmin, 0) e (xvmax, yvmax, 1)
As posições x e y são enviadas para o frame bu�er (informação decor para os pontos na tela)
Os valores de z são enviados para o depth bu�er para serem usadosem rotinas para determinação de cor e visibilidade
79 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
80 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Funções OpenGL para Viewing 3D
A biblioteca OpenGL inclui funções paraProjeção ortogonalProjeção perspectiva oblíqua (e simétrica)Transformação de viewport
A biblioteca OpenGL Utility (GLU) inclui funções paraEspeci�car os parâmetros de visãoDe�nir a transformação de projeção perspectiva simétrica
81 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Função de Projeção Ortogonal OpenGL
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
82 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Função de Projeção Ortogonal OpenGL
Função de Projeção Ortogonal OpenGL
Para se de�nir as matrizes de projeção é necessário especi�car que seestá trabalhando com a matriz PROJECTION
1 gl.glMatrixMode(GL.GL_PROJECTION);
Para se de�nir uma projeção ortogonal, a seguinte função é chamada
1 gl.glOrtho(GLdouble xwmin, GLdouble xwmax,2 GLdouble ywmin, GLdouble ywmax,3 GLdouble dnear, GLdouble dfar);
Os 4 primeiros parâmetros de�nem as coordenadas da janela derecorte e os 2 últimos as distâncias para os planos de recorte near/far
83 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Função de Projeção Ortogonal OpenGL
Função de Projeção Ortogonal OpenGL
O plano de projeção é sempre coincidente com o plano de recortenearOs parâmetros dnear e dfar denotam distâncias na direção negativade zview
Por exemplo, se dfar = 55.0, o plano de recorte far estará naposição zfar = −55.0Quaisquer valores podem ser atribuídos, desde que dnear < dfar
Por padrão, a OpenGL usa os seguintes valores para essa função
1 gl.glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
84 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Função de Projeção Ortogonal OpenGL
Função de Projeção Ortogonal OpenGL
1
2 public class Renderer implements GLEventListener {3
4 public static void main(String[] args) {5 //acelera o rendering6 GLCapabilities caps = new GLCapabilities();7 caps.setDoubleBuffered(true);8 caps.setHardwareAccelerated(true);9
10 //cria o painel e adiciona um ouvinte GLEventListener11 GLCanvas canvas = new GLCanvas(caps);12 canvas.addGLEventListener(new Renderer());13
14 //cria uma janela e adiciona o painel15 JFrame frame = new JFrame("Aplicação JOGL Simples");16 frame.getContentPane().add(canvas);17 frame.setSize(500, 500);18 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);19
20 //inicializa o sistema e chama display() a 60 fps21 Animator animator = new FPSAnimator(canvas, 60);22 frame.setLocationRelativeTo(null);23 frame.setVisible(true);24 animator.start();25 }26
27 public void reshape(GLAutoDrawable drawable, int x, int y, int width, int ←↩height) {
28 }29
30 public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, ←↩boolean deviceChanged) {
31 }32
33 ...34 }
85 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Função de Projeção Ortogonal OpenGL
Função de Projeção Ortogonal OpenGL
1 public class Renderer implements GLEventListener {2 ...3
4 public void init(GLAutoDrawable drawable) {5 GL gl = drawable.getGL();6
7 gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //de�ne a cor de fundo8 gl.glEnable(GL.GL_DEPTH_TEST); //habilita o teste de profundidade9
10 gl.glMatrixMode(GL.GL_PROJECTION); //de�ne que a matrix é a de projeção11 gl.glLoadIdentity(); //carrega a matrix de identidade12 gl.glOrtho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0); //de�ne uma projeção ortogonal13 }14
15 public void display(GLAutoDrawable drawable) {16 GL gl = drawable.getGL();17 GLUT glut = new GLUT();18
19 //limpa o bu�er20 gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);21
22 //de�ne que a matrix é a de modelo23 gl.glMatrixMode(GL.GL_MODELVIEW);24
25 //desenha um cubo26 gl.glColor3f(1.0f, 0.0f, 0.0f);27 glut.glutWireCube(1.0f);28
29 //força o desenho das primitivas30 gl.glFlush();31 }32 }
86 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Função de Projeção Ortogonal OpenGL
Função de Projeção Ortogonal OpenGL
87 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Transformação de Visão OpenGL
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
88 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Transformação de Visão OpenGL
Função de Transformação de Visão OpenGL
Os parâmetros de visão formam uma matriz que é concatenada coma matriz MODELVIEW corrente, então inicia-se especi�cando
1 gl.glMatrixMode(GL.GL_MODELVIEW);
89 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Transformação de Visão OpenGL
Função de Transformação de Visão OpenGL
Para especi�car os parâmetros de visão usamos a função
1 glu.gluLookAt(GLdouble x0, GLdouble y0, GLdouble z0,2 GLdouble xref, GLdouble yref, GLdouble zref,3 GLdouble Vx, GLdouble Vy, GLdouble Vz);
Essa função de�neA origem do sistema de visão P0 = (x0, y0, z0) no sistema decoordenadas de mundo (a localização da câmera)A posição de referência Pref = (xref, yref, zref) (para onde acâmera aponta)O vetor view-up V = (V x, V y, V z)
90 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Transformação de Visão OpenGL
Função de Transformação de Visão OpenGL
A direção positiva do eixo zview do sistema de coordenadas de visãoestá na direção N = P0 −Pref
A direção de visão está na direção negativa do eixo zview
Os parâmetros especi�cados usando a função gluLookAt(...) sãousados para compor a matriz MWC,V C
Matriz que alinha o sistema de visão com o sistema de coordenadasde mundo
Por padrão os parâmetros de visão da gluLookAt(...) sãoP0 = (0, 0, 0)Pref = (0, 0,−1)V = (0, 1, 0)
91 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Transformação de Visão OpenGL
Função de Transformação de Visão OpenGL
1 public void init(GLAutoDrawable drawable) {2 GL gl = drawable.getGL();3
4 gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //de�ne a cor de fundo5 gl.glEnable(GL.GL_DEPTH_TEST); //habilita o teste de profundidade6
7 gl.glMatrixMode(GL.GL_MODELVIEW); //de�ne que a matrix é a model view8 gl.glLoadIdentity(); //carrega a matrix de identidade9 glu.gluLookAt(1.0, 0.5, 0.5, //posição da câmera10 0.0, 0.0, 0.0, //para onde a câmera aponta11 0.0, 1.0, 0.0); //vetor view−up12
13 gl.glMatrixMode(GL.GL_PROJECTION); //de�ne que a matrix é a de projeção14 gl.glLoadIdentity(); //carrega a matrix de identidade15 gl.glOrtho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0); //de�ne uma projeção ortogonal16 }
92 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Transformação de Visão OpenGL
Função de Transformação de Visão OpenGL
93 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Projeção Perspectiva Simétrica OpenGL
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
94 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Projeção Perspectiva Simétrica OpenGL
Função para Projeção Perspectiva Simétrica OpenGL
Para se criar um volume de visão frustum simétrico sobre a direçãode visão (direção negativa do eixo zview) usamos
1 glu.gluPerspective(GLdouble theta, GLdouble aspect, GLdouble dnear, GLdouble ←↩dfar);
Os parâmetros theta e aspect de�nem o tamanho e posição dajanela de recorteOs parâmetros dnear e dfar especi�cam as distâncias do ponto devisão (origem do sistema de coordenadas) para os planos de recortenear e far00 ≤ theta ≤ 1800 de�ne o ângulo do campo de visãoaspect é o valor da razão de aspecto width/height da janela derecorte
95 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Projeção Perspectiva Simétrica OpenGL
Função para Projeção Perspectiva Simétrica OpenGL
O ponto de referência da projeção (ponto de visão) é a origem dosistema de coordenadas de visãoO plano de recorte near coincide com o plano de visão
Os planos de recorte near/far devem estar ao longo da direçãonegativa de zview e não podem estar atrás da posição de visãoOs valores devem ser dnear > 0 e dfar > 0
96 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Projeção Perspectiva Simétrica OpenGL
Função para Projeção Perspectiva Simétrica OpenGL
1 public void init(GLAutoDrawable drawable) {2 GL gl = drawable.getGL();3 GLU glu = new GLU();4
5 gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //de�ne a cor de fundo6 gl.glEnable(GL.GL_DEPTH_TEST); //habilita o teste de profundidade7
8 gl.glMatrixMode(GL.GL_MODELVIEW); //de�ne que a matrix é a model view9 gl.glLoadIdentity(); //carrega a matrix de identidade10 glu.gluLookAt(4.0, 1.0, 2.0, //posição da câmera11 0.0, 0.0, 0.0, //para onde a câmera aponta12 0.0, 1.0, 0.0); //vetor view−up13
14 gl.glMatrixMode(GL.GL_PROJECTION); //de�ne que a matrix é a de projeção15 gl.glLoadIdentity(); //carrega a matrix de identidade16 glu.gluPerspective(45.0, 1.0, 0.1, 10.0); //de�ne uma projeção perspectiva17 }
97 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Projeção Perspectiva Simétrica OpenGL
Função para Projeção Perspectiva Simétrica OpenGL
98 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Projeção Perspectiva Genérica OpenGL
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
99 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Projeção Perspectiva Genérica OpenGL
Função para Projeção Perspectiva Genérica OpenGL
É possível usar a seguinte função para de�nir uma projeçãoperspectiva simétrica ou oblíqua
1 gl.glFrustum(GLdouble xwmin, GLdouble xwmax,2 GLdouble ywmin, GLdouble ywmax,3 GLdouble dnear, GLdouble dfar);
Os 4 primeiros parâmetros de�nem as coordenadas da janela derecorte no plano nearOs 2 últimos especi�cam as distâncias da origem do sistema decoordenadas dos planos near/far ao longo do eixo zview
znear = −dnear e zfar = −dfarAs distâncias dnear e dfar devem ser positivas
100 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Projeção Perspectiva Genérica OpenGL
Função para Projeção Perspectiva Genérica OpenGL
O plano de recorte near é o plano de projeçãoO ponto de referência de projeção é a origem do sistema decoordenadas de visão
A janela de recorte pode ser especi�cada em qualquer posição doplano near
Se essas forem xwmin = −xwmax e ywmin = −ywmax temos umfrustum simétrico, com a eixo zview como sua linha central
101 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Projeção Perspectiva Genérica OpenGL
Função para Projeção Perspectiva Genérica OpenGL
1 public void init(GLAutoDrawable drawable) {2 GL gl = drawable.getGL();3 GLU glu = new GLU();4
5 gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //de�ne a cor de fundo6 gl.glEnable(GL.GL_DEPTH_TEST); //habilita o teste de profundidade7
8 gl.glMatrixMode(GL.GL_MODELVIEW); //de�ne que a matrix é a model view9 gl.glLoadIdentity(); //carrega a matrix de identidade10 glu.gluLookAt(4.0, 1.0, 2.0, //posição da câmera11 0.0, 0.0, 0.0, //para onde a câmera aponta12 0.0, 1.0, 0.0); //vetor view−up13
14 gl.glMatrixMode(GL.GL_PROJECTION); //de�ne que a matrix é a de projeção15 gl.glLoadIdentity(); //carrega a matrix de identidade16 gl.glFrustum(-2.0, 1.0, -1.0, 1.0, 2.0, 10.0); //de�ne uma projeção ←↩
perspectiva obliqua17 }
102 / 114
Viewing 3D
Funções OpenGL para Viewing 3D
Projeção Perspectiva Genérica OpenGL
Função para Projeção Perspectiva Simétrica OpenGL
103 / 114
Viewing 3D
Algoritmos de Recorte 3D
Sumário
1 Introdução
2 Viewing Pipeline 3D
3 Parâmetros de Coordenadas de Visão 3D
4 Transformação do Sistema de Coordenadas de Mundo para o de Visão
5 Transformações de ProjeçãoProjeções OrtogonaisProjeções PerspectivasTransformação de Viewport e Coordenadas de Tela 3D
6 Funções OpenGL para Viewing 3DFunção de Projeção Ortogonal OpenGLTransformação de Visão OpenGLProjeção Perspectiva Simétrica OpenGLProjeção Perspectiva Genérica OpenGL
7 Algoritmos de Recorte 3D
104 / 114
Viewing 3D
Algoritmos de Recorte 3D
Algoritmos de Recorte 3D
Se o cubo de visão for normalizado, o processo de recorte pode seraplicado de forma mais e�ciente
Os algoritmos de recorte eliminam os objetos fora do volumenormalizado de visão e processam o resto
Esses são extensões dos algoritmos de recorte 2D, mas com planoscomo fronteira ao invés de linhas
O recorte é aplicado após todas as transformações terem sidoaplicadas
105 / 114
Viewing 3D
Algoritmos de Recorte 3D
Recorte em Coordenadas Homogêneas 3D
No pipeline de visualização 3D, após as posições terem passadopelas transformações geométricas, de visão e projeção, temos umarepresentação homogênea
xhyhzhh
= M ·
xyz1
Onde M é a concatenação de todas as matrizes
Um método efetivo para recorte é aplicar as rotinas de recorte sobrea representação homogênea
Os procedimentos de recorte podem ser iguais independente do tipode projeção aplicada
106 / 114
Viewing 3D
Algoritmos de Recorte 3D
Código de Região 3D
O conceito de código de região 2D (algoritmo Cohen-Sutherland)pode ser estendido para representações 3D adicionando alguns bits
Código de 6 bits
Os valores desses bits são calculados de forma semelhante ao 2D0 está dentro de alguma fronteira, 1 está fora
107 / 114
Viewing 3D
Algoritmos de Recorte 3D
Código de Região 3D
Considerando que estamos trabalhando com coordenadashomogêneas P = (xh, yh, zh, h), um ponto dentro do volume devisão deve satisfazer
−1 ≤ xhh≤ 1
−1 ≤ yhh≤ 1
−1 ≤ zhh≤ 1
Assumindo que h 6= 0 podemos calcular
−h ≤ xh ≤ h, −h ≤ yh ≤ h, −h ≤ zh ≤ h, se h > 0
h ≤ xh ≤ −h, h ≤ yh ≤ −h, h ≤ zh ≤ −h, se h < 0
108 / 114
Viewing 3D
Algoritmos de Recorte 3D
Código de Região 3D
Com h > 0 podemos de�nir os valores dos bits como
bit1 = 1 se h+ xh < 0 (esquerda)
bit2 = 1 se h− xh < 0 (direita)
bit3 = 1 se h+ yh < 0 (inferior)
bit4 = 1 se h− yh < 0 (superior)
bit5 = 1 se h+ zh < 0 (near)
bit6 = 1 se h− zh < 0 (far)
109 / 114
Viewing 3D
Algoritmos de Recorte 3D
Recorte de Ponto e Linha 3D
O recorte de linha é essencialmente o mesmo do 2DSe ambos os pontos �nais da linha são 000000, a linha está dentroUma linha está dentro se a operação �ou� sobre seus pontos �nais forigual a 000000Uma linha está fora se a operação �e� sobre seus pontos �nais fordiferente de 000000
111 / 114
Viewing 3D
Algoritmos de Recorte 3D
Recorte de Ponto e Linha 3D
Se uma linha falha nesses testes, suas equações são avaliadas paracalcular as intersecçõesPara uma linha de�nida por P1 = (xh1, yh1, zh1, h1) eP2 = (xh2, yh2, zh2, h2), podemos escrever as equações paramétricas
P = P1 + (P2 −P1)u, 0 ≤ u ≤ 1
Ou seja
xh = xh1 + (xh2 − xh1)u
yh = yh1 + (yh2 − yh1)u
zh = zh1 + (zh2 − zh1)u
h = h1 + (h2 − h1)u
112 / 114
Viewing 3D
Algoritmos de Recorte 3D
Recorte de Ponto e Linha 3D
Usando essas equações, o processo é o mesmo do recorte 2DAs intersecções são calculadas considerando as equações dos planosque de�nem o volume de recorteConforme essas intersecções são calculadas, os códigos de região sãoatualizados, junto com os valores de u
113 / 114
Viewing 3D
Algoritmos de Recorte 3D
Recorte de Polígonos 3D
Pacotes grá�cos normalmente lidam com objetos descritos comequações lineares, portanto rotinas de recorte 3D devem seraplicadas sobre polígonos
Testes triviais podem ser aplicados ao bounding box dos objetospoligonais para testes de rejeição aceitação
114 / 114