Universidade de Aveiro Departamento de Electrónica, Telecomunicações e Informática Visualização 3D Computação Visual Beatriz Sousa Santos, J. Madeira
Visualização 3D Os processos envolvidos na obtenção de uma imagem de uma cena 3D são de alguma forma semelhantes a tirar uma fotografia É preciso escolher os parâmetros de visualização: - posição (correspondente à posição da câmara, dependente da vista pretendida) - orientação (correspondente à orientação da câmara) Mas em Computação Gráfica há mais flexibilidade na produção da imagem que na fotografia (ex: pode-se escolher o tipo de projecção, a localização do plano de visualização, etc.) 2
Transformações de coordenadas no Pipeline de Visualização 3D Passos necessários para transformar coordenadas da cena em coordenadas do dispositivo: 1º passo - definir a transformação de visualização Coordenadas do mundo Coordenadas de visualização 2º passo - definir a transformação de projecção É ainda necessário identificar as superfícies visíveis a aplicar os processos de surface rendering 3
Algumas das operações envolvidas na visualização de uma cena 3D são semelhantes às envolvidas no pipeline de visualização 2D: - Usa-se um viewport 2D para mostrar uma projecção da cena no dispositivo de saída - A janela de clipping está sobre um plano de visualização - MAS o clipping das cenas é feito em relação a um volume definido por um conjunto de planos de clipping A posição de visualização, o plano de visualização, a janela de clipping e os planos de clipping são definidos num : Sistema de coordenadas de visualização 4
Coordenadas de Visualização 3D Estabelecer um sistema de coordenadas de visualização 3D é análogo a estabelecer um sistema de coordenadas de visualização 2D: 1- Estabelecer um ponto Po (xo, yo, zo) para origem: posição do observador ou ponto de vista (viewing position) 2- Especificar um vector view-up que define a direcção y view 3- Especificar uma direcção de um outro eixo: z view 5
Em geral o plano de visualização (ou de projecção) é definido como sendo perpendicular ao z view A orientação do plano de visualização (e a direcção positiva de z view ) é definida a partir de um vector normal N Usa-se ainda um parâmetro para definir a posição do plano de visualização z vp sobre o eixo z view Três posições possíveis para o plano de visualização 6
Em geral o sistema de coordenadas de visualização é definido como um sistema de coordenadas de mão direita (o convencional em Matemática) Alguns packages gráficos usam sistemas de mão esquerda Sistema de mão esquerda (z aumenta para trás do ecrã) Num sistema de mão direita, as rotações positivas são tais que, quando se olha para a origem ao longo de um semi-eixo positivo, uma rotação de 90º no sentido anti-horário transforma um semi-eixo positivo noutro semi-eixo positivo eixo de rotação x y z Direcção da rotação positiva y para z z para x x para y 7
Efeitos de Visualização 3D Variando os parâmetros de visualização é possível obter diferentes efeitos de visualização (por exemplo, diferentes vistas de um objecto, panning, etc.) Mantendo um ponto de observação fixo e variando a direcção de N podem mostrar-se objectos em posições em torno do ponto de observação e compor uma cena 8
Variando o ponto de observação e mantendo a direcção de N, obtemos um efeito de panning, como quando uma câmara segue um objecto numa cena 9
Conhecendo os parâmetros de visualização que definem o sistema de coordenadas de visualização é fácil calcular a matriz que permite transformar as coordenadas do mundo (WC) em coordenadas de visualização (VC) Coordenadas do mundo Matriz de transformação Coordenadas de visualização 10
Pipeline de Visualização 3D: Coordenadas de visualização? 2º passo - definir a transformação de projecção É necessário definir o volume de clipping 11
Projecção A cena 3D é projectada num plano de visualização 2D (vai haver perda de informação) Plano de visualização Embora já existam dispositivos de display 3D (ver artigo, A. Sullivan, 3Deep, IEEE Spectrum. Abril, 2005, pp. 30-35) na esmagadora maioria dos casos usam-se dispositivos de display 2D 12
Projecções As projecções geométricas planas têm este nome porque são obtidas com rectas projectantes e superfícies planas Há outros tipos que não vamos considerar Existem duas classes de projecções geométricas planas: - Projecções paralelas - Projecções perspectivas As projecções perspectivas permitem gerar imagens com mais realismo Mas envolvem cálculos mais complexos, e nem sempre são a melhor opção! 13
Projecções paralelas e perspectivas projecção paralela projecção perspectiva 14
Projecções Projecções geométricas planas Paralelas Perspectivas Ortogonais Oblíquas Com 1 ponto de fuga Planta Vista frontal Vista lateral Axonométricas Cavaleira de Gabinete Outras Com 2 pontos de fuga Com 3 pontos de fuga Isométricas Outras 15
Projecções paralelas e perspectivas Plano de visualização Plano de visualização Ponto de convergência (Centro de projecção) Nas projecções paralelas as rectas projectantes são paralelas, i.e., convergem num ponto a uma distância infinita. Nas projecções perspectivas as rectas projectantes convergem no centro de projecção. 16
Projecções paralelas ortogonais (ou ortográficas) São projecções paralelas obtidas por projectores perpendiculares ao plano de projecção As projecções deste tipo, em que o plano de projecção é paralelo a um conjunto de faces do objecto, são frequentemente usadas em engenharia e arquitectura Planta Alguns ângulos, distâncias e áreas são representados em verdadeira grandeza e podem ser directamente medidos nas vistas Vista lateral Têm a desvantagem de não dar facilmente uma ideia da estrutura tridimensional dos objectos Vista frontal 17
Coordenadas da projecção ortogonal Se a direcção de projecção for paralela ao eixo z view quais são as coordenadas do ponto projectado? (x,y,z) 18
Projecções Paralelas Ortogonais 19
Planta e alçados 20
Projecções ortogonais axonométricas São projecções ortogonais em que o plano de visualização não é paralelo a um conjunto de faces do objecto Dão uma ideia melhor da estrutura tridimensional do objecto Podem ser Isométricas Dimétricas Trimétricas Plano de visualização Projecção isométrica do cubo: são mostradas várias faces e as três arestas são representadas com a mesma grandeza 21
Projecções Isométricas 22
Projecções Dimétricas 23
Projecções Trimétricas 24
Forma prática de construir uma projecção isométrica 25
Orthographic projections [van Dam] 26
Orthographic projections [van Dam] 27
Janela de clipping e volume de projecção ortogonal Na fotografia, é o tipo de lente que determina que quantidade da cena é transferida para o filme View plane Em computação gráfica usa-se a janela de clipping que está sobre o plano de visualização Os packages gráficos permitem, em geral usar janelas de clipping rectangulares e paralelas aos eixos A janela de clipping permite definir o volume de visualização 28
Volume de visualização e clipping para projecções ortogonais Plano de clipping Janela de clipping Plano de clipping Volume de visualização finito correspondente a uma projecção ortogonal com planos de clipping à frente e atrás 29
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: Projectores Plano de visualização são fáceis de produzir dão uma boa ideia do objecto Plano de visualização Projecção oblíqua do cubo: são mostradas várias faces 30
Projecção cavaleira Nesta projecção a profundidade (L 1 ) do cubo é representada com uma grandeza igual à largura e à altura Tem a desvantagem de não parecer muito realista O ângulo Φ é geralmente: Φ = 30º Φ = 45º 31
Projecção de gabinete Nesta projecção a profundidade (L 1 ) 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º 32
Projecções cavaleiras e de gabinete 33
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 34
Perspective projection [van Dam] 35
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 36
Vanishing points [van Dam] 37
Vanishing points [van Dam] 38
Perspectiva com um ponto de fuga 39
Perspectivas com um e dois pontos de fuga (frontal e angular) Um ponto de fuga (perspectiva frontal) Dois pontos de fuga (perspectiva angular) 40
Perspectiva na arte A Trindade e a Virgem Mastaccio, 1427 Considerada a primeira pintura com perspectiva 41
Perspectiva com um ponto de fuga From http://www.sanford-artedventures.com 42
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 43
Imagem de uma cena tridimensional gerada usando projecção perspectiva 44
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 45
Projecção perspectiva com plano de projecção z=d P (x, y, z) - ponto original P p (x p, y p, z p ) - ponto projectado x Plano z=d P (x,y,z) Por semelhança de triângulos: x p x p /d = x / z y p /d = y / z cop d z Multiplicando por d: x p = d. x = x z z / d y y p P y p = d. y = y z z / d A divisão por z implica que a projecção de objectos mais distantes seja menor 46
Projecção perspectiva com plano de projecção z=d e centro de projecção na origem P (x, y, z) - ponto original P p (x p, y p, z p ) - ponto projectado x Plano z=d x p P (x,y,z) Todos os valores de z são possíveis excepto z=0 cop d z A projecção pode ser representada como: y y p P 1 0 0 0 M pers = 0 1 0 0 0 0 1 0 0 0 1/d 0 P p = M pers. P Multiplicando P por M pers obtém-se o ponto projectado FAZER na AULA! 47
Projecção perspectiva com plano de projecção z=0 e centro de projecção em z=-d P (x, y, z) - ponto original P p (x p, y p, z p ) - ponto projectado Por semelhança de triângulos: x p /d = x / (z + d) y p /d = y / (z + d) Multiplicando por d: x p = d. x = x z + d z / d +1 y p = 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 M pers obtém-se o ponto projectado FAZER na AULA! 48
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? 49
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] 50
OpenGL (Pré-3.1) Projecção Paralela Ortogonal [OpenGL - The Red Book] Distâncias (com sinal) relativamente à origem: right > left, top > bottom, e far > near (atenção!) Os planos de clipping z = -near e z = -far podem não ter o mesmo sinal. Canto inferior esquerdo da janela definida no plano frontal de clipping (left, bottom, -near) Canto superior direito da janela definida no plano frontal de clipping (right, top, -near) 51
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)? 52
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] 53
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] 54
OpenGL (Pré-3.1) Projecção Perspectiva [OpenGL - The Red Book] Os planos de clipping z = - near (frontal) e z = - far (à rectaguarda) são definidos tendo em atenção: far > near > 0 Canto inferior esquerdo da janela definida no plano frontal de clipping (left, bottom, -near) Canto superior direito da janela definida no plano frontal de clipping (right, top, -near) 55
Clipping planes [van Dam] 56
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. 57
OpenGL (Pré-3.1) Funções auxiliares [OpenGL - The Red Book] gluperspective( fov, aspect, near, far ); A sua utilização pode não ser fácil 58
OpenGL (Pré-3.1) Funções auxiliares [OpenGL - The Red Book] glulookat( eyex, eyey,eyez, atx, aty, atz, upx, upy, upz); A sua utilização pode não ser fácil 59
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? 60
OpenGL / WebGL - Default Projecção Paralela Ortogonal Observador a uma distância infinita da origem Olha na direcção do semi-eixo negativo ZZ Volume de Visualização Cubo centrado na origem Arestas de comprimento 2 [Ed Angel] 61
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 62
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 63
OpenGL / WebGL modelview transformation projection transformation perspective division 4D 3D clipping default cube projection 3D 2D [Ed Angel] 64
OpenGL / WebGL Projecção Paralela Ortogonal Volume de Visualização para a Projecção Paralela Ortogonal ortho(left,right,bottom,top,near,far) [Ed Angel] 65
OpenGL / WebGL Projecção Paralela Ortogonal Volume de Visualização para a Projecção Paralela Ortogonal ortho(left,right,bottom,top,near,far) [Ed Angel] 66
OpenGL / WebGL Projecção Paralela Ortogonal 2 passos: T(-(left+right)/2, -(bottom+top)/2,(near+far)/2)) S(2/(left-right),2/(top-bottom),2/(near-far)) P = ST = Matriz de Projecção: 2 right left 0 0 0 0 2 top bottom 0 0 0 0 2 near 0 far right left right left top bottom top bottom far near far near 1 P = M orth ST [Ed Angel] 67
OpenGL / WebGL Projecção Perspectiva Observador na origem Olhando na direção do semi-eixo negatvo ZZ frustum(left,right,bottom,top,near,far); [Ed Angel] 68
OpenGL / WebGL Projecção Perspectiva Observador na origem Olhando na direção do semi-eixo negatvo ZZ perspective(fovy,aspect,near,far); [Ed Angel] 69
OpenGL / WebGL Projecção Perspectiva M = 1 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 [Ed Angel] 70
OpenGL / WebGL Generalização N = 1 0 0 0 0 1 0 0 0 0 0 0 α β 1 0 [Ed Angel] Convertendo para coordenadas cartesianas, o ponto (x, y, z, 1) corresponde a x = x/z y = y/z z = -(a+b/z) cuja projecção ortogonal é (x, y, 0), como desejado 71
OpenGL / WebGL Generalização Seleccionando near far a = far near b = 2near far near far 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!! 72
OpenGL / WebGL Generalização distorted object projects correctly original clipping volume original object new clipping volume [Ed Angel] 73
Exemplo [Andy van Dam] 74
Exemplos O efeito da perspectiva [Andy van Dam] 75
Exemplo O efeito da perspectiva [Andy van Dam] 76
Principal bibliografia D. Hearn and M. P. Baker, Computer Graphics with OpenGL, 3 rd Ed., Addison-Wesley, 2004 E. Angel and D. Shreiner, Introduction to Computer Graphics, 6 th 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, 2 nd Ed., McGraw-Hill, 1990 77