1-Introdução ao OpenGL
|
|
|
- Cássio Lopes Silva
- 8 Há anos
- Visualizações:
Transcrição
1 1-Introdução ao OpenGL Prof. João Madeiras Pereira
2 Bibliografia A) OpenGL Programming Guide (4ª Edição) B) Computer Graphics Principles and Practice (Foley, Van Dam)
3 Programa 1- OpenGL (Bibliotecas, Exemplos de Utilização, Pipelines) (Cap. A1, pág. 1-23) 2-Desenho de Objectos Geométricos, Transformações Geométricas e Animação) (Cap. A1, pág , A2, pág , A3) 3-Interacção (event-driven input, display-lists, Menus, Picking) (Cap. B2, pag , B4, pag , B10, pag , A7, pág , A13, pag ) 4-Cor e Iluminação (Cap. A4 e A5)
4 Abordagem Nesta introdução revisitam-se conceitos importantes leccionados em CG através da sua concretização em OpenGL. Considerando que a parte prática de MVT é desenvolvida recorrendo a OpenGL, sempre que relevante, apresentam-se aspectos específicos e dão-se alguns exemplos de aplicações.
5 1-OpenGL (Bibliotecas, Exemplos de Utilização, Pipelines)
6 O OpenGL Interface Procedimental (API, Application Programming Interface ) Vantagens: Norma industrial (mais de 300 empresas) Estável Portável Escalável Fácil de Usar Bem documentada
7 Pipeline Revisitado Coordenadas 3D do Modelo Modelos 3D Transf. Modelação e Visualização Coordenadas 3D do Mundo Projecção Coordenadas 2D Normal. Coordenadas 2D Discretização Criação da Imagem Primitivas 3D Primitivas 2D Quadrículas
8 Pipeline OpenGL Simples Versão simplificada do pipeline OpenGL
9 Pipeline OpenGL Vertex Data Display List Evaluators Per-Vertex Operations and Primitive Assembly Rasterization Per-Fragment Operations Frame buffer Pixel Data Pixel Operations Texture Assembly
10 Vértices e Quadrículas São suportados objectos de dois tipos: Geométricos (Vértices 3D) Imagens (Quadrículas 2D ou pixels) Existem processadores diferentes para cada tipo de objectos. As máquinas OpenGL permitem a interligação dos 2 pipelines.
11 Lista de Desenho Os objectos (geometria ou quadrículas), por omissão são imediatamente transformados numa Imagem (modo imediato). Pode ser usada a Lista de Desenho (display list) para armazenar comandos de desenho para processamento posterior (modo de retenção).
12 Avaliadores Convertem representações paramétricas de objectos com Texturas e Cor (a partir das coordenadas dos pontos de controlo) na geometria de uma malha de polígonos planares (facetas) e calculam ainda: Normais Coordenadas de texturas Cor
13 Operações sobre vértices Conversão dos vértices em Primitivas. Inclui: Transformações de Modelação e Visualização; Cálculo de coordenadas para mapeamento de texturas Cálculo de iluminação (usando a normal, a posição da fonte de luz, as propriedades dos materiais);
14 Assemblar Primitivas São criadas primitivas geométricas completas (vértices transformados, com cor, profundidade e coordenada de textura) obtidas através de: Recorte; Remoção de elementos invisíveis.
15 Operações sobre Quadrículas As quadrículas sofrem as seguintes operações: Desempacotadas (de vários formatos suportados); Escaladas, transladadas e aplicadas operações lógicas; Limitadas a um valor máximo; Enviadas para a memória de texturas ou para o andar de discretização.
16 Assemblar Texturas Várias texturas, descritas através de pixelmaps podem ser aplicadas a objectos geométricos 3D. Para isso define um bloco de memória onde são armazenadas as diferentes imagens de texturas para posterior selecção e mapeamento.
17 Discretização Corresponde à conversão de geometria em elementos quadrados designados por fragmentos. Estes têm correspondência directa com os pixels constituinets do framebuffer. Um fragmento inclui a cor, profundidade e valor da coordenada de uma textura. O fragmento é obtido após a aplicação de características como o tipo de linha, a dimensão do ponto e operações de antialiasing.
18 Operações sobre Fragmentos Antes de se proceder à visualização podem ser aplicadas várias operações (por omissão inactivas) como: Aplicação de textura; Cálculo de nevoeiro; Testes de recorte, alfa, estêncil, remoção de superfícies ocultas; Operações de mistura, dithering e lógicas.
19 Tipos de Dados OpenGL Portabilidade facilitada com a definição de tipos de dados OpenGL Tipo de dado OpenGL Representação interna Tipo de dado C equivalente GLbyte 8-bit integer signed char b GLshort 16-bit integer short s GLint, GLsizei 32-bit integer int ou long i GLfloat, GLclampf 32-bit floating-point float f GLdouble, GLclampd 64-bit floating-point double d GLubyte, GLboolean GLushort GLuint, GLenum, GLbitfield 8-bit unsigned integer 16-bit unsigned integer 32-bit unsigned integer unsigned char unsigned short unsigned long ou unsigned int Sufixo ub us ui
20 Convenção p/ comandos OpenGL <PrefixoBiblioteca> <ComandoRaiz> <NúmeroArgumentosOpcional> <TipoArgumentosOpcional> Exemplos: glcolor3f glcolor3i glcolor3d
21 Bibliotecas Toolkit de Alto Nível (Fahrenheit Scene Graph) Utility Library OpenGL Utility Toolkit Sistema de Gestão de Janelas glu gl glut glx, wgl,agl
22 Biblioteca glu Especificação de Texturas Transformação de Coordenadas (glulookat,..) Tessellation (triangulação de polígonos) Quadráticas Nurbs (superfícies paramétricas) Gestão de Erros (ocorrência e descrição de erros)
23 Biblioteca glut Toolkit independente do Sistema de Gestão de Janelas o qual suporta: Gestão de Janelas (criação, redesenho, posição, dimensões,..) e Tabela de Cores. Funções de Retorno (callback). Gestão das Unidades de Entrada de Dados (rato, teclado). Ciclo de Execução (glutmainloop) e Processo de Background. Desenho de Objectos 3D (Toros, Esferas, etc.)!
24 Biblioteca wgl 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.
25 Máquina de de Estados Vários modos de funcionamento definidos por variáveis de estado: Cor de desenho Estilo de desenho de linhas Posição e caracteristicas das fontes de luz Etc. Utilização dos comandos glenable() e gldisable() Exemplo: int luz; : glenable(gl_lighting); //Activa ilumninação : luz = glisenabled(gl_lighting); // retorna 1 (verdadeiro) : gldisable(gl_lighting); //Desactiva iluminação : luz = glisenabled(gl_lighting); // retorna 0 (falso) :
26 Demonstração Fog Usar a aplicação fog para mostrar: Sintaxe do OpenGL; Vários Tipos de Modelos; Desenho de imagens 3D e de texto 2D; Tipos de efeitos no cálculo da Imagem; Existência de uma hierarquia de Janelas Gráficas; Utilização dos Menus; Operação de Picking.
27 #include <windows.h> #include <GL/glut.h> Primeiro Programa void RenderScene(void) // Called to draw scene { glclear(gl_color_buffer_bit); // Clear the window with current clearing color glflush(); // Flush drawing commands } void Setup(void) // Setup the rendering state { glclearcolor(0.0f, 0.0f, 1.0f, 1.0f); } // Main program entry point void main(void) { glutinitdisplaymode(glut_single GLUT_RGB); glutcreatewindow("simple"); glutdisplayfunc(renderscene); Setup(); glutmainloop(); }
28 Funções GLUT utilizadas void glutinitdisplaymode (unsigned int mode); Define uma série de propriedades associadas às janelas que venham a ser criadas int glutcreatewindow (char* name); Abre uma janela com as características previamente definidas. Devolve o seu identificador void glutdisplayfunc (void (*func)(void)); Especifica a função a invocar sempre que o conteúdo de uma janela tem de ser redesenhado (abertura, pop-up, objectos sobrepostos ) void glutmainloop (void); Função para activação do ciclo infinito de processamento de eventos.
29 2-Desenho de Objectos Geométricos, Transformações e Animação (Cap. A1, pág , Cap. A2, pág e Cap. A3)
30 glbegin (GL_POLYGON); glvertex2f (0.0, 0.0); glvertex2f (0.0, 3.0); glvertex2f (4.0, 3.0); glvertex2f (6.0, 1.5); glvertex2f (4.0, 0.0); glend ( ); Desenhando uma Primitiva glbegin e glend marcam o início e fim de uma lista de vértices que descreve a geometria de uma primitiva com o tipo seleccionado em glbegin. Para além da função glvertex, que permite definir a geometria de cada vértice, existem outras funções que, de uma forma modal, atribuem diversas características aos vértices: glcolor (), glindex () glnormal () gltextcoord () glmaterial () definem a côr define o vector normal ao vértice define uma coordenada de textura define propriedades ópticas do material
31 Tipos de Primitivas Geométricas GL_POINTS (conjunto de pontos) GL_LINES (segmentos de recta) GL_LINE_STRIP (linha poligonal) GL_LINE_LOOP (linha poligonal fechada) GL_TRIANGLES (conjunto de triângulos) GL_TRIANGLES_STRIP (conjunto ligado de triângulos) GL_TRIANGLES_FAN (conjunto ligado de triângulos) GL_QUADS (conjunto de quadriláteros) GL_QUADS_STRIP (conjunto ligado de quadriláteros) GL_POLYGON (polígono)
32 v3 v0 v2 v1 GL_POINTS v4 v0 v6 Primitivas Gráficas Simples v4 v1 v2 GL_LINES v7 v5 v3 v0 v3 v2 v4 v1 GL_LINE_STRIP v4 v3 v2 v0 v1 GL_LINE_LOOP v1 v4 v5 v0 v2 v4 v1 v2 v3 v0 v2 v3 GL_TRIANGLES v1 v3 v5 GL_TRIANGLE_STRIP v0 v4 GL_TRIANGLE_FAN v1 v2 v5 v6 v1 v3 v5 v7 v4 v0 v1 v0 v3 v4 GL_QUADS v7 v0 v2 v4 GL_QUAD_STRIP v6 v3 v2 GL_POLYGON
33 Restrições à Definição de de Polígonos Polígonos simples, sem auto-intersecções, ou seja, intersecções entre pares de arestas. Polígonos Convexos Polígonos Simplesmente Conexos (sem buracos ) Polígonos Planares (para que a sua projecção seja sempre convexa, independentemente do ponto de observação) Polígonos mais complexos ou irregulares podem ser gerados por união de polígonos simples (Tesselation) Polígonos Válidos Polígonos Inválidos
34 Gestão de de Estado e Atributos Gráficos Tanto os atributos gráficos mais clássicos ( côr de desenho, côr de preenchimento, estilo de linha, etc ) como propriedades ou capacidades gráficas (capabilities) que afectam a síntese da cena de uma forma mais abrangente (iluminação, textura, remoção de superfícies, nevoeiro, ), são armazenados em variáveis de estado. Existem funções para activar (ON), desactivar (OFF) e interrogar variáveis de estado booleanas: (GL_DEPTH_TEST, GL_FOG, GL_LIGHTING, ) void glenable (GLenum capability); void gldisable (Glenum capability); void glisenabled (Glenum capability); Um outro conjunto de funções permite obter o valor corrente de variáveis de estado mais complexas (GL_CURRENT_COLOR, GL_CURRENT_NORMAL, etc..) void glgetbooleanv (GLenum pname, Glboolean *params); void glgetintegerv (GLenum pname, GLint *params); void glgetfloatv (GLenum pname, GLfloat *params); void glgetdoublev (GLenum pname, GLdouble *params); void glgetpointerv (GLenum pname, GLvoid **params);
35 Alguns Atributos Gráficos glpointsize: gllinewidth: gllinestipple: glpolygonmode: glfrontface: glcullface: glpolygonstipple: Tamanho de um ponto em pixels Espessura de linha em pixels Padrão para linhas Modo de desenho do polígono (point, line, fill) Sentido de Circulação para Front-Faces e Back-Faces Escolha de qual o tipo de faces a remover antes da rasterização Padrão de preenchimento de polígonos
36 Vértices A cada vértice pode associar-se: Cor definida por valor ou como índice de uma tabela de cores Vector normal Coordenada de uma textura Propriedade do material Indicação precede uma aresta de fronteira E podem ser definidos através de Arrays.
37 Transformações Geométricas Vértices e Normais são transformadas pela matriz de Modelação-Visualização e pela matriz de Projecção. Para facilitar a composição de Matrizes existe um gestor de stack de matrizes. Podem ser usados 6 planos adicionais de recorte.
38 Desenho de Objectos As Primitivas são recortadas: 1º Planos de Recorte definidos pela aplicação 2º Volume de Recorte: E transformadas em coordenadas de ecrã dentro de um enquadramento o qual é definido por: Número de planos Posição e dimensões do viewport
39 Rasterização de Linhas As funções associadas a linhas permitem definir: Diâmetro do ponto a discretizado, por omissão 1.0. Largura das linhas discretizadas, quer tenha ou não sido aplicado um processamento de antialiasing. Padrão de preenchimento de linha e respectivo factor multiplicativo.
40 Rasterização de Polígonos As funções associadas a polígonos permitem definir: Padrão de preenchimento de polígono; Faces dos polígonos que são traseiras; Qual a face da frente do polígono; Modo como os polígonos são rasterizados.
41 Demonstração shapes Usar a aplicação shapes para mostrar: 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).
42 Transformações Geométricas no no Pipeline Numa perspectiva de Câmara Virtual, a definição das transformações necessárias ao posicionamento da câmara (visualização) e disposição dos objectos na cena (modelação) faz-se, geralmente, na seguinte sequência: 1. Posicionar e orientar a câmara dentro do espaço da cena (Transformação de Visualização). 2. Compôr a cena, colocando os objectos constituintes nas posições e orientações com que se pretende que sejam fotografados (Transformação de Modelação). 3. Escolher uma lente para a câmara ou ajustar o Zoom (Transformação de Projecção). 4. Determinar as dimensões e posição da fotografia final (Transformação de Viewport). Vertex ModelView Matrix Matrix Projection Matrix Matrix Perspective Division Viewport Transformation World coordinates Eye Coordinates Clip Coordinates Normalized Device Coordinates Window Coordinates
43 A Definição de de Transformações 1) As matrizes de Modelação e de Visualização ficam concatenadas numa única matriz, designada MODELVIEW. 2) Existe uma função para seleccionar a matriz sobre a qual se pretende efectuar uma alteração. glmatrixmode ( ) permite comutar entre GL_MODELVIEW (Modelação-Visualização) e GL_PROJECTION (Projecção). 3) Sempre que é aplicada uma nova matriz de transformação M, essa matriz é multiplicada pela matriz corrente C (glmultmatrix (matrix*)), à sua direita: CM. Deste modelo resulta que as transformações são aplicadas aos objectos pela ordem inversa daquela por que são definidas. 4) Dada a dependência entre visualização e modelação, o programador deve começar por definir a transformação de visualização e só depois as transformações de modelação, para que a primeira possa afectar os objectos depois de devidamente posicionados e orientados na cena. 5) Dado que nem sempre se pretende um efeito acumulativo, existem funções para estabelecer um dado valor para a matriz corrente (glloadmatrix (matriz*)) ou inicializá-la com a matriz identidade (glloadidentity ()).
44 Transformações de de Model. e Vis. Básicas Quando se pretende aplicar transformações básicas, o opengl fornece funções utilitárias que, face a glmultmatrix, têm a vantagem de calcular as matrizes a partir dos parâmetros de transformação: gltranslate (x, y, z); glrotate (angle, x, y, z); glscale (x, y, z); Transformação de Objectos versus Transformação de Referencial y Objecto: 1º Translação 2º Rotação R y T Referencial: 1º Rotação 2º Translacção z R T x z x Nota: Quando se aplicam transformações de escala, a visão por referencial pode tornar-se menos intuitiva. Com escalamento não uniforme e rotações, os eixos do referencial local podem deixar de ser ortogonais.
45 Definir a Transformação de de Visualização 1) Através de Sucessivas Translacções e Rotações A definição da Transformação de Visualização (posição e orientação da câmara dentro do espaço da cena) pode ser feita por invocação das funções gltranslate e glrotate. Os parâmetros indicam movimentos dos objectos face a uma câmara estática e os seus valores simétricos podem ser encarados como movimentos da câmara face aos objectos. up 2) Através da Função glulookat (): Y vector glulookat ( eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz ); eye center X Z
46 Transformação de de Projecção A definição desta transformação assume a câmara posicionada na origem do referencial, a apontar no sentido negativo do eixo dos zz. A utilização de rotações e translacções para alterar a posição e orientação do volume de visualização é possível mas não recomendada (controlo pouco intuitivo). 1) PERSPECTIVA: Volume de Visualização Especificado por glfrustum () void glfrustum ( left, right, bottom, top, near, far ); near far left top Nota: Com esta função é possível definir um Volume de Visualização assimétrico bottom right
47 Transformação de de Projecção (cont.) 2) PERSPECTIVA: Vol. de Visualiz. especificado por gluperspective () void gluperspective ( fovy, aspect, near, far ); fovy: abertura da câmara, medida por um ângulo no plano xoz aspect = w / h near fovy w far h 3) PARALELA (Ortogonal): Vol. de Visualização especificado por glortho () void glortho ( left, right, bottom, top, near, far ); viewpoint left top right bottom near far
48 Demonstração projection Usar a aplicação projection para mostrar: Vários tipos de projecção; Utilização de função do glulookat; Planos de Recorte; Abertura da câmara.
49 Transformação de de Viewport Os objectos gráficos, depois de transformados pelas matrizes MODELVIEW e PROJECTION, e depois de recortados pelos seis planos delimitadores do volume de visualização, devem ser submetidos à Transformação de Viewport: Define-se a porção da área do dispositivo de saída onde deve ser mapeada a projecção da cena. Essa definição é feita em coordenadas da janela activa (canto inferior esquerdo. largura e altura). Por defeito, o viewport coincide com a totalidade da janela gráfica. void glviewport (GLint x, GLint y, GLsizei width, GLsizei height); Notas : Se a relação de aspecto do Viewport não fôr a mesma da janela de projecção, a imagem projectada pode sofrer distorção. A aplicação deve detectar eventos de redimensionamento da janela gráfica e modificar o viewport de acordo com essa alteração
50 Mapeamento janela-viewport Calcular a transformação que mapeia a janela de visualização limitada por Xw min, Xw max, Yw min e Yw max num viewport de limites Xv min, Xv max, Yv min e Yv max. (consulte secção 5.4 do livro Computer Graphics do Foley, Van Dam)
51 #include <windows.h> #include <gl/glut.h> Desenhando formas geométricas void RenderScene(void) // Called to draw scene { glclear(gl_color_buffer_bit); // Clear the window with current clearing color glcolor3f(1.0f, 0.0f, 0.0f); // Set current drawing color to red glrectf(100.0f, 150.0f, 150.0f, 100.0f); // Draw a filled rectangle with current color glflush(); // Flush drawing commands } void Setup(void) // Setup the rendering state { glclearcolor(0.0f, 0.0f, 1.0f, 1.0f); }
52 Desenhando formas geométricas (cont.) void ChangeSize(GLsizei w, GLsizei h) // Called by GLUT library when the window has changed size { // Prevent a divide by zero if(h == 0 h = 1; glviewport(0, 0, w, h); // Set Viewport to window dimensions glmatrixmode(gl_projection); // Reset coordinate system glloadidentity(); // Establish clipping volume (left, right, bottom, top, near, far) if (w <= h) glortho (0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0); else glortho (0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0, -1.0); glmatrixmode(gl_modelview); glloadidentity(); } void main(void) // Main program entry point { glutinitdisplaymode(glut_single GLUT_RGB); glutinitwindowsize(400,350); glutinitwindowposition(10,10); glutcreatewindow("glrect"); glutdisplayfunc(renderscene); glutreshapefunc(changesize); Setup(); glutmainloop(); }
53 Desenhando formas geométricas (cont.) void glutreshapefunc (void (*func)(int width, int height)); Especifica a função a invocar quando a janela é criada, redimensionada ou transladada. (essa função invoca glviewport para redefinir a área de ecrã e redefine a matriz de projecção). Necessário garantir relações de aspecto iguais entre o viewport e a janela de visualização (definida pelo volume de visualização) OpenGL possui dois tipos de Matrizes de Transformação: Projecção (afecta as dimensões do volume de visualização) e Visualização (afecta os objectos da cena) glmatrixmode define qual o tipo de matriz a ser utilizada em futuras transformações FunçãoglOrtho não define um volume de visualização mas sim uma matriz de projecção definida pelos seus parâmetros a qual é multiplicada pela matriz de projecção corrente.
54 Stacks de de Matrizes void glpushmatrix (void); PUSH Empurra todas as matrizes do stack corrente um nível para baixo e a matriz do nível superior é copiada, de modo que as duas primeiras matrizes sejam iguais. Demasiadas operações de push podem provocar a ocorrência de um erro. void glpopmatrix (void); Retira a matriz do topo do stack e destrói o seu conteúdo. Aquela que era a segunda matriz, passa a ocupar o topo do stack. Esta operação gera um erro quando executada sobre um stack com uma só matriz. glmatrixmode selecciona o stack sobre o qual se pretende efectuar uma operação. POP O stack ModelView tem tipicamente 32 níveis (importante para modelação hierárquica) e o stack Projection apenas 2 níveis (geralmente não se efectua composição de projecções).
55 Utilização do do Stack //alteração ao código que desenhava um rectângulo para // que este seja escalado void RenderScene(void) { glclear(gl_color_buffer_bit); glcolor3f(1.0f, 0.0f, 0.0f); //Save the current modelview matrix by pushing // the current transformation on the stack glpushmatrix( ); // Scale Ex=1.5, Ey=0.5, Ez=1 glscalef(1.5,0.5,1); glrectf(100.0f, 150.0f, 150.0f, 100.0f); } // Restore the modelview matrix by popping it // of the matrix stack glpopmatrix( ); glflush();
56 Animação:um exemplo Um simples programa de animação em que um rectângulo se movimenta no ecrã. Ver o código em: Bounce_c.htm
57 3-Interacção (Cap. B2, pag , B4, pag , B10, pag , A7, pág , A13, pag )
58 Interacção APIs devem possibilitar o desenho de aplicações gráficas interactivas OpenGL não suporta directamente a interacção Razão: portabilidade Solução: uso do toolkit GLUT que fornece a funcionalidade mínima A GLUT esconde as complexidades inerentes às interacções existentes entre o sistema de janelas, o gestor de janelas e o sistema gráfico
59 Dispositivos de entrada Dispositivos físicos: características particulares Dispositivos lógicos: propriedades são especificadas em termos do que eles fazem na perspectiva da aplicação (abstração de mais alto nível) Portanto: Dispositivos lógicos caracterizam-se pela interface com o programa do utilizador e não pelas suas características físicas
60 Dispositivos físicos de entrada Dispositivos tipo apontador: indicam uma posição no ecrã (ex: rato, trackball, joystick, lightpen, mesa digitalizadora Dispositivos tipo teclado: devolvem um código de caracteres (como o ASCII) ao programa (ex: teclado de mesa) Os dispositivos tipo apontador podem ser de posicionamento relativo (ex: rato) ou de posicionamento absoluto (mesa digitalizadora ou lightpen) Dispositivos 3D: spaceball (seis graus de liberdade), luvas VR, etc.
61 Dispositivos lógicos de entrada 2 características que descrevem o comportamento lógico dos dispositivos de entrada (na perspectiva da aplicação): Que medidas são fornecidas à aplicação? Em que instante são essas medidas fornecidas? 6 classes de dispositivos lógicos definidos pelo GKS e PHIGS OpenGL não segue esta abordagem, uma vez que nos modernos sistemas de janelas, a entrada de informação não pode ser sempre dissociada completamente das propriedades físicas dos dispositvos de input
62 Classes de dispositivos lógicos de entrada String: devolve cadeias de caracteres ASCII. Usualmente é implementado através de um teclado físico. OpenGL não os distingue Locator: devolve uma posição em coord. do Mundo. OpenGL associa a esta classe um dispositivo tipo apontador. Necessário converter coord. de ecrã em coord. do Mundo. Pick: Devolve um identificador de um objecto. Utiliza-se geralmente um dispositivo apontador mas com uma interface de software específica. Em OpenGL utiliza-se o processo selection Choice: Seleccionar uma opção entre múltiplas escolhas. Em OpenGL (GLUT) recorre-se à utilização de widgets tipo menus, scrollbars e botões. Ex: menu com n opções Dial: entrada analógica. Em OpenGL, novamente utiliza-se widgets como por exemplo as slidebars Stroke: Devolve um array de posições. Em OpenGL, isto implementa-se através da pressão de um botão do rato, durante a qual se procede à transferência de informação, e da libertação do referido botão que corresponde ao fim dessa transferência
63 Medição e Trigger Medida: os dados que o dispositivo gera Trigger: propriedade física do dispositivo que é responsável por enviar um sinal ao computador Exemplos: Teclado -> medidas: caracteres ASCII; trigger: tecla de enter Rato -> medidas: posições (x, y), trigger: botão Além da informação pretendida a medida pode incluir informação adicional como, por exemplo, um estado: no caso de um rato, se a medida for um id de um objecto (pick), há que contemplar a possibilidade de o utilizador premir o botão sem ter apontado para um objecto.
64 Modos de Entrada A medida de um dispositivo pode ser obtida por três modos distintos Um modo é definido pela relação entre o processo de medida e o trigger. Normalmente a inicialização de um dispositivo de entrada inicia o processo de medida, cujos dados são guardados em buffers e podem ser utilizados ou não pela aplicação Modo baseado em pedidos (request) Modo baseado em amostragem (sample):» úteis em situações em que o programa controla o utilizador Modo baseado em eventos: utilizado em situações onde o utilizador conduz ou controla o fluxo de execução do programa
65 Modos de de Entrada (cont.)
66 Modos de Entrada (cont.) Modo baseado em pedidos (aplicações não-gráficas): a medida não é devolvida ao programa até ao instante do disparo do trigger. Ex: o programa detém-se na instrução scanf e aguarda que o utilizador prima a tecla enter Modo baseado em amostragem: assim que a função é chamada, a medida é enviada à aplicação. Não é necessário o trigger. Os modos anteriores não permitem (ou é extremamente díficil) gerir aplicações com múltiplas entradas e as quais controlam a execução do programa (simulador de voo- não sabemos quais os dispositivos que o piloto irá utilizar em qualquer instante da simulação) Modo baseado em eventos: cada vez que utilizador realiza o trigger do dispositivo é gerado um evento. Este pode ser processsado de 2 modos: Guardado numa Fila de Eventos (event queue): GKS e Phigs Associação com uma função callback
67 Gestão de de Eventos em em OpenGL void glutdisplayfunc (void (*func)(void)); Especifica a função a invocar sempre que o conteúdo de uma janela tem de ser redesenhado. (abertura, pop-up, objectos sobrepostos ) void glutreshapefunc (void (*func)(int width, int height)); Especifica a função a invocar quando a janela é redimensionada ou transladada. (essa função invoca glviewport para redefinir a área de recorte e redefine a matriz de projecção) void glutpostredisplay (void); Marca a janela corrente como necessitando de ser redesenhada (invocar glutdisplayfunc logo que possível) void glutkeyboardfunc (void (*func)(unsigned int key, int x, int y)); Especifica a função a invocar quando o operador prime uma tecla com um dado código ASCII. X e Y indicam a posição do rato no instante da interacção.
68 Gestão de de Eventos em em OpenGL (cont.) void glutspecialfunc (void (*func)(unsigned int key, int x, int y)); Estabelece a função callback que é chamada pela GLUT cada vez que uma tecla que gera código não-ascii é pressionada, tais como Home, End, PgUp, PgDn, F1 e F2. Os valores válidos: GLUT_KEY_F1, GLUT_KEY_F2, GLUT_KEY_F3, GLUT_KEY_F4, GLUT_KEY_F5, GLUT_KEY_F6, GLUT_KEY_F7, GLUT_KEY_F8, GLUT_KEY_F9, GLUT_KEY_F10, GLUT_KEY_F11, GLUT_KEY_F12, GLUT_KEY_LEFT, GLUT_KEY_UP, GLUT_KEY_RIGHT, GLUT_KEY_DOWN, GLUT_KEY_PAGE_UP, GLUT_KEY_PAGE_DOWN, GLUT_KEY_HOME, GLUT_KEY_END, GLUT_KEY_INSERT. void glutmousefunc (void (*func)(int button, int state, int x, int y)); Especifica a função a invocar quando um dos botões do rato (left, middle, right) é premido ou libertado. Três valores são válidos para o parâmetro button: GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON e GLUT_RIGHT_BUTTON. O parâmetro state pode ser GLUT_UP ou GLUT_DOWN. Os parâmetros x e y indicam a localização do mouse no momento que o evento ocorreu. void glutmotionfunc (void (*func)(int x, int y)); Especifica a função a invocar quando o cursor controlado pelo rato se move dentro da janela, ao mesmo tempo que estão premidos um ou mais botões do mesmo. X e Y indicam a posição do cursor quando o evento ocorre.
69 Programa Interactivo: Exemplo Neste exemplo foram implementadas as seguintes interações: sempre que o utilizador pressiona a tecla "R" ou "r", o rectângulo é exibido com a cor vermelha; ao pressionar a tecla "G" ou "g" o retângulo é exibido com a cor verde; cada vez que o utilizador clica com o botão esquerdo do mouse, o tamanho do rectângulo é alterado; e cada vez que as teclas KEY_UP e KEY_DOWN são pressionadas ocorre zoom-in e zoom-out, respectivamente. Ver o código em Interaction.c
70 Listas de Desenho Uma Lista de Desenho (Display List) éuma sequência não editável de comandos GL que têm que ser armazenados para posterior execução. Quando a lista é criada os comandos podem ser só armazenados ou também executados. Uma Lista de Desenho pode conter uma chamada a outra Lista de Desenho (hierarquia de listas). Comandos que não possam ser armazenados são executados imediatamente.
71 OpenGL em Modo de de Retenção: Display Lists Num mesmo programa é possível intercalar comandos opengl a executar em modo imediato e comandos em modo de retenção, encapsulados em objectos gráficos: as display lists. Umadisplay list é um grupo de comandos opengl, registados e organizados de uma forma eficiente, para serem executados mais tarde, provocando o mesmo efeito que se obteria com a sua execução em modo imediato. Uma display list regista apenas os comandos opengl invocados entre as chamadas às funções glnewlist e glendlist. Coordenadas e outras grandezas, correspondentes a argumentos de comandos OpenGL, são registadas na display list com o valor que tinham quando a lista estava a ser compilada. Cada display list é identificada por um índice inteiro fornecido como argumento em glnewlist. Esse mesmo índice deve ser indicado quando se pretende executar uma display list, através da função glcalllist.
72 Criação e Execução de de Display Lists void glnewlist (GLuint list, GLenum mode); list: mode: valor inteiro positivo que identifica univocamente uma display list GL_COMPILE: quando não se pretende que os comandos OpenGL sejam executados enquanto são registados na display list GL_COMPILE_AND_EXECUTE: quanto se pretende que os comandos OpenGL sejam imediatamente executados ao mesmo tempo que são registados. void glendlist (void); Estabelece o fim de uma display list void glcalllist (GLuint list); Executa a display list identificada pelo valor de list. Os comandos são executados pela ordem por que foram registados, tal como se fossem invocados em modo imediato.
73 Display Lists: alguns aspectos relevantes 1. Optimizações do Desempenho Por questões de desempenho, uma display-list é uma cache de comandos e não um objecto numa base de dados. Como consequência, as display-lists não são editáveis. Num ambiente distribuido, em que a aplicação se encontra numa máquina cliente e o processo OpenGL reside numa máquina-servidora, as display-lists são armazenadas no servidor, com consequente redução do tráfego da rede e aumento de desempenho. Mesmo em modo local, o mecanismo de display-list pode tornar-se mais eficiente dado que os comandos podem ser pré-processados e armazenados da forma mais compatível possível com as características do hardware gráfico de base (ex: cálculo dos coeficientes das matrizes de transformação a partir dos parâmetros de transformação). Em certas implementações de OpenGL mais sofisticadas, pode mesmo proceder-se à fusão de comandos adjacentes, como a concatenação de matrizes de transformação.
74 Display Lists: alguns aspectos relevantes (cont.) 2. O que se regista numa Display List e como afecta o estado do sistema Os valores registados para os argumentos dos comandos de uma display-list, são os que vigoravam na altura em que a display-list estava a ser compilada. Mesmo que se trate de uma variável à qual se atribui posteriormente um outro valor, a display-list não é alterada. A execução de uma Display-List pode alterar o valor de variáveis de estado OpenGL e essas alterações persistem após a execução da lista. Nem todos os comandos OpenGL podem ser registados numa display-list. Comandos que involvam parâmetros por referência ou devolvam um valor, não são registados dado que a lista pode ser executada fora do contexto em que determinadas variáveis foram definidas. Esses comandos são executados como se fossem invocados em modo imediato. 3. Display Lists Hierárquicas Podem criar-se display-lists hierárquicas, executando outras listas no corpo de uma lista inicial. Se pretendermos memorizar o estado do sistema antes de executar uma sub-lista e repôr esse mesmo estado após a sua execução, há que efectuar operações explícitas de push e pop de matrizes e atributos (glpushmatrix, glpushattrib, glpopmatrix, glpopattrib)
75 #define MY_CIRCLE_LIST 1 Display Lists: exemplo void build_circle (void) { Glint i, Glfloat cosine, sine; glnewlist (MY_CIRCLE_LIST, GL_COMPILE); glbegin(gl_polygon); for(i=0, i<100, i++) { cosine=cos(i*2*pi/100.0); sine=sin(i*2*pi/100.0); glvertex2f(cosine, sine); } glend; glendlist(); } Observações: as funções C não são guardadas. As coordenadas dos pontos são calculadas e copiadas para a display list (compilação) Para invocar esta display list basta fornecer o seguinte comando: glcalllist(my_circle_list);
76 Gestão de de Listas e seus Índices A utilização directa e indiscriminada de índices para as listas a criar pode provocar efeitos indesejados, como o apagamento de uma lista, por utilização indevida do seu índice. GLuint glgenlists (Glsizei range); Aloca um número (range) de índices de display-lists contíguos e não utilizados. O valor de retorno corresponde ao índice que marca o início da série. Posteriores invocações desta função não devolvem os mesmos índices, a menos que tenham sido entretanto apagados. GLboolean glislist (Gluint list); Retorna TRUE se o valor list corresponder a um índice correntemente utilizado e FALSE caso contrário. Void gldeletelists (GLuint list, Glsizei range); Destroi um número range de listas, começando pelo índice especificado por list. A tentativa de apagar uma lista inexistente não produz qualquer efeito.
77 Selecção de de Objectos Em aplicações interactivas é fundamental que o sistema gráfico de base forneça um qualquer mecanismo de selecção de objectos ou partes de objectos presentes numa cena. O OpenGL fornece um mecanismo de selecção que automaticamente identifica os objectos que são desenhados sobre uma determinada região da janela corrente. É possível integrar e completar esse mecanismo numa função que permita identificar o objecto ou objectos seleccionados pelo utilizador através de um cursor gráfico ( picking ). Cursor Objectos Janela de Pick
78 O Modo de de Operação Selection Para utilizar o mecanismo de selecção do OpenGL começa-se por desenhar a cena no frame-buffer, comutar em seguida para o modo de operação Selection e invocar de novo os comandos necessários ao redesenho de toda a cena. Em modo Selection, o conteúdo do frame-buffer não é alterado, não obstante serem invocadas operações de desenho Quando se abandona o modo Selection, o sistema devolve um registo de todas as primitivas que teriam intersectado o volume de visualização (definido pelas transformações Projection e pelos planos de recorte adicionais), caso tivessem sido desenhadas. Cada primitiva nessas condições gera um selection hit. Cada selection hit regista um conjunto de nomes (valores inteiros) identificadores da primitiva e outros dados com ela relacionados - hit record. Os vários hit records são armazenados num mesmo array. O conjunto de identificadores inteiros registado para cada primitiva corresponde aos valores que estão presentes num stack de nomes ( name stack ) no instante em que é dada a ordem de desenho da primitiva. O conteúdo desse stack deve ir sendo alterado entre sucessivos comandos de desenho, de modo a distinguir diferentes primitivas (a identificação é hierárquica).
79 Passos para a activação do do Modo de de Selecção 1) Especificar o array a utilizar para o registo dos selection hits void glselectbuffer (GLsizei size, GLuint *buffer); size: número máximo de valores que podem ser armazenados buffer: ponteiro para um array de unsigned integers 2) Activar o modo Selection por invocação da função glrendermode com o valor GL_SELECT GLint glrendermode (GLenum mode); /* por defeito GL_RENDER */ Quando se comuta de GL_SELECT para GL_RENDER o valor devolvido pela função indica o número de selection hits que foram registados.
80 Passos para a activação do do Modo de de Selecção (cont.) 3) Inicializar o stack de nomes recorrendo às funções glinitnames e glpushname void glinitnames (void); Cria um Stack de Nomes vazio void glpushname (Gluint name); Através de uma operação de push, acrescenta uma entrada ao stack, com o valor name. Convém efectuar uma operação de push logo na fase de inicialização para que haja pelo menos uma entrada cujo valor pode depois ser redefinido por glloadname. 4) Definir o Volume de Visualização ( View Volume ) que se pretende utilizar para efeitos de selecção Sendo geralmente diferente do volume que se utiliza para efeitos de visualização, o estado das transformações deve ser gravado e reposto antes e depois do processo de selecção, com as funções glpushmatriz e glpopmatrix
81 Passos para a activação do do Modo de de Selecção (cont.) 5) Alternar comandos de desenho de primitivas com comandos de manipulação do stack de nomes. /* Com um só nível hierárquico */ glinitnames ( ); glpushname (-1); glloadname (1); drawoneobject (); glloadname (2); drawanotherobject (); glloadname (3); drawyetanotherobject (); Os comandos glpushname, glpopname e glloadname são ignorados se não se estiver em modo de selecção. O mesmo código de desenho pode ser usado para Rendering ou Selection 6) Abandonar o Modo Selection e processar a informação armazenada no array de Selection Hits. Cada hit regista os seguintes ítens: O número de nomes presentes no stack de nomes na altura em que o hit aconteceu Valores mínimo e máximo em z de todos os vértices da primitiva que intersectou o view-volume Todos os valores contidos no stack de nomes na altura em que se deu o hit, começando pelo elemento do nível inferior.
82 Operação de de Pick com base no no Mecanismo de de Selecção Utilizar uma Matriz de Picking, em conjugação com a matriz de projecção para restringir a selecção de primitivas a uma pequena região do viewport, tipicamente centrada na posição indicada por um cursor. Regras a considerar: 1) A rotina que define a Matriz de Pick deve ser invocada antes da definição da Projecção 2) A operação de pick é geralmente despoletada a partir de um evento proveniente de um dispositivo de interacção de tipo locator. void glupickmatrix (GLdouble x, GLdouble y, GLdouble width, GLdouble height, GLint viewport [4] ); x, y: centro da região de pick em coordenadas da janela (posição do cursor) width, height: dimensões da região de pick em coordenadas do ecrã (sensibilidade) viewport: limites do viewport corrente
83 Transformações Inversas Para efectuar o pick é necessário obter, a partir de coordenadas 2D da imagem de um vértice, a respectiva localização 3D. Com algumas restrições (por exemplo matriz que não se pode inverter) a função gluunproject efectua essa operação.
84 4-Cor e Iluminação (Cap. A4 e A5)
85 Definição de Cor Modelo RGB e A (transparência) sendo possível interrogar o número de planos existentes para cada canal (R,G,B,A). Pode ser definida cor de modo directo ou indexado (entrada numa Tabela de Cores).
86 Propriedades Materiais Pode definir-se propriedades das faces dianteiras e traseiras (ou de ambas) dos polígonos através dos seguintes parâmetros: Cores ambiente e difusa; Cor especular e respectivo expoente de brilho; Cor de emissão (fonte de energia luminosa).
87 Modelos de Sombreamento Podem ser definidos os Modelos de Sombreamento Constante Gouraud (por omissão)
88 Cálculos de de Iluminação Descreve-se a luz proveniente das fontes e a iluminação da superfície dos objectos com base num modelo cromático RGB. A côr de uma fonte de luz é definida pela percentagem (0 a 1) de luz vermelha, verde e azul que emite. Os materiais constituintes das superfícies a iluminar são caracterizados pela percentagem de luz vermelha, verde e azul recebida, que voltam a reflectir segundo variadas direcções. Uma mesma cena pode ser iluminada por mais que uma fonte de luz. Cada uma dessas fontes pode ser activada ou desactivada independentemente das restantes. Parte da luz provêm directamente das fontes de luz, de uma direcção e posição definidas, e parte provêm de direcção indefinida, como resultado de múltiplas reflexões da luz, proveniente das fontes, sobre os objectos da cena (luz ambiente). Pode definir-se uma componente de luz ambiente global, para a qual não é possível identificar sequer a fonte de origem. A iluminação de um objecto resulta da soma de 4 componentes distintas: luz emitida, luz ambiente, luz difundida e luz reflectida ou especular.
89 As As Várias Componentes de de Luz Luz Emitida: Luz emitida pela própria superfície do objecto, não afectada por qualquer fonte de luz. Luz Ambiente: Luz proveniente de todas as direcções (devido a múltiplas reflexões na cena) e reflectida pela superfície em todas as direcções. Luz Difundida: Luz proveniente de uma direcção bem definida e reflectida igualmente segundo todas as direcções. A quantidade de luz reflectida depende do ângulo de incidência da luz na superfície. O brilho da superfície não depende da direcção de observação. Luz Especular: Luz proveniente de uma direcção bem definida e que tende a reflectir-se em torno de uma direcção preferencial. O brilho da superfície depende da direcção de observação.
90 Conjugação das Propriedades das Fontes e dos Materiais As Fontes de Luz Embora uma fonte real emita luz numa só distribuição de frequências, o OpenGL considera valores de R G B diferentes para as componentes ambiente, difusa e especular (valores LR, LG, LB no intervalo [0, 1] ). Os Materiais Para os materiais definem-se valores de R, G, B (MR, MG, MB no intervalo [0,1]), um conjunto para cada uma das componentes de luz reflectida: ambiente, difusa e especular. A Luz Reflectida por Componente A luz reflectida por um objecto, em cada uma das diferentes componentes, é dada pelo produto entre os correspondentes valores de R, G, B da fonte de luz e do material: (LR * MR, LG * MG, LB * MB) A Iluminação Total A iluminação de um objecto, ou seja, a totalidade da luz que nele se reflecte e atinge a vista do observador obtém-se somando entre si os valores R G B de cada componente de reflexão. (R1+R2 + + Rn, G1 + G2 + + Gn, B1 + B2 + + Bn ) O resultado de cada soma é truncado ao valor 1, correspondente ao máximo de intensidade.
91 Representação de de uma Cena com Iluminação Para obter, em opengl, a representação de uma cena com cálculos de iluminação, há que efectuar, necessariamente, os seguintes passos: 1) Definir, para todos os objectos presentes na cena, os vectores normais a cada um dos seus vértices. 2) Criar, posicionar e seleccionar uma ou mais fontes de luz. 3) Definir os parâmetros do modelo de iluminação (características, como o nível de luz ambiente global e a localização efectiva do ponto de observação). 4) Definir, para todos os objectos presentes na cena, as propriedades ópticas dos respectivos materiais.
92 Criação e Activação de de Fontes de de Luz 1) Sucessivas invocações da função gllight*() permitem estabelecer diferentes características para uma dada fonte de luz gllight{if}[v] (Glenum light, Glenum pname, TYPE param); light: índice da fonte a parametrizar (GL_LIGHT0, GL_LIGHT1,, GL_LIGHT7) pname: indicação da característica que se pretende definir param: valor a atribuir à característica seleccionada 2) Deve preparar-se o sistema para executar cálculos de iluminação glenable (GL_LIGHTING); 3) Deve activar-se uma ou mais fontes de luz previamente parametrizadas glenable (lightindex); 4) Os cálculos de iluminação devem ser complementados com cálculos de remoção de superfícies ocultas. glenable (GL_DEPTH_TEST);
93 Propriedades de de uma Fonte de de Luz GL_AMBIENT: GL_DIFFUSE: GL_SPECULAR: GL_POSITION: (x, y, z, w) GL_SPOT_DIRECTION: GL_SPOT_EXPONENT: GL_SPOT_CUTOFF: valores RGBA para a intensidade da luz ambiente valores RGBA para a intensidade da luz difusa valores RGBA para a intensidade da luz especular se w = 0, fonte de luz direccional: posição infinita e direcção dada por (x, y, z) se w = 1, fonte de luz posicional, com posição dada por (x, y, z) em coord. de objecto. Raios divergentes. cutoff cos (θ) exponent direction GL_CONSTANT_ATTENUATION (Kc): GL_LINEAR_ATTENUATION (Kl): GL_QUADRATIC_ATTENUATION (Kq): attenuation factor = d: distância da fonte ao vértice 1 Kc + Kl.d + Kq.d 2
94 Fontes de de Luz e Transformações O opengl trata a posição e direcção de uma fonte de luz da mesma forma que trata a informação geométrica das primitivas gráficas. Os valores da posição e direcção de uma fonte, estabelecidos através da função gllight (), são transformados por aplicação da Transformação ModelView corrente e guardados em coordenadas de vista (eye coordinates). Assim, a posição e direcção de uma fonte de luz pode ser manipulada por alteração da matriz ModelView. Para criar uma fonte de luz que se mova com o ponto de observação, basta definir a posição e orientação da fonte antes de estabelecer a transformação de visualização. Assim, os parâmetros ficam directamente definidos em coordenadas de vista (a posição relativa da fonte e da câmara não muda)
95 Modelo de Iluminação O Modelo de Iluminação tem os seguintes parâmetros: Intensidade da luz ambiente; Posição do ponto de vista local ou no infinito (especular versus difuso); Cálculo diferente para as faces dianteiras e traseiras; Se a componente especular deve ser aplicada após o mapeamento de texturas (brilho).
96 Parametrização do do Modelo de de Iluminação Luz Ambiente Global Valores de RGBA para a intensidade da luz ambiente que não é possível relacionar com uma dada fonte de luz. Graças a esta componente luminosa, é possível visualizar os objectos presentes na cena mesmo que não se defina qualquer fonte de luz. Glfloat ambient_light [ ] = { 0.2, 0.2, 0.2, 1.0} gllightmodelfv (GL_LIGHT_MODEL_AMBIENT, ambient_light); Ponto de Observação Infinito ou Local Com o ponto de observação no infinito, a direcção de visualização é igual em todos os vértices da cena, o que simplifica os cálculos de iluminação (situação por defeito). Com um ponto de observação finito essa direcção varia (e torna mais realistas o cálculo das regiões especulares). gllightmodeli (GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE Iluminação por Tipo de Faceta Decidir se são efectuados cálculos de iluminação para backfaces depois de invertidos os seus vectores normais (caso afirmativo, podem definir-se materiais diferentes para front e backfaces). gllightmodeli (GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE
97 Definição das Propriedades dos Materiais Sucessivas invocações da função glmaterial*() permitem estabelecer as diferentes características ópticas do material corrente. glmaterial{if}[v] (Glenum face, Glenum pname, TYPE param); face: tipos de facetas considerados (GL_FRONT, GL_BACK, GL_FRONT_AND_BACK) pname: indicação da característica que se pretende definir param: valor a atribuir à característica seleccionada GL_AMBIENT: GL_DIFFUSE: GL_AMBIENT_AND_DIFFUSE: GL_SPECULAR: GL_SHININESS: GL_EMISSION: percentagens RGBA para a luz ambiente reflectida percentagens RGBA para a luz difusa reflectida mesmos RGBA para componentes ambiente e difusa percentagens RGBA para a luz especular reflectida grau de especularidade do material (0 a 128). Quanto maior o valor, mais pequena e brilhante a zona especular valores RGBA para a intensidade da luz emitida pelo próprio material (Não influencia a iluminação de outros objectos, ou seja, não actua como fonte de luz)
98 Método Alternativo de de Definição de de Propriedades Invocações à função glcolormaterial permitem definir, para determinados tipos de faces, quais as propriedades ópticas de um material que herdam automaticamente os valores da côr de desenho corrente, definida por glcolor. glcolormaterial (GLenum face, Glenum mode); face: mode: tipos de facetas considerados (GL_FRONT, GL_BACK, GL_FRONT_AND_BACK) selecção de uma propriedade susceptível de ser definida por um grupo RGBA Para que o efeito de glcolormaterial se faça sentir, é necessário activar uma variável de estado: glenable (GL_COLOR_MATERIAL);
99 A Matemática dos Cálculos de de Iluminação Em modo cromático RGBA, os cálculos necessários à determinação da côr a atribuir a um dado vértice são: VertexColor = emission material + ambient lightmodel * ambient material + n -1 [ 1 / ( K c + Kl. d + K q.d 2 ) ] i * (spotlight_effect) * i i = 0 [ ambient light * ambient material + (max {l. n, 0}) * diffuse light * diffuse material + (max {s. n, 0}) shininess * specular light * specular material ] i n: versor normal ao vértice l: versor que aponta do vértice para a fonte de luz s: versor na direcção da soma entre l e o vector que une o vértice ao ponto de observação
100 Demonstração light & material Usar a aplicação light & material para mostrar o efeito da alteração de: Componentes de iluminação; Materiais; Atenuação da intensidade luminosa; Aplicação da iluminação às duas faces de polígonos (usar a rosa).
101 Demonstração texture Usar a aplicação texture para mostrar: Várias texturas; Aplicação de texturas a objectos 3D; Desempenho necessário; Transformações 3D.
CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark
Computação Gráfica Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark Primeiro Teste 6 de Outubro de 013 O teste tem a duração de 1h00, tolerância incluída. Responda às questões
Computação Gráfica - OpenGl 02
Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica - OpenGl 02 Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti
INTRODUÇÃO A OPENGL. Computação Gráfica
INTRODUÇÃO A OPENGL Computação Gráfica OpenGL (Open Graphic Library) Biblioteca de rotinas gráficas e de modelagem, bi e tridimensional, extremamente portável e rápida. Não é uma linguagem de programação,
Computação Gráfica - 04
Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica - 04 Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav
OpenGL, GLU e GLUT. GLUT (OpenGL Utility Toolkit) OpenGL. Linguagem. OpenGL. Esqueleto de um programa em PyOpenGL
OpenGL, GLU e GLUT http://www.opengl.org/resources http://pyopengl.sourceforge.net GLUT (OpenGL Utility Toolkit) O GLUT é uma biblioteca de rotinas independentes do SO, que fornecem as ferramentas necessárias
Introdução à Programação em OpenGL. Prof. Márcio Bueno {cgtarde,cgnoite}@marciobueno.com
Introdução à Programação em OpenGL Prof. Márcio Bueno {cgtarde,cgnoite}@marciobueno.com OPENGL (Open Graphical Library) OpenGL é uma interface de software (API Aplication Program Interface) para aceleração
n À primeira vista: basta desenhar n Uma subrotina para desenhar cada tipo de objeto n Mas... n Como fazer interação? n Como estruturar a cena?
Programação Gráfica Computação Gráfica OpenGL Renato Ferreira À primeira vista: basta desenhar Uma subrotina para desenhar cada tipo de objeto Mas... Como fazer interação? Como estruturar a cena? Como
Cap. 4: Janelas, Visores & Recorte Gráfico
Cap. 4: Janelas, Visores & Recorte Gráfico Sumário Definições básicas: sistema de coordenadas globais, sistema de coordenadas do ecrã; janela de domínio de cena; janela de interface e visores de saída
OpenGL. Sumário COMPUTAÇÃO GRÁFICA E INTERFACES. Introdução. Introdução. Carlos Carreto
Sumário COMPUTAÇÃO GRÁFICA E INTERFACES OpenGL Carlos Carreto Curso de Engenharia Informática Ano lectivo 2003/2004 Escola Superior de Tecnologia e Gestão da Guarda Introdução Utilização Tipos de dados
OpenGL. http://www.opengl.org. Alberto B. Raposo
OpenGL http://www.opengl.org Alberto B. Raposo OpenGL: o que é? API Interface para programador de aplicação Aplicação API abstrata API Hardware & Software Dispositivo de saída Dispositivo de entrada Por
LAB. 1. Introdução à OpenGL
LAB. 1 Introdução à OpenGL OpenGL O que é? É uma biblioteca de funções gráficas. É uma API (Application Programming Interface) gráfica 2D e 3D Primitivas vectoriais e rasterizadas (imagens) Capaz de gerar
PROGRAMAÇÃO OPENGL LIVRO: TEORIA DA COMPUTAÇÃO GRÁFICA
PROGRAMAÇÃO OPENGL PROGRAMAÇÃO OPENGL Componentes Oficiais GL GLU Não oficiais GLUT PROGRAMAÇÃO OPENGL Disponível em várias linguagens Delph Visual Basic Java C/C++ GLUT http://www.opengl.org/developers/documentation/glut/index.html
Visualização. - Aula 4 -
Visualização - Aula 4 - Pipeline de visualização 2D window recorte mapeamento viewport descrição geométrica rasterização Visualização de objetos 2D y viewport 1 região (window) 1 região (window) 2 viewport
OpenGL. Parte I: Geometria. Waldemar Celes Departamento de Informática Tecgraf/PUC-Rio
OpenGL Parte I: Geometria Waldemar Celes Departamento de Informática Tecgraf/PUC-Rio API OpenGL: : o que é? Interface para programador de aplicação Aplicação API Hardware & Software API abstrata Dispositivo
Paulo Sérgio Rodrigues. Exercícios de Laboratório
Paulo Sérgio Rodrigues Exercícios de Laboratório Iluminação São Bernardo do Campo, SP Abril de 2010 Iluminação Como é possível observar na Fig. 1, a imagem gerada não possui uma qualidade satisfatória.
Introdução Programando com OpenGL Exemplos. O que é OpenGL? [1]
Sumário ao OpenGL Exemplos Leandro Tonietto Processamento Gráfico / Computação Gráfica Jogos Digitais [email protected] http://www.inf.unisinos.br/~ltonietto Mar-2008 Alguns slides são provenientes
Introdução a Prática em OpenGL
Introdução a Prática em OpenGL Universidade de São Paulo USP Disciplina de Computação Gráfica Profª Maria Cristina PAE: Thiago Silva Reis Santos Agosto de 2010 Sumário Bibliotecas Necessárias Instalação
Computação Gráfica. 5385: Licenciatura em Engenharia Informática. Cap. 3 Janelas e Visores. Janelas e Visores
Computação Gráfica 5385: Licenciatura em Engenharia Informática Cap. 3 Janelas e Visores Janelas e Visores Sumário Definições domínio de imagem (ecrã) janela de ecrã domínio da cena (IR 2 ) janela visor
OpenGL Um tutorial. Luis Valente. Instituto de Computação - Universidade Federal Fluminense [email protected]. Dezembro, 2004
OpenGL Um tutorial Instituto de Computação - Universidade Federal Fluminense [email protected] Dezembro, 2004 Resumo OpenGL é uma biblioteca para modelagem e visualização tridimensional em tempo real,
Primitivas do OpenGL. Tomás Antônio C. Badan
Primitivas do OpenGL Tomás Antônio C. Badan 1 Primitivas Formas simples que combinadas, geram objetos mais complexos Blocos de construção de objetos Podem ser 1D, 2D ou 3D Vão desde pontos, linhas até
Conceitos importantes da Computação Gráfica [3]
Programa de Educação Tutorial Ciência da Computação - UFRN Minicurso Agosto de 2012 Conceitos importantes da Computação Gráfica [3] Computação Gráfica é a área da Ciência da Computação que estuda a geração,
OpenGL. Soraia Musse
OpenGL Soraia Musse Roteiro Introdução OpenGL x DirectX Utilização Exemplo de Programa Nomes das Funções/Métodos Bibliotecas Máquina de Estados Linhas, Pontos e Polígonos Transformações Geométricas Introdução
Iluminação em OpenGL. André Tavares da Silva.
Iluminação em OpenGL André Tavares da Silva [email protected] Iluminação em OpenGL Assume fontes pontuais de luz Omnidirecionais: todas as direções. Ex. : sol (direcional), luz incandescente (pontual);
Introdução a OpenGL. Profª. Alessandra Martins Coelho
Introdução a OpenGL Profª. Alessandra Martins Coelho março/ 2013 OpenGL OpenGL é uma API gráfica que permite a criação de imagens gráficas 2D e 3D, através da definição de objetos (2D/3D) por um conjunto
Visualização 2D: - Transformação window to viewport - Clipping
Visualização 2D: - Transformação window to viewport - Clipping Sistemas Gráficos/ Computação Gráfica e Interfaces 1 Transformação de Visualização (window to viewport) Objectivo: obter uma matriz de transformação
UNIVERSIDADE FEDERAL FLUMINENSE Pedro Martins Menezes. Um estudo dos estágios dos pipelines gráficos
UNIVERSIDADE FEDERAL FLUMINENSE Pedro Martins Menezes Um estudo dos estágios dos pipelines gráficos Niterói 2008 Pedro Martins Menezes Um estudo dos estágios dos pipelines gráficos Trabalho de Conclusão
Capítulo 3 Primeiros Passos em OpenGL Função Desenha Função Teclado Função Inicializa Programa Principal...
Sumário Prefácio...15 Capítulo 1 Introdução...17 Capítulo 2 Instalação...22 2.1 Visão Geral das Bibliotecas OpenGL...22 2.2 Bibliotecas Necessárias para Execução...24 2.3 Bibliotecas Necessárias para Compilação...24
Pipeline de Visualização 3D
Pipeline de Visualização 3D André Tavares da Silva [email protected] Capítulo 5 de Foley Capítulo 2 de Azevedo e Conci Processo de Visualização https://www.youtube.com/watch?v=ogqam2mykng Processo de
OpenGL. Introdução ao OpenGL. OpenGL. OpenGL. OpenGL. OpenGL. Profa. M. Cristina Profa. Rosane
OpenGL Introdução ao OpenGL Profa. M. Cristina Profa. Rosane Application Programming Interface (API) Coleção de rotinas que o programador pode chamar do seu programa Modelo de como estas rotinas operam
Projeções e Transformações em 3D
Projeções e Transformações em 3D Computação Gráfica DCC065 Prof. Rodrigo Luis de Souza da Silva, D.Sc. Sumário O que são projeções Conversão 3D-2D Tipos de Projeção Projeções Paralelas Projeções Isométricas
António Costa. Paulo Roma Cavalcanti
Introdução à Computação Gráfica Preâmbulo Adaptação: Autoria: João Paulo Pereira António Costa Claudio Esperança Paulo Roma Cavalcanti Computação Gráfica Modelos Matemáticos Análise (reconhecimento de
Transformações (Cap 4.3, 4.4 e 4.6 a 4.10)
4.6 a 4.) Transformações (Cap 4.3, 4.4 e 4.6 a 4.) Instituto Superior Técnico, 26/27 Sumário Revisões Transformações Elementares Coordenadas Homogéneas Composição de Transformações Transformações em OpenGL
Reflexões e Sombras em Superfícies Planares Animação e Visualização Tridimensional Prof. João Madeiras Pereira Instituto Superior Técnico 2005/2006
Reflexões e Sombras em Superfícies Planares Animação e Visualização Tridimensional Prof. João Madeiras Pereira Instituto Superior Técnico 2005/2006 Reflexões - Motivação Ainda não é possível usar algoritmos
Projeções e Visualização
Computação Gráfica 5385: Licenciatura em Engenharia Informática Cap. 4 Projeções e Visualização Projeções e Visualização Sumário Pipeline de Visualização em OpenGL x y z w vértice original MODELVIEW matrix
Fundamentos de Computação Gráfica
Fundamentos de Computação Gráfica OpenGL e GLUT António Ramires Fernandes Departamento de Informática - UM 1 Bibliotecas OpenGL (Open Graphics Library) Funcionalidade Gráfica GLU (GL Utilities) Funcionalidade
Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark. Exame de Recurso 29 de Junho de 2011
Computação Gráfica Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark Exame de Recurso 29 de Junho de 211 O exame tem a duração de 2h3, tolerância incluída. Responda às questões
Programação Gráfica 2D com OpenGL (Aulas 22, 24 e 25)
MC102 Introdução à Programação de Computadores Programação Gráfica 2D com OpenGL (Aulas 22, 24 e 25) Felipe P.G. Bergo 1 Introdução OpenGL é uma biblioteca de funções utilizada para programar gráficos.
Computação Gráfica - 13
Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica - 13 Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav
Algoritmos de Recorte em 2D
Algoritmos de Recorte em 2D Computação Gráfica DCC065 Prof. Rodrigo Luis de Souza da Silva, D.Sc. Sumário Conceito de Recorte (Clipping) Introdução Algoritmo simples (Força Bruta) Algoritmo de Cohen-Sutherland
Introdução à Computação Gráfica. Claudio Esperança Paulo Roma Cavalcanti
Introdução à Computação Gráfica Claudio Esperança Paulo Roma Cavalcanti Estrutura do Curso Ênfase na parte prática Avaliação através de trabalhos de implementação C / C++ OpenGL c/ GLUT Grau (nota) baseado
Introdução Geral a Computação Gráfica. Universidade Católica de Pelotas Curso de Engenharia da Computação Disciplina de Computação Gráfica
Introdução Geral a Computação Gráfica Universidade Católica de Pelotas Curso de Engenharia da Computação Disciplina de 2 Introdução Geral a O que é CG? Áreas de Atuação Definição, Arte e Matemática Mercado
Transformações de Visualização 2D: Clipping. Antonio L. Bajuelos Departamento de Matemática Universidade de Aveiro
Transformações de Visualização 2D: Clipping Antonio L. Bajuelos Departamento de Matemática Universidade de Aveiro 1 Clipping (recorte) Qualquer procedimento que identifica porções de uma figura que estão
OpenGL. O que é OpenGL. O Pipeline do OpenGL. Listas de Exposição
OpenGL O que é OpenGL OpenGL é uma interface de software para dispositivos de hardware. Esta interface consiste em cerca de 150 comandos distintos usados para especificar os objetos e operações necessárias
FCG2006 Prova sobre OpenGL e Rastreamento de Raios
FCG2006 Prova sobre OpenGL e Rastreamento de Raios Aluno(a): matrícula: 1. O programa SimpleLight.c mostrado no Quadro 1 produz a janela mostrada na Figura 1. A partir do código, calcule coordenadas na
Computação Gráfica - 13
Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica - 13 Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav
Fundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes
Fundamentos de Programação Linguagem C++ aula II - Variáveis e constantes Prof.: Bruno Gomes 1 Variáveis Representa uma porção da memória que pode ser utilizada pelo programa para armazenar informações
CRAb Grupo de Computação Gráfica Departamento de Computação UFC
Computação Gráfica I CRAb Grupo de Computação Gráfica Departamento de Computação UFC Objetivos Estudar equipamentos, técnicas de programação e conceitos matemáticos Para representação, manipulação e projeção
O AMBIENTE DE TRABALHO... 2 CRIAR, ABRIR E GUARDAR DOCUMENTOS... 6 EDIÇÃO DE DOCUMENTOS... 7 FORMATAÇÃO DE TEXTO Manual de Word INTRODUÇÃO...
INTRODUÇÃO... 2 Noção de processador de texto... 2 O AMBIENTE DE TRABALHO... 2 Área de trabalho... 3 Barra de menus... 3 Barras de ferramentas... 4 Réguas... 5 Botões de visualização... 5 Barra de estados...
Computação Gráfica - 13
Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica - 13 Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav
Pedro Vasconcelos DCC/FCUP. Programação Funcional 11 a Aula Gráficos usando Gloss
Programação Funcional 11 a Aula Gráficos usando Gloss Pedro Vasconcelos DCC/FCUP 2014 A biblioteca Gloss Para fazer desenhos, animações, simulações e jogos 2D; Simples: pensada para ensino de programação;
Prof. Fernando V. Paulovich http://www.icmc.usp.br/~paulovic [email protected]. 3 de maio de 2011. SCC0250 - Computação Gráca
Introdução à Opengl com Java SCC0250 - Computação Gráca Prof. Fernando V. Paulovich http://www.icmc.usp.br/~paulovic [email protected] Instituto de Ciências Matemáticas e de Computação (ICMC) Universidade
Computação Gráfica - 09
Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica - 9 [email protected] www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav Objetos
Animação e Visualização Tridimensional
Animação e Visualização Tridimensional Mestrado em Engenharia Informática e de Computadores Alameda º mini-teste 22 de Outubro de 204 O mini-teste tem a duração máxima de 45 minutos, tolerância incluída.
Tomás Antônio Costa Badan. Mapa de Textura: O Básico
Tomás Antônio Costa Badan Mapa de Textura: O Básico Introdução De acordo com o www.thefreedictionary.com: Textura Aparência e impressão de uma superfície Superfície de uma material, principalmente sentida
Computação Gráfica OpenGl 03
Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica OpenGl 03 Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti
Engenharia Informática Computação Gráfica
Computação Gráfica 11569 - Engenharia Informática Transformações de Visualização Computação Gráfica 1 Definições janela de dominio da cena HOUSE CLIP ecrã janela de interface visor! Sistema de Coordenadas
Iluminação e Sombreamento
luminação e Sombreamento Computação Gráfica Carlos Guedes @ 2006 SEL/DEETC/SP Computação Gráfica 1 Computação Gráfica Carlos Guedes @ 2006 SEL/DEETC/SP Computação Gráfica http://www.oyonale.com/ldc/english/classroom.htm
Programa de Aprimoramento Discente em Modelagem Geométrica Computacional. Curso Básico de OpenGL
Universidade Federal de Minas Gerais Programa de Aprimoramento Discente em Modelagem Geométrica Computacional Curso Básico de OpenGL Dezembro 2003 Universidade Federal de Minas Gerais Av. Antônio Carlos,
Linguagem C Princípios Básicos (parte 1)
Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos
OpenGL Conceitos Básicos
Universidade Federal de Santa Maria Departamento de Eletrônica e Computação Prof. Cesar Tadeu Pozzer Disciplina: Computação Gráfica [email protected] 23/05/202 OpenGL Conceitos Básicos Histórico Antes
Modelação de Sólidos. Sistemas Gráficos/ Computação Gráfica e Interfaces FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO
Modelação de Sólidos Sistemas Gráficos/ Computação Gráfica e Interfaces 1 Modelação de Sólidos Em 2D um conjunto de segmentos de recta ou curvas não formam necessariamente uma área fechada. Em 3D uma colecção
Ferramentas do Flash CS3
Ferramentas do Flash CS3 Podemos dividir a Tools Bar nas seguintes secções: ferramentas, visionamento, cores e opções. Para mostrar ou ocultar a barra de ferramentas usamos o atalho: cmd+ F2. Ferramentas
2º Exame de Computação Gráfica
2º Exame de Computação Gráfica LEIC/LESIM/LCI Prof. Mário Rui Gomes Prof. João Brisson Lopes 26 de Julho de 2003 Nº Nome: Responda às questões seguintes justificando adequadamente todas as respostas. O
Pipeline de Visualização Câmara Virtual
Pipeline de Visualização Câmara Virtual Edward Angel, Cap. 5 Instituto Superior Técnico Computação Gráfica 2009/2010 1 Na última aula... Transformações Geométricas Composição de Transformações Deformação
Manual de Apoio 2010. Luís Filipe Lobo <[email protected]>
Computação Gráfica Manual de Apoio 2010 Luís Filipe Lobo Conteúdo 1 Introdução 5 1.1 A caminho do 3D............................................. 5 1.2 Efeitos 3D.................................................
Ficheiros de texto 1. Ficheiros de texto. 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro.
Ficheiros de texto 1 Ficheiros de texto 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro. 2. Implementar um programa que procure num ficheiro uma palavra lida do teclado.
Engenharia Informática Computação Gráfica
Computação Gráfica 11569 - Engenharia Informática Gráficos 3D - Evolução Histórica Computação Gráfica 1 Sumário! Criação de Gráficos! Criação de Modelos 3D! Pipeline Gráfico! Hardware Gráfico! Bibliotecas
Exame Tipo Computação Gráfica
Exame Tipo Computação Gráfica LEIC-T Prof. Mário Rui Gomes Nº Nome: Antes de começar: Identifique todas as folhas com o seu número. Responda às questões seguintes justificando adequadamente todas as respostas.
Iluminação (lighting) e Sombreamento (shading)
Iluminação (lighting) e Sombreamento (shading) Cap 16: Foley Cap 5: OpenGL Aula 11: Notas do Dave Revisão Coordenadas padrão Ponto Coordenadas da janela Matriz Modelview Transformação p/ Viewport Coordenadas
Programação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Programação Orientada a Objectos - P. Prata, P. Fazendeiro
3 Classes e instanciação de objectos (em Java) Suponhamos que queremos criar uma classe que especifique a estrutura e o comportamento de objectos do tipo Contador. As instâncias da classe Contador devem
Computação Gráfica - 12
Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica - 12 [email protected] www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav Realismo
Cenários 3D Interativos com Software Livre
Liliane dos Santos Machado 1 Ronei Marcos de Moraes 2 Resumo: Com a evolução tecnológica e o surgimento da realidade virtual, observa-se o desenvolvimento de sistemas gráficos cada vez mais realistas.
Visibilidade. Apontamentos CG + Edward Angel, Sec Instituto Superior Técnico Computação Gráfica 2009/2010
Visibilidade Apontamentos CG + Edward Angel, Sec. 7.11 Instituto Superior Técnico Computação Gráfica 2009/2010 1 Na últimas aulas Rasterização Discretização de linhas Preenchimento de polígonos Aliasing
7. Projeções Geométricas e Visualização 3D
7. Projeções Geométricas e Visualização 3D Aprendemos a criar e transformar geometricamente objetos 3D, no entanto, nossa janela de visualização é apenas bi-dimensional. Assim, necessitamos desenvolver
TÉCNICO DE INFORMÁTICA - SISTEMAS
782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar
Como Fazer um Programa, simples, em OpenGL para Trabalhar com Iluminação (exemplo do site da Isabel Mansour)
Como Fazer um Programa, simples, em OpenGL para Trabalhar com Iluminação (exemplo do site da Isabel Mansour) 1) Crie um Programa Simples que desenhe qualquer sólido na Tela. Há um exemplo Há Novo na Página
Existem três formas básicas de efectuar operações de entrada/saída:
Unidades de I/O Interface Entrada/Saída Existem três formas básicas de efectuar operações de entrada/saída entrada/saída isoladaas instruções IN e OUT transferem dados entre o registo AX ou a memória e
EXAME NACIONAL DO ENSINO SECUNDÁRIO
EXAME NACIONAL DO ENSINO SECUNDÁRIO 12.º Ano de Escolaridade (Decreto-Lei n.º 74/2004, de 26 de Março) PROVA 706/7 Págs. Duração da prova: 150 minutos 2007 1.ª FASE PROVA PRÁTICA DE DESENHO A V.S.F.F.
8. Síntese de Imagens: Cálculo de Cor
8. Síntese de Imagens: Cálculo de Cor O processo de determinar a aparência (ou seja, a textura e a cor) das superfícies visíveis é chamado de shading. Essa aparência da superfície depende das propriedades
TÉCNICAS DE CAD PARA ENGENHARIA CIVIL AULA 7 2. INCLUSÃO DE PADRÕES DE HACHURAS NOS DESENHOS
TÉCNICAS DE CAD PARA ENGENHARIA CIVIL AULA 7 1. ALGUNS COMANDOS DE EDIÇÃO 2. INCLUSÃO DE PADRÕES DE HACHURAS NOS DESENHOS 1. ALGUNS COMANDOS DE EDIÇÃO Array (Modify): permite arranjar várias cópias de
Desenvolvimento de aplicações tridimensionais com OpenGL
Desenvolvimento de aplicações tridimensionais com OpenGL Pontifícia Universidade Católica de Minas Gerais, 2004 Alessandro Ribeiro [email protected] Bruno Evangelista [email protected] Orientador:
Disciplina de Algoritmos e Programação
Disciplina de Algoritmos e Programação Aula Passada 1º Programa: olamundo.c #include // biblioteca padrão de E/S /* Programa Olá Mundo */ int main(void) { printf( Olá mundo\n ); //exibe Olá mundo
Capítulo. Introdução. Leia isto primeiro! Neste manual, estes símbolos indicam os seguintes avisos. : Notas importantes. : Notas
Capítulo 1 Leia isto primeiro! Neste manual, estes símbolos indicam os seguintes avisos. : Notas importantes : Notas P.000 : Páginas de referência Capítulo 1 1. Utilização do menu principal Sempre que
