Programação Gráfica (2.2 a 2.7) Instituto Superior Técnico, 2006/2007 Índice Programação 2D Sistemas de Coordenadas API do OpenGL Primitivas e Atributos Introdução à Cor Projecções Interacção com o Sistema de Janelas Remoção de Elementos Ocultos Fundamentos de Animação 2 Programação 2D Múltiplas Funções Representação Interna 3D Objectos definidos no plano Z=0 p = (x, y, z) Vertex versus Point glvertex* () * é interpretado como nt ou ntv n dimensão ( a 4) t i, f, d v apontador para um array 3 4 Desenho de Linhas e Pontos Com Apontador glbegin (GL_Lines); glvertex3f (x, y, z); glvertex3f (x2, y2, z2); glend(); glbegin (GL_Points); glvertex3f (x, y, z); glvertex3f (x2, y2, z2); glend(); Typedef GLfoat pont2 2 ; point2 p; glvestex2fv (p); overloading de operadores... glflush (); 5 6
Sistemas de Coordenadas Independência do Dispositivo Coordenadas de ecrã? Origem? Dimensões? Qualquer Sistema de Coordenadas Do Objecto Do Mundo (Da Câmara) Do Dispositivo 7 8 API do OpenGL Vantagens Semelhante ao DirectX e ao Java3D com funções: Primitivas Atributos Visualização Transformação Entrada de Dados Controlo Interrogação Norma industrial (mais de 300 empresas) Estável Portável Escalável Fácil de Usar Bem documentada Suporta a programação de GPUs 9 0 Máquina OpenGL Bibliotecas Máquina de Estados Informação: Flui através do Pipeline Altera o Estado do Pipeline Pontos? Cor? 2 2
GLU, OpenGL Utility Library Criação de objectos complexos Esferas Teapot Curvas Quadráticas Nurbs (superfícies paramétricas) Gestão de Erros (ocorrência e descrição de erros) Transformação em objectos suportados directamente pelo OpenGL GLU (cont) Especificação de Texturas Transformação de Coordenadas (glulookat,..) Tesselação (triangulação de polígonos isto é criação de facetas) 3 4 Teapot GLUT (Toolkit) e GLX, WGL e AGL Gestão de Janelas simplificado: Criação, redesenho, posição, dimensões,.. Gestão de Tabela de Cores Funções de Retorno (callback) Gestão das Unidades de Entrada de Dados (rato, teclado) Ciclo de Execução (glutmainloop) 5 6 WGL Tipos de Primitivas Extensão para Microsoft a qual suporta: Formato das quadrículas Acesso a extensões (dependentes do ambiente) Gestão de buffers Sincronização (com o pipeline do Windows GDI) Acesso directo à Tabela de Cores Primitivas Gráficas Primitivas Raster Dois sub-pipelines 7 8 3
Pipeline Simplificado Primitivas Geométrica 9 20 Polígonos Mais Polígonos Usados, por exemplo, em Modelos Digitais de Terrenos 2 22 Limitações dos Polígonos Aplicação Shapes Polígonos Convexos Polígonos Planos Polígonos que não se auto-intersectam Polígonos sem Buracos Tipos de Objectos Geométricos (glbegin) O Estado Cor (usar o polígono) Geometria da malha de triângulos (alterar 2ª e 3ª cor do Triangle_Strip) Polígonos não planares Atributos (fronteira do polígono) Objectos Pontos versus Vértices 23 24 4
Tipos de Texto Texto Vectorial Texto Vectorial (Post-Script) Podem ser transformados Texto Raster 25 26 Texto Raster Atributos Rectângulo de bits (bit blocks) Alterar a dimensão Biblioteca GLUT Modo com uma primitiva é desenhada, por exemplo a sua Cor Aplicados em vários andares do pipeline Poligonos Preenchimento com padrão Desenho da fronteira... 27 28 Exemplos de Atributos Cor em OpenGL Cor RGB glcolor3f (.0, 0.0, 0.0); Cor para Limpar (como está no início?) glclearcolor (.0,.0,.0); 29 30 5
A 4ª Cor Alpha Mapa de Cores Se a mistura de cores (blending) estiver activa Alpha é o valor da opacidade ou da transparência Cor branca e opaca glclearcolor (.0,.0,.0,.0); Nº de cores baixo ou partilhado por várias aplicações Manter a profundidade do Frame Buffer (3 * m bits) Solução: 3 32 Color-Lookup Table em OpenGL Projecções Inicialização da Tabela de Cores glutsetcolor (int color, GLfloat red, GLfloat green, GLfloat blue); Obtenção da cor glindexi (element); Desenhar é Projectar numa superfície plana Representações planares no Paleolítico superior (40000AC) Perspectiva surge com o Renascimento Cúpula de Stª Maria del Fiore 33 34 Projecções Geométricas Planas Pirâmide Visual Linhas Projectantes são rectas Superfície de Projecção plana (plano de imagem ou de projecção) Pirâmide visual (Alberti) Um retrato é a intersecção de uma pirâmide visual a uma dada distância, com um centro fixo e uma dada posição da luz representada por arte com linhas e polígonos numa dada superfície (Alberti, Tratado sobre a pintura, Séc. XVI) plano da imagem Centro de projecção (CDP) 35 36 6
Projecções Perspectiva Determinada pelo centro de projecção (CDP) Distância do CDP ao plano finita Raios projectores convergentes Raios Projectores CDP A B A B Plano de Projecção Projecções Paralelas Raios projectores paralelos entre si Distância do CDP ao plano infinita. Direcção de projecção versus Plano de Projecção A Direcção de Projecção Raios Projectores A B B Plano de Projecção 37 38 Projecções Ortogonais Vistas Planta Direcção de projecção coincide com a normal Normal ao plano Vistas: alinhada com um dos eixos Axonométricas: não alinhada Usadas em desenhos técnicos Engenharias Civil e Mecânica Arquitectura Vantagens Medidas precisas todas as vistas na mesma escala Limitações Não é possível visualizar objectos 3D Múltiplas vistas para definir peça Alçado lateral Alçado frontal 39 40 Axonométricas Projecções Oblíquas Isométricas: ângulos de 20º entre eixos ( escala) Dimétricas: dois ângulos iguais (2 escalas) Trimétrica: três ângulos diferentes (3 escalas) Raios projectores formam ângulo oblíquo com o plano de projecção Vantagens Mostra forma exacta de uma face Comparação de dimensões possível Ideia da aparência 3D de um objecto Desvantagens Aparência distorcida Falta de realismo normal ao plano direcção de projecção 4 42 7
Exemplos de Projecções Oblíquas Projecções Perspectiva Cavaleira Angulo entre projectores e normal = 45º Faces perpendiculares à escala Gabinete Ângulo entre projectores e normal arctg(2) = 63.4º Faces perpendiculares à escala de 50% /2 Linhas paralelas convergem em pontos de fuga. Linhas paralelas aos eixos definem pontos de fuga axiais (máximo de 3) Não mantém proporcionalidade entre distâncias Tamanho dos objectos diminui com a distância Só mantém a amplitude dos ângulos em faces paralelas ao plano de projecção Ponto de Fuga (x) Ponto de Fuga (y) 43 44 Pontos de Fuga Número de pontos de fuga = eixos coordenados intersectados pelo plano de projecção. Ponto de Fuga, Plano Z: y Mais Pontos de Fuga y x z x 3 pontos de fuga (z y x) z x 2 ponto de fuga (z e x) z 45 46 Tipos de Projecções Planas Síntese Paralelas Ortogonais Oblíquas ponto de fuga Alçado Gabinete Frontal Planta Cavaleira Alçado Lateral Outras Isométrica Outras Perspectivas 2 pontos de fuga 3 pontos de fuga NPP - Normal ao Plano de Projecção DP - Direcção de Projecção ) Ortogonais NPP um eixo, DP NPP uma face, medidas exactas 2) Axonométricas NPP qq eixo, DP NP faces adjacentes, nenhuma exacta, uniformemente encolhidas 3) Oblíquas NPP um eixo, DP NPP faces adjacentes, uma exacta, outras uniformemente encolhidas 47 48 8
Projecção Paralela em OpenGL Volume de Visualização (objectos podem estar por detrás da câmara) void glortho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); Projecção Perspectiva em OpenGL Volume definido, também, no Sistema de Coordenadas de Visualização void glfrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); 49 50 Aplicação projection Sistema de Janelas Vários tipos de projecção Utilização de função do glulookat Planos de Recorte Abertura da câmara Efectuado através de funções do GLUT Viewport ou Janela do ecrã Resolução = Resolução do ecrã Funcionamento de um programa: int main(int argc, char** argv){ glutcreatewindow("simple"); glutdisplayfunc(mydisplay); glutmainloop(); } 5 52 Funções GLUT Remoção de Elementos Ocultos #include <GL/glut.h> int main(int argc, char** argv) { glutinit(&argc,argv); glutinitdisplaymode(glut_single GLUT_RGB GLUT_DEPTH); glutinitwindowsize(500,500); glutinitwindowposition(0,0); glutcreatewindow("simple program"); glutdisplayfunc(mydisplay); } myinit(); glutmainloop(); 53 54 9
Remoção de Elementos Ocultos em OpenGL Buffer adicional Z-Buffer Inicializar: glenable (GL_DEPTH_TEST); Animação Redesenhar um objecto Como se consegue que duas imagens não sejam vistas em sequência? Qual a frequência de desenho? Limpar antes de cada desenho: glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT) 55 56 Exemplo Execução Em cada ciclo limpar o buffer de cor: glclear (GL_COLOR_BUFFER_BIT); Desenhar o Polígono em cada posição glbegin (GL_POLYGON);... glend (); 57 58 Uso de dois Buffers Frequência de desenho Mostrar num Buffer (front buffer) Desenhar num 2º Buffer (back buffer) Para trocar os buffers na função de Desenho: glutswapbuffers (); Mas: glutinitdisplaymode (... GLUT_DOUBLE); Desenho das imagens demasiado depressa... Como se controla a velocidade de desenho? Usar mecanismos de timing do Sistema Operativo... Troca de buffers sincronizada com a frequência de refrescamento Uso do GLUT 59 60 0
Funcionamento no GLUT Sumário Int n = 60; /* frequencia de refrescamento */ gluttimerfunc {00, mytimer, n); /* funcao de retorno */ Void mytimer (int v); { glutpostredisplay (); gluttimerfunc (000/n, mytimer, v); } Sistemas de Coordenadas Introdução à Máquina OpenGL Primitivas e Atributos Introdução à Cor Projecções Interacção com o Sistema de Janelas Remoção de Elementos Ocultos Fundamentos de Animação 6 62
This document was created with Win2PDF available at http://www.win2pdf.com. The unregistered version of Win2PDF is for evaluation or non-commercial use only. This page will not be added after purchasing Win2PDF.