prof. fernando v. paulovich ...paulovic/aulas/cg/scc0250-slides-09-viewing... · linhas paralelas...

114

Upload: trinhthien

Post on 23-Nov-2018

219 views

Category:

Documents


1 download

TRANSCRIPT

Viewing 3D

Viewing 3D

SCC0250 - Computação Grá�ca

Prof. Fernando V. Paulovichhttp://www.icmc.usp.br/~paulovic

[email protected]

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

Código de Região 3D

110 / 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