570 likes | 664 Views
Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro Reinaux Nivan Ferreira Rodrigo Mateus. Agenda. O que é OpenGL Porque OpenGL foi criado História Utilização no mercado Características de OpenGL Pipeline Bibliotecas Análise de Competidores. O que é OpenGL?.
E N D
Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro Reinaux Nivan Ferreira Rodrigo Mateus
Agenda • O que é OpenGL • Porque OpenGL foi criado • História • Utilização no mercado • Características de OpenGL • Pipeline • Bibliotecas • Análise de Competidores
O que é OpenGL? • Open Graphics Library • É a especificação de uma API para programação em computação gráfica. • Em outras palavras, OpenGL define um conjunto de funções fazer aplicações em computação gráfica.
O que não é OpenGL? • Não é uma linguagem de programação • Não tem comandos para • criação e gerenciamento de janelas • lidar com entradas do usuário • Não tem comandos de alto-nível para • descrição de objetos 3D
Porque OpenGL foi criado? • Desenvolver aplicativos gráficos era difícil • Falta de padronização • Esforços duplicados • Era necessário uma plataforma • Abstração de hardware • Portável • Fácil de usar
História • PHIGS – anos 80 • IRIS GL – final dos anos 80 pela SGI • OpenGL é criado em 1992 – mantido pela OpenGL ARB (ArchitectureReviewBoard) • Evans&Sutherland • HP • IBM • Intel • Matrox • NVIDIA • Sun • SiliconGraphics (SGI) • Atualmente, parte do KhronosGroup
História • OpenGL 2.0 • 3DLabs • OpenGLShading Language • OpenGL 2.1 • OpenGL Shading Language revision 1.20 • sRGB texture formats • OpenGL 3.0 • Criação de objetos assíncrona
Utilizações no mercado Ferramentas CAD Moonlight Creator (GPL) IBM/Dassault CATIA
Modelagem e Desenho NewTek LightWave 3D
Hardware-Assisted Rendering glutrad (radiosity, hemicube approximation)
Animação e Efeitos Especiais Vídeo do trem do filme “The Prototype”
Jogos Doom 3 Quake 3 Call of Duty NeverWinter Nights
GL_LINES GL_POLYGON GL_LINE_STRIP GL_LINE_LOOP GL_POINTS GL_TRIANGLES GL_QUADS GL_TRIANGLE_FAN GL_TRIANGLE_STRIP GL_QUAD_STRIP Primitivas Geométricas de OpenGL • Todas primitivas geométricas são especificadas por vértices
Uma aplicação OpenGL é uma MEF • Uma aplicação OpenGL é uma máquina de estados. • A cor corrente é uma variável de estado. Há muitas outras! • Todas as variáveis de estado possuem valores default • O efeito de muitas delas pode ser habilitado e desabilitado
Forma geral das instruções • De forma geral: gl{nome da função}{número de argumentos}{tipo dos argumentos} (lista de argumentos); Exemplos: • glColor3f => gl Color 3 f • glLightfv => gl Light fv Nome da Função Número de argumentos Tipo dos argumentos Nome da função Tipo dos argumentos(float vector)
Forma das instruções • Infelizmente, nem todas as funções seguem fielmente esse padrão: • glFlush() ,não recebe argumentos. • glClearColor(), só recebe um tipo de argumento. • Conclusão: Usar funções em OpenGL é fácil!
Forma geral de um programa OpenGL • Funções presentes em todo programa OpenGL: • main(): • Ponto de início da execução; • Inicializa a janela e aspectos da geração de imagens(número de buffers de armazenamento e sistema de representação de cores); • Especifica a função callback de desenho.
Forma geral de um programa OpenGL • void setupRC(void): • Inicializa aspectos de rendering(cor de desenho atual e cor de funto); • void renderScene(void): • Função executada sempre que for necessário exibir a imagem. • Podem existir outras funções callback • Funções que detectam eventos de teclado e mouse.
Alguns exemplos #include <whateverYouNeed.h> main() { InitializeAWindowPlease(); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON); glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0); glEnd(); glFlush(); UpdateTheWindowAndCheckForEvents(); } Resultado
Entendendo as funções básicas • glClearColor(r,g,b,a): Especifica cor utilizada para limpar a tela(o valor a é utilizado em efeitos como transparência); • glClear(buffer): Limpa um ou mais buffer’s, no exemplo GL_COLOR_BUFFER_BIT(onde a imagem está armazenada internamente); • glColor3f(r,g,b): Determina a cor que será utilizada para o desenho(linhas e preenchimento); • glOrtho:
Entendendo as funções básicas • glBegin(Const)...glEnd(): Conjunto utilizado para desenhar formas Const=GL_POLYGON. • glVertex3f: Especifica os vétices do objeto que será desenhado • glFlush: Força a execução de comandos ainda não executados acontecer.
Display Lists • Comandos OpenGL armazenados para serem executados depois • Comandos executados na ordem em que foram emitidos • Aumenta a performance • Redesenhar geometria ou mudar de estados várias vezes
Vertex Operation • Vértices e coordenadas normal transformadas por GL_MODELVIEW • Pode ser demorada • Coordenadas da textura são geradas e transformadas • O cálculo da iluminação atualiza a cor do vértice
Primitive Assembly • Primitivas transformadas pela matriz de projeção e recortadas pelo volume de visualização • Divisão perspectiva por w • Viewport e depth (coordenada z) • Culling test • Primitivas geométricas completas
Pixel Transfer Operation • Scaling, bias, mapping e clamping • Pixels da memória do sistema • Armazenados na memória de textura ou enviados para a rasterização • Pixels do frame buffer • Retornam para um array na memória do sistema
Texture Memory • Imagens de textura são carregadas na memória de textura e aplicadas aos objetos geométricos • Acelera a performance de texturas • Texturas aumentam o realismo dos objetos
Rasterization • Dados geométricos e pixels em fragmentos • Fragmentos: arrays retangulares contendo cor, depth, line width, point size e cálculos antialiasing (GL_POINT_SMOOTH, GL_LINE_SMOOTH, GL_POLYGON_SMOOTH) • Pixels do interior do polígono são preenchidos (GL_FILL) • Cada fragmento corresponde a um pixel no frame buffer
Fragment Operation • Série de operações que podem alterar ou descartar fragmentos • Texture element generation • Fog calculations • Fragment Tests: • Scissor test -> glScissor() • Alpha test -> glAlphaFunc() • Stencil test -> glStencilFunc(), glStencilOp() • Depth test -> glDepthFunc() • Blending, Dithering, Logical Operation, Masking (Bitmask)
Feedback • glGet*(), glIsEnabled(): informações e estados atuais • glReadPixels(): dados dos pixels do frame buffer • glRenderMode(GL_FEEDBACK): dados completos dos vértices transformados • glCopyPixels(): copia os dados do pixel para outro frame buffer
Transformações • Composição de matrizes: glMatrixMode(), glLoadIdenty, glPushMatrix(), glPopMatrix(), • Projeção • Ajusta a lente da câmera virtual • Visualização • Definem posição e orientação do volume de visualização (frustum) no universo • Modelagem • Movem os objetos • Viewport • Modificam a janela de visualização
Iluminação e sombreamento • Modelos simples com realismo – eficiência • Modelo de iluminação de Phong • Não modela sombras, reflexão direta e indireta, refração
Fontes de Luz • Considerada pontual • Intensidade constante • Representada por um valor RGB • Componentes • Ambiente (GL_AMBIENT) • Difusa (GL_DIFFUSE) • Especular (GL_SPECULAR) • glLight()
Tipos de Luz • Pontual • Raios emanam uniformemente em todas as direções • Direcional • Raios apenas em uma direção • SpotLight • Raios emitidos na forma de um cone apontando para uma determinada direção
Material • Cor depende da porcentagem de luz vermelha, verde e azul incidente que ele reflete • Componentes Ambiente, Difusa, Especular, Emissiva • glMaterial()
Iluminação Local • Dois modelos: • Flat Shading • Gouraud Shading
Flat Shading • Não apresenta variações ao longo do polígono. • Com a normal de cada vértice é obtida a normal do polígono. • glShadeModel (GL_FLAT);
Gouraud Shading • Apresenta variações de cor no polígono. • Calcular a intensidade nos vértices, Interpolação destas intensidades • glShadeModel (GL_SMOOTH);
Bibliotecas • Biblioteca Padrão • OpenGL32 em Windows • GL em unix/linux (libGL.a) • Opengl Utility library (GLU) • Ligação com Sistema de Janelas • GLX para X Windows System, WGL para Windows, CGL para Macintosh • Multi-plataforma: GLUT, GLUI, SDL, FLTK, QT, ...
Bibliotecas • Opengl Utility library (GLU) • Funções de desenho de alto nível desenvolvidas com base nas funções primitivas de OpenGL. • Normalmente é obtida junto com o OpenGL no mesmo pacote. • Mipmaps, desenho de superfícies quádricas, NURBS • Ex: gluOrtho2D();
Bibliotecas • Opengl Utility Toolkit (GLUT) • Interface com o sistema de janelas de qualquer ambiente • Provê meios para construir interfaces gráficas como menus pop-up e suporte para dispositivos de entrada (teclado, mouse, joystick, trackball) • Eventos (Event Callback Function)
Bibliotecas • OpenGL User Interface Library (GLUI) • Baseada em GLUT • Independente de ambiente • Adição de buttons, checkboxes, radio buttons, and spinners • Extremamente fácil de se utilizar
Análise de competidores • Cg: C for Graphics • Desenvolvido pela NVIDIA em 2002. • Baseada na linguagem C. • Usada para gerar gráfico em tempo real em GPU programáveis. • Não dá suporte a superfícies e a iluminação (Como o OpenGL).
Análise de competidores • VRML: Virtual Reality Modeling Language • Usada para descrever mundos interativos 3D na Internet. • Desenvolvida pela SGI (Silicon Graphics Inc) em 1995. • Unificar e padronizar a tecnologia Web para gerar mundos 3D.
Análise de competidores • Direct3D (componente do DirectX) • É utilizada na plataforma Windows. • Consoles Xbox e o Dreamcast possui versão embarcada do Direct3D. • Linguagem de alto nível de modelagem 3D. • Possui os mesmos objetivos do OpenGL