CV 06 Visualização 3D - sweet.ua.ptsweet.ua.pt/jmadeira/CV/CV_06_Visualização_3D_BSS_JM.pdf ·...

88
Visualização 3D Universidade de Aveiro Departamento de Electrónica, Telecomunicações e Informática Computação Visual Beatriz Sousa Santos, J. Madeira

Transcript of CV 06 Visualização 3D - sweet.ua.ptsweet.ua.pt/jmadeira/CV/CV_06_Visualização_3D_BSS_JM.pdf ·...

Visualização 3D

Universidade de Aveiro

Departamento de Electrónica,

Telecomunicações e Informática

Computação Visual Beatriz Sousa Santos, J. Madeira

2

Visualização 3D

• Os processos envolvidos na obtenção de uma imagem de uma cena 3D são

de alguma forma semelhantes a tirar uma fotografia

• É preciso escolher os parâmetros de visualização:

- posição

(correspondente à posição da câmara,

dependente da vista pretendida)

- orientação

(correspondente à orientação da

câmara)

Mas em Computação Gráfica há mais

flexibilidade na produção da imagem que na

fotografia (ex: pode-se escolher o tipo de

projecção, a localização do plano de

visualização, etc.)

3

Transformações de coordenadas no Pipeline de

Visualização 3D

É ainda necessário identificar as superfícies

visíveis a aplicar os processos de surface

rendering

Passos necessários para transformar coordenadas da cena em coordenadas

do dispositivo:1º passo - definir a transformação

de visualização

Coordenadas

de visualização

Coordenadas

do mundo

2º passo - definir a transformação

de projecção

4

• Algumas das operações envolvidas na visualização de uma cena 3D são semelhantes às envolvidas no pipeline de visualização 2D:

- Usa-se um viewport 2D para mostrar uma projecção da cena no dispositivo de saída

- A janela de clipping está sobre um plano de visualização

- MAS o clipping das cenas é feito em relação a um volume definido por um conjunto de planos de clipping

• A posição de visualização, o plano de visualização,

a janela de clipping e os planos de clipping são

definidos num :

Sistema de coordenadas de visualização

5

Coordenadas de Visualização 3D

• Estabelecer um sistema de coordenadas de visualização 3D é análogo a estabelecer um sistema de coordenadas de visualização 2D:

1- Estabelecer um ponto Po (xo, yo, zo) para origem:

posição do observador ou ponto de vista (viewing position)

2- Especificar um vector view-up que define a direcção yview

3- Especificar uma direcção de um outro eixo: zview

6

• Em geral o plano de visualização (ou de projecção) é definido como sendo

perpendicular ao zview

• A orientação do plano de visualização (e a direcção positiva de zview ) é

definida a partir de um vector normal N

• Usa-se ainda um parâmetro para definir

a posição do plano de visualização zvp

sobre o eixo zview

Três posições possíveis para o

plano de visualização

7

• Em geral o sistema de coordenadas de visualização é definido como um

sistema de coordenadas de “mão direita”

(o convencional em Matemática)

• Alguns packages gráficos usam

sistemas de “mão esquerda”

• Num sistema de “mão direita”, as rotações positivas são tais que, quando

se olha para a origem ao longo de um semi-eixo positivo, uma rotação de 90º

no sentido anti-horário transforma um semi-eixo positivo noutro semi-eixo

positivo

eixo de rotação Direcção da rotação positiva

x y para z

y z para x

z x para y

Sistema de

“mão esquerda”

(z aumenta para

trás do ecrã)

8

Efeitos de Visualização 3D

• Variando os parâmetros de visualização é possível obter diferentes efeitos de visualização (por exemplo, diferentes vistas de um objecto, panning, etc.)

Mantendo um ponto de observação fixo e variando a direcção de N podem mostrar-se

objectos em posições em torno do ponto de observação e compor uma cena

9

Variando o ponto de observação e

mantendo a direcção de N,

obtemos um efeito de panning,

como quando uma câmara segue

um objecto numa cena

10

• Conhecendo os parâmetros de visualização que definem o sistema de

coordenadas de visualização é fácil calcular a matriz que permite transformar

as coordenadas do mundo (WC) em coordenadas de visualização (VC)

Coordenadas

do mundoCoordenadas

de visualização

Matriz de transformação

11

Pipeline de Visualização 3D:

2º passo - definir a

transformação de projecção

Coordenadas

de visualização

?

É necessário definir o volume

de clipping

12

• A cena 3D é projectada num plano de visualização 2D

(vai haver perda de informação)

Plano de visualização

Embora já existam dispositivos de display 3D (ver artigo, A. Sullivan, “3Deep”,

IEEE Spectrum. Abril, 2005, pp. 30-35) na esmagadora maioria dos casos

usam-se dispositivos de display 2D

Projecção

13

Projecções

• As projecções geométricas planas têm este nome porque são obtidas com

rectas projectantes e superfícies planas

• Há outros tipos que não vamos considerar…

• Existem duas classes de projecções geométricas planas:

- Projecções paralelas

- Projecções perspectivas

• As projecções perspectivas permitem gerar imagens com mais realismo

• Mas envolvem cálculos mais complexos, e nem sempre são a melhor opção !

14

Projecções paralelas e perspectivas

projecção paralela projecção perspectiva

15

Projecções

Projecções geométricas

planas

Paralelas Perspectivas

Cavaleira

Oblíquas

Com 3 pontos

de fuga

Com 1 ponto

de fuga

Com 2 pontos

de fuga

de Gabinete

Outras

Ortogonais

Outras

Isométricas

Axonométricas

Planta

Vista

frontal

Vista

lateral

16

Projecções paralelas e perspectivas

Nas projecções paralelas as rectas

projectantes são paralelas, i.e.,

convergem num ponto a uma

distância infinita.

Plano de

visualização

Nas projecções perspectivas

as rectas projectantes

convergem no centro de

projecção.

Plano de

visualização

Ponto de

convergência

(Centro de projecção)

17

Projecções paralelas ortogonais (ou ortográficas)

• São projecções paralelas obtidas por

projectores perpendiculares ao plano

de projecção

• As projecções deste tipo, em que o

plano de projecção é paralelo a um

conjunto de faces do objecto, são

frequentemente usadas em engenharia

e arquitectura

• Alguns ângulos, distâncias e áreas são

representados em verdadeira gran-

deza e podem ser directamente

medidos nas vistas

• Têm a desvantagem de não dar

facilmente uma ideia da estrutura

tridimensional dos objectos

Planta

Vista lateral

Vista frontal

18

Coordenadas da projecção ortogonal

• Se a direcção de projecção for paralela ao eixo zview quais são as

coordenadas do ponto projectado?

(x,y,z)

19

Projecções Paralelas Ortogonais

20

Planta e alçados

21

• São projecções ortogonais em que o plano de visualização não é paralelo a um conjunto de faces do objecto

• Dão uma ideia melhor da estrutura

tridimensional do objecto

• Podem ser

• Isométricas

• Dimétricas

• Trimétricas

Projecções ortogonais axonométricas

Projecção isométrica do cubo:

são mostradas várias faces e as três

arestas são representadas com a

mesma grandeza

Plano de

visualização

22

Projecções Isométricas

23

Projecções Dimétricas

24

Projecções Trimétricas

25

Forma prática de construir uma

projecção isométrica

Orthographic projections

26[van Dam]

Orthographic projections

27[van Dam]

Axonometric Projection in Games

28

[van Dam]

29

Janela de clipping e volume de projecção ortogonal

View plane• Na fotografia, é o tipo de lente

que determina que “quantidade”

da cena é transferida para o filme

• Em computação gráfica usa-se

a janela de clipping que está

sobre o plano de visualização

• Os packages gráficos permitem,

em geral usar janelas de clipping

rectangulares e paralelas aos

eixos

• A janela de clipping permite

definir o volume de visualização

30

Volume de visualização e clipping para projecções ortogonais

Volume de visualização finito correspondente a uma projecção ortogonal

com planos de clipping à frente e atrás

Janela de

clipping

Plano de clipping

Plano de

clipping

The Parallel View Volume

31

[van Dam]

32

Projecções paralelas oblíquas

• São projecções paralelas obtidas por

rectas projectantes oblíquas ao plano

de visualização

• São muito usadas em engenharia e

arquitectura pois:

– são fáceis de produzir

– dão uma boa ideia do objecto

Plano de visualização

Plano de visualização

Projectores

Projecção oblíqua do cubo:

são mostradas várias faces

33

Projecção cavaleira

• Nesta projecção a profundidade (L1) do

cubo é representada com uma grandeza

igual à largura e à altura

• Tem a desvantagem de não parecer muito

realista

• O ângulo Φ é geralmente:

– Φ = 30º

– Φ = 45º

34

Projecção de gabinete

• Nesta projecção a profundidade (L1) do

cubo é representada com uma grandeza

igual a metade da largura e da altura

• Tem a vantagem de parecer mais realista

que a projecção cavaleira

• O ângulo Φ é geralmente:

– Φ = 30º

– Φ = 45º

35

Projecções cavaleiras e de gabinete

Exemplos

36

[van Dam]

Exemplos

37

[van Dam]

38

Projecção perspectiva

• Segmentos de recta com o mesmo comprimento, mas que se encontrem a

distâncias diferentes do plano de visualização, projectam-se com

comprimentos diferentes

• Em relação às projecções paralelas

- Tem a vantagem de produzir imagens mais realistas

- Mas não preserva proporções dos objectos

- E é mais complexa

Perspective projection

39

[van Dam]

40

Projecções perspectivas com um, dois e três pontos de fuga

• Ponto principal de fuga é um ponto para onde convergem as rectas paralelas a um eixo coordenado que intersecta o plano de projecção

n. de pontos de fuga principais:

n. de eixos coordenados intersectados pelo plano de projecção

Vanishing points

41

[van Dam]

Vanishing points

42

[van Dam]

43

Perspectiva com um ponto de fuga

44

Perspectivas com um e dois pontos de fuga (frontal e angular)

Um ponto de fuga

(perspectiva frontal)

Dois pontos de fuga

(perspectiva angular)

45

Perspectiva na arte

Considerada a primeira

pintura com perspectiva

A Trindade e a Virgem

Mastaccio, 1427

46

Perspectiva com um ponto de fuga

From http://www.sanford-artedventures.com

47

Volume de visualização e clipping para projecções perspectiva

Volume de visualização finito correspondente a uma projecção perspectiva

com planos de clipping

View Angle

48

[van Dam]

Clipping planes

49[van Dam]

Cubo – Várias representações

50

51

Imagem de uma cena tridimensional gerada usando projecção perspectiva

Como efetuar a projeção?

52

[van Dam]

53

Matemática das Projecções

• As projecções podem aplicar-se através de multiplicação de matrizes de projecção 4x4 (em coordenadas homogéneas)

• Isto permite a sua combinação com matrizes correspondentes às transformações estudadas

– Animações

– Projecções mais complexas decompostas numa sequência de operações mais simples

• Vamos considerar casos simples de projecções perspectivas e ortogonais com plano de visualização (ou projecção) paralelos ao plano xoy

54

Projecção perspectiva com plano de projecção z=d

P (x, y, z) - ponto original

Pp (xp, yp, zp) - ponto projectado

Por semelhança de triângulos:

xp /d = x / z yp /d = y / z

Multiplicando por d:

xp = d . x = x

z z / d

yp = d . y = y

z z / d

A divisão por z implica que a projecção

de objectos mais distantes seja menor

x

z

y

cop d

P (x,y,z)

P

Plano z=d

yp

xp

55

Projecção perspectiva com plano de

projecção z=d e centro de projecção

na origem

P (x, y, z) - ponto original

Pp (xp, yp, zp) - ponto projectado

Todos os valores de z são possíveis

excepto z=0

A projecção pode ser representada como:

1 0 0 0

Mpers = 0 1 0 0

0 0 1 0

0 0 1/d 0

x

z

y

cop d

P (x,y,z)

P

Plano z=d

yp

xp

Multiplicando P por Mpers obtém-se o ponto projectado – FAZER na AULA !

Pp = M pers . P

56

Projecção perspectiva com plano de projecção z=0 e centro de projecção em z=-d

P (x, y, z) - ponto original

Pp (xp, yp, zp) - ponto projectado

Por semelhança de triângulos:

xp /d = x / (z + d) yp /d = y / (z + d)

Multiplicando por d:

xp = d . x = x

z + d z / d +1

yp = d . y = y

z + d z / d + 1

1 0 0 0

M’ pers = 0 1 0 0

0 0 0 0

0 0 1/d 1

Multiplicando P por Mpers obtém-se o ponto projectado – FAZER na AULA !

57

Esta formulação permite fazer d tender

para ∞, obtendo-se a matriz de

projecção paralela ortogonal num

plano de projecção em z= 0:

Como são as coordenadas do ponto projectado?

Estávamos à espera deste resultado?

58

OpenGL (Pré-3.1) – Projecção Paralela Ortogonal

• A direcção de projecção é definida pelo vector (0, 0, -1) e é paralela ao eixo ZZ’

• O plano de projecção é o plano XOY (z=0)

• O volume de visualização (i.e., as faces do paralelepípedo) é definido por

glOrtho( left, right, bottom, top, near, far );

[OpenGL - The Red Book]

59

OpenGL (Pré-3.1) – Projecção Paralela Ortogonal

• Distâncias (com sinal) relativamente à origem:

right > left, top > bottom, e far > near (atenção !)

• Os planos de clipping z = -near e z = -far podem não ter o mesmo sinal.

• Canto inferior esquerdo da janela definida no plano frontal de clipping

(left, bottom, -near)

• Canto superior direito da janela definida no plano frontal de

clipping

(right, top, -near)

[OpenGL - The Red Book]

60

OpenGL (Pré-3.1) – Exemplo

• Volume de visualização cúbico e de lado 2

glMatrixMode( GL_PROJECTION );

glLoadIdentity( );

glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

• Quais são os valores por omissão (default)?

61

OpenGL (Pré-3.1) – Projecção Perspectiva

• O observador encontra-se na origem do sistema de

coordenadas

• A olhar na direcção do semi-eixo negativo dos ZZ’

[OpenGL - The Red Book]

62

OpenGL (Pré-3.1) – Projecção Perspectiva

• O observador encontra-se na origem do sistema de coordenadas

• A olhar na direcção do semi-eixo negativo dos ZZ’

• O volume de visualização (i.e., as faces da pirâmide truncada) é definido por

glFrustum( left, right, bottom, top, near, far );

[OpenGL - The Red Book]

63

OpenGL (Pré-3.1) – Projecção Perspectiva

• Os planos de clipping z = - near (frontal) e z = - far (à rectaguarda) são definidos tendo em atenção:

far > near > 0

• Canto inferior esquerdo da janela definida no plano frontal de clipping

(left, bottom, -near)

• Canto superior direito da janela definida no plano frontal de

clipping

(right, top, -near)

[OpenGL - The Red Book]

64

OpenGL (Pré-3.1) – Projecção Perspectiva

• Definir um volume de visualização

glMatrixMode( GL_PROJECTION );

glLoadIdentity( );

glFrustum( -1.0, 1.0, -1.0, 1.0, 1.0, 5.0 );

• Quais são os valores por omissão (default)?

• O observador (centro de projecção) não pode estar localizado no interior do volume de visualização.

65

OpenGL (Pré-3.1) – Funções auxiliares

gluPerspective( fov, aspect, near, far );

• A sua utilização pode não ser fácil…

[OpenGL - The Red Book]

66

OpenGL (Pré-3.1) – Funções auxiliares

gluLookAt( eyex, eyey,eyez, atx, aty, atz,upx, upy, upz);

• A sua utilização pode não ser fácil…

[OpenGL - The Red Book]

OpenGL / WebGL

• As funções auxiliares das versões anteriores já não existem !!

• É necessário:

– Posicionar o observador

• Model-View Matrix

– Seleccionar o tipo de projecção

• Projection Matrix

– Estabelecer o volume de visualização de acordo com a projeccção

• View-Volume

• Funções auxiliares !!

• O que está definido por omissão ?

67

OpenGL / WebGL

68

modelview

transformation

projection

transformation

perspective

division

clipping projection

4D 3D

default cube3D 2D

[Ed Angel]

• Projecção Paralela Ortogonal

– Observador a uma distância infinita da origem

– Olha na direcção do semi-eixo negativo ZZ’

• Volume de Visualização

– Cubo centrado na origem

– Arestas de comprimento 2

OpenGL / WebGL - Default

69

[Ed Angel]

OpenGL / WebGL

• Como visualizar primitivas que estejam fora do volume de

visualização?

– Aplicar translações apropriadas

• E se quisermos ver uma face lateral de um modelo?

– Aplicar rotações apropriadas

• Estamos a alterar a Model-View Matrix !!

– Ordem dos produtos matriciais

– Funções auxiliares para estabelecer e multiplicar as matrizes

70

Another Canonical Parallel View Volume

71

[van Dam]

The Normalizing Transformation

72

[van Dam]

Clipping against the View Volume

73

[van Dam]

OpenGL / WebGL – Projecção Paralela Ortogonal

• Volume de Visualização para a Projecção Paralela

Ortogonal

ortho(left,right,bottom,top,near,far)

74

[Ed Angel]

OpenGL / WebGL – Projecção Paralela Ortogonal

• Volume de Visualização para a Projecção Paralela

Ortogonal

ortho(left,right,bottom,top,near,far)

75

[Ed Angel]

OpenGL / WebGL – Projecção Paralela Ortogonal

• 2 passos:

T(-(left+right)/2, -(bottom+top)/2,(near+far)/2))

S(2/(left-right),2/(top-bottom),2/(near-far))

• Matriz de Projecção:

76

[Ed Angel]

P = ST =

1000

200

02

0

002

nearfar

nearfar

farnear

bottomtop

bottomtop

bottomtop

leftright

leftright

leftright

P = MorthST

• Observador na origem

• Olhando na direção do semi-eixo negatvo ZZ’

frustum(left,right,bottom,top,near,far);

OpenGL / WebGL – Projecção Perspectiva

77

[Ed Angel]

OpenGL / WebGL – Projecção Perspectiva

78

[Ed Angel]

• Observador na origem

• Olhando na direção do semi-eixo negatvo ZZ’

perspective(fovy,aspect,near,far);

OpenGL / WebGL – Projecção Perspectiva

79

[Ed Angel]

0100

0100

0010

0001M =

OpenGL / WebGL

• E se quisermos uma projecção perspectiva ?

• Converter na projecção paralela ortogonal

– Aplicar uma transformação apropriada a todos os modelos da cena

– E ao volume de visualização perspectivo

• É só efectuar produtos matriciais e obter a matriz global de

transformação

– CPU ou GPU

80

Perspective to Parallel Transformation

81

[van Dam]

Convertendo para coordenadas cartesianas, o ponto (x, y, z, 1)

corresponde a

OpenGL / WebGL – Generalização

82

[Ed Angel]

0100

βα00

0010

0001

N =

x’’ = x/z

y’’ = y/z

z’’ = -(a+b/z)

cuja projecção ortogonal é (x’’, y’’, 0), como desejado

Seleccionando

a =

b =

nearfar

farnear

farnear

farnear2

o plano near é mapeado em z = -1

o plano far é mapeado em em z =1

e as faces laterais são mapeadas em x = 1, y = 1

Obtém-se o volume de visualização definido por omissão !!

OpenGL / WebGL – Generalização

83

OpenGL / WebGL – Generalização

84

original clippingvolume original object new clipping

volume

distorted object

projects correctly

[Ed Angel]

Exemplo

85

[Andy van Dam]

Exemplos – O efeito da perspectiva

86

[Andy van Dam]

Exemplo – O efeito da perspectiva

87

[Andy van Dam]

88

Principal bibliografia

• D. Hearn and M. P. Baker, Computer Graphics with OpenGL, 3rd

Ed., Addison-Wesley, 2004

• E. Angel and D. Shreiner, Introduction to Computer Graphics, 6th

Ed., Pearson Education, 2012

• J. Foley et al., Introduction to Computer Graphics, Addison-Wesley,

1993

• D. Rogers and J. Adams, Mathematical Elements for Computer

Graphics, 2nd Ed., McGraw-Hill, 1990