Aula3 Intro OpenGL

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 60

Introduo OpenGL

Desenhando formas
Polgonos
Conjunto de vrtices (representados por pontos) e arestas (segmentos de linha)

Primitivas grficas de desenho mais comuns:


Tringulos Quadrilteros

Sistemas Grficos Interativos


Primitivas grficas de desenho Representao geomtrica

Modelo

Programa Aplicativo

Sistema Grfico

Pacotes Grficos
Acionamento do sistema grfico em alto nvel de abstrao
facilidade de programao portabilidade acelerao por hardware

GKS (Graphical Kernel System)


Primeiro standard grfico para software adotado pela ISO e ANSI 2D (extenso 3D desenvolvida posteriormente)

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

PHIGS+ (extenso: 3D surface-shading)

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

Caractersticas vantajosas para desenvolvedores


Estabilidade Escalabilidade: desde equipamentos portteis at supercomputadores Cc ti rm pf et da ll bp aib fas no or n : e d Documentao Facilidade de uso Em constante evoluo (controlada pelo ARB): fabricantes de hardware grfico usam extenses para prover meios do programa utilizar as caractersticas do hardware

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/

Estrutura geral de um programa grfico


Inicializao
Criao da janela grfica Inicializao de variveis de estado da OpenGL Indicao da funo principal de desenho e das funes que trataro eventos decorrentes de aes do usurio
teclado, mouse, alteraes na janela, ...

Funo principal de desenho na janela grfica


Chamada das primitivas grficas Alteraes em variveis de estado

Funes de tratamento de eventos, conforme necessrio

Funes OpenGL: conveno


<PrefixoBiblioteca> <ComandoRaiz> <ContadorArgumentosOpcional> <TipoArgumentosOpcional>

Exemplo: glColor3f
gl = Prefixo da biblioteca Color = comando raiz 3 = contador de argumentos (opcional) f = tipo do argumento (opcional)

Funes OpenGL: conveno

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 )

Tipos de dados em OpenGL

OpenGL Variveis de estado


OpenGL mantm uma srie de variveis de estado
estilo (ou padro) de uma linha posies e caractersticas das luzes propriedades do material dos objetos

Exemplo de uso: glEnable(....) e glDisable(....)


//Habilita luz - GL_LIGHTING a varivel de estado glEnable(GL_LIGHTING);

glColor3f(float,float,float);
//Seta cor com 3 componentes Red, Green, Blue glColor3f(1.0f, 0.0f, 0.0f); // vermelho

Estrutura geral de um programa grfico


Inicializao
Criao da janela grfica Inicializao de variveis de estado da OpenGL Indicao da funo principal de desenho e das funes que trataro eventos decorrentes de aes do usurio
teclado, mouse, alteraes na janela, ...

Funo principal de desenho na janela grfica


Chamada das primitivas grficas Alteraes em variveis de estado

Funes de tratamento de eventos, conforme necessrio

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

Devem ser registradas usando a GLUT


GLUT uma biblioteca auxiliar
glutDisplayFunc(myRenderScene); glutIdleFunc(doAnything); glutKeyboardFunc(myHandleKeyboard); glutReshapeFunc(myReshapeFunc);

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) }

Callback para rendering


Tudo que diz respeito a desenho, deve estar nesta funo:
glutDisplayFunc(renderScene); // registra funo
void renderScene(void) { // Limpa a janela glClear(GL_COLOR_BUFFER_BIT); // Desenha 3 pontos glBegin(GL_POINTS); glVertex2i(100,50); glVertex2i(100,130); glVertex2i(150,130); glEnd(); // Garante execuo dos comandos de desenho // antes de encerrar a funo glFlush(); }

OpenGL: Primitivas Geomtricas


Todas primitivas geomtricas so especificadas por vrtices

GL_LINES GL_POLYGON GL_POINTS GL_LINE_STRIP GL_LINE_LOOP

GL_TRIANGLES GL_QUADS GL_QUAD_STRIP GL_TRIANGLE_STRIP GL_TRIANGLE_FAN

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

OpenGL: Primitivas Geomtricas


Todas primitivas geomtricas so especificadas por vrtices

GL_LINES GL_POLYGON GL_POINTS GL_LINE_STRIP GL_LINE_LOOP

GL_TRIANGLES GL_QUADS GL_QUAD_STRIP GL_TRIANGLE_STRIP GL_TRIANGLE_FAN

OpenGL: Primitivas Geomtricas


Agrupamento de vrtices
glBegin (tipo); vrtice vrtice vrtice glEnd();

OpenGL: Primitivas Geomtricas


Vrtices
glVertex* (argumentos);
* pode ser n = dimenso (2= 2D, 3=3D) t = tipo (i=inteiro, f=float, d=double) v = indica se os argumentos esto isolados ou num array

OpenGL: Primitivas Geomtricas

// 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

glBegin(GL_POINTS); glVertex2i(0,0); glVertex2i(0,2); glVertex2i(2,2); glVertex2i(2,0); glEnd();

Primitivas: Linhas Retas


glBegin(GL_LINES); glVertex2i(0,0); glVertex2i(0,2); glVertex2i(2,2); glVertex2i(2,0); glEnd();

Primitivas: polyline (aberta)


glBegin(GL_LINE_STRIP); glVertex2i(0,0); glVertex2i(0,2); glVertex2i(2,2); glVertex2i(2,0); glEnd();

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();

Primitivas: lista de tringulos


glBegin(GL_TRIANGLE_STRIP); glVertex2i(x0,y0); glVertex2i(x1,y1); glVertex2i(x2,y2); ... glVertex2i(x6,y6); glEnd();

v0 v1 v2 v3 v4 v5 v6

Primitivas: lista de quadrilteros

glBegin(GL_QUAD_STRIP); glVertex2i(x0,y0); glVertex2i(x1,y1); glVertex2i(x2,y2); ... glVertex2i(x5,y5); glEnd();

v0 v1 v2 v3 v4 v5

Primitivas: leque de tringulos

glBegin(GL_TRIANGLE_FAN); glVertex2i(x0,y0); glVertex2i(x1,y1); glVertex2i(x2,y2); glVertex2i(x3,y3); glVertex2i(x4,y4); glEnd();

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

glPointSize(nPixels); glLineWidth(nPixels); glLineStipple(fatorEscala, padroBinario);

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

Especificao com cor indexada


glIndexi (element); glutSetColor (int color, GLfloat red, Glfloat green, Glfloat blue);

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

Interao com o usurio


Processa intervenes do usurio
glutKeyboardFunc( keyboard );
void keyboard( char key, int x, int y ) { switch( key ) { case q : case Q : exit( EXIT_SUCCESS ); break; case r : case R : rotate = GL_TRUE; break; } }

Interagindo com mouse e teclado


void glutMouseFunc(void (*func)(int button, int state,int x, int y));
GLUT_LEFT_BUTTON GLUT_MIDDLE_BUTTON GLUT_RIGHT_BUTTON GLUT_UP/GLUT_DOWN

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 );

void idle( void ) { t += dt; glutPostRedisplay(); }

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

OpenGL Shading Language (GLSL)


Linguagem baseada em C que permite a programao de shaders, programas que podem ser executados nos pontos programveis do pipeline
Processamento de vrtices Processamento de fragmentos
3D API commands

Includa a partir da OpenGL 1.4

Vertices Transformed Vertices Vertex Transformation Fragments Colored Fragments Pixel Updates FB

Primitive Assembly and Rasterization

Fragment Texturing and Coloring

Raster Operations

http://www.opengl.org/documentation/

GLUI (GLUT User Interface Library)


GLUI User Interface Library
Biblioteca para construo de interfaces de janelas Baseada na GLUT e escrita em C++ Independente de plataforma Integrao completa com a GLUT Simples Suporta a criao e manuteno de mltiplas janelas Fornece widgets bsicos de interao

GLUI

GLUI

GLUI

http://www.cs.unc.edu/~rademach/glui/

Você também pode gostar