Aula3 Intro OpenGL
Aula3 Intro OpenGL
Aula3 Intro OpenGL
Desenhando formas
Polgonos
Conjunto de vrtices (representados por pontos) e arestas (segmentos de linha)
Modelo
Programa Aplicativo
Sistema Grfico
Pacotes Grficos
Acionamento do sistema grfico em alto nvel de abstrao
facilidade de programao portabilidade acelerao por hardware
Pacotes Grficos
PHIGS (Programmers Hierarchical Interactive Graphics Standard)
segundo standard (extenso do GKS) melhorias
modelagem de objetos especificao de cor rendering de superfcies manipulao de figuras
OpenGL
Uma interface (software) para hardware grfico, ou seja, uma API (Application Programming Interface) Permite
exibio de formas variadas, inclusive superfcies iluminao e sombreamento mapeamento de textura transparncia animao e muitos outros efeitos especiais
Fonte: http://www.opengl.org/about/overview.html
OpenGL
Criada em 1992 pela SGI, em uma tentativa de portar para outras mquinas a biblioteca IRIS GL O controle do padro OpenGL feito por um consrcio de empresas, conhecido como ARB Architecture Review Board
Membros votantes: 3DLabs, Apple, ATI, Dell, IBM, Intel, NVIDIA, SGI e Sun Microsystems. Colaboradores: Evans and Sutherland, Imagination Technologies, Matrox, Quantum 3D, S3 Graphics, Spinor GmbH, Tungsten Graphics e Xi Graphics .
OpenGL
OpenGL reconhecida e aceita como uma API padro para desenvolvimento de aplicaes grficas 3D em tempo-real
Suportada pela maioria dos sistemas operacionais Usvel com: Ada, C, C++, Fortran, Python, Perl and Java
OpenGL
Aproximadamente 250 comandos e funes
~ 200 comandos do core OpenGL (glFuno) ~ 50 da GLU - OpenGL Utility Library (gluFuno)
Oferece desde primitivas grficas como pontos, linhas e polgonos at superfcies complexas com texturas
Transformaes e visualizaes variadas desses objetos geomtricos
No possui funes para gerenciamento de janelas, interao com o usurio ou arquivos de entrada/sada Verses atuais: OpenGL 2.0(2004); 2.1(8/2006)
http://www.opengl.org/documentation/
Exemplo: glColor3f
gl = Prefixo da biblioteca Color = comando raiz 3 = contador de argumentos (opcional) f = tipo do argumento (opcional)
glVertex3fv( v )
Nmero de componentes
2 - (x,y) 3 - (x,y,z) 4 - (x,y,z,w)
Tipo de dado
b ub s us i ui f d byte unsigned byte short unsigned short int unsigned int float double
Vetor
omitir v para forma escalar glVertex2f( x, y )
glColor3f(float,float,float);
//Seta cor com 3 componentes Red, Green, Blue glColor3f(1.0f, 0.0f, 0.0f); // vermelho
Funes calla b T U L G d k c
Callback = rotina a ser chamada quando alguma coisa acontece
Redimensionamento ou redesenho da janela Interveno do usurio Animao
Primeiro programa
void main(void) { // Funes de inicializao glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(640,480); glutInitWindowPosition(100,150); glutCreateWindow("Primeiro programa OpenGL"); // Registra funes callback glutDisplayFunc(renderScene); glutReshapeFunc(reshape); glutMouseFunc(handleMouse); glutKeyboardFunc(handleKeyboard); glutIdleFunc(doAnything);
// Inicializa outras coisas... setupRC(); glutMainLoop(); }
Inicializao...
Seta estado inicial desejado Define um sistema de coordenadas
void setupRC(void) { glClearColor(1.0,1.0,1.0,0.0); // seta cor de fundo glColor3f(0.0f,0.0f,0.0f); // seta cor do desenho glPointSize(4.0); // seta tamanho do ponto glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,640.0,0.0,480.0); //(left, rigth, bottom, up) }
Detalhes
glut.h contm os headers para gl.h e glu.h
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
avisa a GLUT que tipo de modo de exibio deve ser usado quando a janela criada os flags indicam a criao de uma janela singlebuffered (GLUT_SINGLE) com o modo de cores RGB (GLUT_RGB)
glutCreateWindow("Simple");
o comando da biblioteca GLUT que cria a janela Pode devolver uma identificao da janela
id = glCreateWindow (char *ttulo);
Detalhes
glutDisplayFunc(renderScene);
Estabelece a funo renderScene (implementada pelo usurio) previamente definida como a funo callback de exibio
setupRC();
Funo da aplicao (tambm implementada pelo usurio) onde so feitas as inicializaes OpenGL que devem ser executadas antes do rendering Muitos estados OpenGL devem ser determinados somente uma vez e no a cada vez que o rendering realizado
Detalhes
glutMainLoop();
Funo da GLUT que inicializa a execuo da mquina de estados da OpenGL Processa todas as mensagens especficas do sistema operacional, teclas pressionadas, etc. Iniciada no main () do programa de aplicao e fica ativa at que o programa termine
Detalhes
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
funo que determina a cor utilizada para limpar a janela. seu prottipo : void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alfa);
O componente alfa usado para efeitos especiais, tal como transparncia
glClear(GL_COLOR_BUFFER_BIT);
"limpa" um buffer particular ou combinaes de buffers
Detalhes
glFlush();
Faz com que comandos OpenGL ainda no executados o sejam Equivale a aguardar que todos os vrtices das primitivas passem pelo pipeline antes de encerrar a funo
// inicializaes glCreateWindow (); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ... // inicializao de parmetros de visualizao ... // desenha tringulo glBegin(GL_TRIANGLES); glVertex2f( -0.5f, -0.5f); glVertex2f( 0.5f, -0.5f); glVertex2f( -0.5f, 0.5f); glEnd();
Primitivas: Pontos
Primitivas: polgonos
Um polgono delimita uma regio do plano por meio de segmentos de reta
Primitivas: polgono
glBegin(GL_POLYGON); glVertex2i(0,0); glVertex2i(0,2); glVertex2i(1,3); glVertex2i(2,2); glVertex2i(2,0); glEnd();
Em OpenGL, a forma de exibio default de polgonos a de preenchimento, sem desenho das arestas.
Primitivas: quadrilteros
glBegin(GL_QUADS); glVertex2i(0,0); glVertex2i(0,1); glVertex2i(1,1); glVertex2i(1,0); glVertex2i(1,1); glVertex2i(1,2); glVertex2i(2,2); glVertex2i(2,1); glEnd();
Primitivas: tringulos
glBegin(GL_TRIANGLE); glVertex2i(0,0); glVertex2i(0,2); glVertex2i(2,0); glEnd();
v0 v1 v2 v3 v4 v5 v6
v0 v1 v2 v3 v4 v5
v2 v1 v3
v4 v0
Atributos
Cada primitiva geomtrica possui um conjunto de atributos
Ponto
cor, tamanho do marcador
Segmentos de reta
cor, espessura, tipo
Polgonos e similares
cor, preenchimento
Atributos (detalhes)
glLineStipple(1, 0x3F07); glEnable(GL_LINE_STIPPLE);
Especificao de Cor
Especificao em RGB
glColor3f (r,g,b); onde r,g,b e [0.0, 1.0] glClearColor (r,g,b,alpha); onde alpha usado para opacidade
Segundo exemplo
Sierpinski gasket
Gerado proceduralmente Resultado final um fractal Obtido a partir do desenho de vrios pontos, onde cada novo ponto obtido a partir do anterior
Sierpinski gasket
1. Escolher 3 pontos fixos T0, T1 e T2, tal que formem um tringulo
Sierpinski gasket
2. Selecione o ponto inicial p0 randomicamente entre T0, T1 e T2 Repita os passos abaixo: 3. Escolha um dos pontos T0, T1 ou T2 e o chame de T 4. Desenhe o prximo ponto pk como o ponto mdio entre os pontos T e pk-1
Sierpinski gasket
void glutMotionFunc(void (*func)(int x, int y)); void glutSpecialFunc(void (*func)(int key, int x, int y));
GLUT_KEY_F1 GLUT_KEY_F2 GLUT_KEY_LEFT GLUT_KEY_HOME
Callback Idle
Para animao e updates
glutIdleFunc( idle );
Leitura recomendada
F.S. Hill, Computer Graphics Using OpenGL, captulo 2 (Getting Started: Drawing Figures) www.opengl.org
OpenGL - Bibliotecas
GLU - OpenGL Utility Library
gluFuno Vrias funes que utilizam os comandos OpenGL do core para executar tarefas como:
Definir parmetros para projeo e orientao da visualizao Objetos compostos de primitivas grficas Definir parmetros para rendering de superfcies
OpenGL - Bibliotecas
GLX - OpenGL Extension to the X Window System
glXFuno "anexo" de OpenGL para mquinas que usam o X Window System
OpenGL - Bibliotecas
GLUT - OpenGL Utility Toolkit
glutFuno Interface com o sistema de janelas de qualquer ambiente (Windows, Unix, MacOS) Prov meios de construir interfaces grficas, tais como menus pop-up e suporte para dispositivos de entrada (teclado, mouse, joystick, trackball) Independente de plataforma A GLUT substitui a GLAUX, uma biblioteca auxiliar OpenGL que havia sido criada como binding para a programao em C
Vertices Transformed Vertices Vertex Transformation Fragments Colored Fragments Pixel Updates FB
Raster Operations
http://www.opengl.org/documentation/
GLUI
GLUI
GLUI
http://www.cs.unc.edu/~rademach/glui/