introdução a opengl · • pasta c:\dev-c++\lib contém os arquivos opengl32.def, glaux.def e...

47
Introdução a OpenGL Profª. Alessandra Martins Coelho março/ 2013

Upload: hoangxuyen

Post on 08-Nov-2018

272 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Introdução a OpenGL

Profª. Alessandra Martins Coelho

março/ 2013

Page 2: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

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 de formas primitivas geométricas e rotinas para manipulação;

• consiste em cerca de 150 comandos distintos usados para especificar os objetos e operações necessárias para produzir aplicativos tridimensionais interativos.

Page 3: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

OpenGL

• A API do OpenGL foi projetada para ser usada com C ou C++.

• Mesa implementação livre do OpenGL• Jogl - para Java

Page 4: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

OpenGL• As especificações OpenGL não descrevem as

interações entre OpenGL e o sistema de janelas utilizado.

• O OpenGL foi projetado para ser independente do SO e do sistema de janelas.

• Para ser completamente independente, o OpenGL não oferece rotinas de display ou interface (pois precisam de E/S).

• GLUT (OpenGL ToolKit), FDL

Page 5: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

OpenGL como máquina de estados

• Todos os estados ou modos habilitados nas aplicações têm efeito enquanto os mesmos estiverem ligados ou forem modificados

Page 6: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

O “Pipeline” do OpenGL• A maior parte das implementações

OpenGL tem uma ordem de operações a serem executadas. Uma série de estágios de processos chamam o “pipeline” de renderização do OpenGL.

Page 7: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Ambiente OpenGL para desenvolvimento

• As bibliotecas do OpenGL são distribuídas como parte dos sistemas operacionais da Microsoft, porém as mesmas podem ser baixadas no site oficial do OpenGL : http://www.opengl.org.

• Disponíveis também para MacOS, Unix Solaris e Linux.

Page 8: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Instalando o OpenGL e GLUT no DEV-C++

• bibliotecas OpenGL http://www.opengl.org.• O ambiente Windows já deve conter as DLLs necessárias para

execução dos programas OpenGL. • Pasta System ou System32 do Windows - opengl32.dll e

glu32.dll. • a pasta C:\Dev-C++\Include\GL contém os arquivos gl.h, glaux.h

e glu.h• pasta C:\Dev-C++\Lib contém os arquivos opengl32.def,

glaux.def e glu32.def.

• Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

• Mova o arquivo glut.h para a pasta GL do DevC++ (C:\Dev-C++\Include\GL);

• Mova os arquivos glut32.def e libglut.a para a pasta Lib do DevC++ (C:\Dev-C++\Lib);

• Mova o arquivo glut32.dll para a mesma pasta onde se encontram os arquivos opengl32.dll e glu32.dll (system)

Page 9: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;
Page 10: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Configure o compilador para utilização de OpenGL no menu Projeto, opções do Projeto, parâmetros, no campo linker as diretivas de ligação -lopengl32 –lglut32 –lglu32

Page 11: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Linux

• As bibliotecas necessárias para instalar:– apt-get install freeglut3 freeglut3-dbg

freeglut3-dev– apt-get install build-essential

• Como compilar:– gcc -lglut -lGLU -lGL <nome do programa.c>

-o <nome do programa.exe>• Como Rodar:

– ./nome do programa.exe

Page 12: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Estrutura Básica de Programas OpenGL

• declaração dos arquivos de header para o OpenGL;

• configurar e abrir a janela;• inicializar os estados no OpenGL;• registrar as funções de “callback”;• renderização;• redimensionamento;• entradas : teclado, mouse, etc.;• entrar no loop de processamento de eventos.

Page 13: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Estrutura Básica de Programas OpenGL

#include <GL/gl.h>#include <GL/glut.h>void main( int argc, char** argv ){

int mode = GLUT_DOUBLE | GLUT_RGB;glutInitDisplayMode( mode );glutInitWindowSize(400,350);glutInitWindowPosition(10,10);glutCreateWindow( argv[0] );init();glutDisplayFunc( display );glutReshapeFunc( resize );glutKeyboardFunc( key );glutIdleFunc( idle );glutMainLoop();

}

Page 14: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Estrutura Básica de Programas OpenGL

#include <GL/gl.h>#include <GL/glut.h>void main( int argc, char** argv ){

int mode = GLUT_DOUBLE | GLUT_RGB;glutInitDisplayMode( mode );glutInitWindowSize(400,350);glutInitWindowPosition(10,10);glutCreateWindow( argv[0] );init();glutDisplayFunc( display );glutReshapeFunc( resize );glutKeyboardFunc( key );glutIdleFunc( idle );glutMainLoop();

}

criar uma cenafora da tela para depois, rapidamente, colocá-la na janela de visualização

DOUBLE ou SINGLE

Page 15: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Estrutura Básica de Programas OpenGL

#include <GL/gl.h>#include <GL/glut.h>void main( int argc, char** argv ){

int mode = GLUT_DOUBLE | GLUT_RGB;glutInitDisplayMode( mode );glutInitWindowSize(400,350);glutInitWindowPosition(10,10);glutCreateWindow( argv[0] );init();glutDisplayFunc( display );glutReshapeFunc( resize );glutKeyboardFunc( key );glutIdleFunc( idle );glutMainLoop();

}

as cores são especificadasatravés do fornecimento de intensidades dos componentes red, green eblue separadas

RGB ou RGBA

Page 16: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Estrutura Básica de Programas OpenGL

#include <GL/gl.h>#include <GL/glut.h>void main( int argc, char** argv ){

int mode = GLUT_DOUBLE | GLUT_RGB;glutInitDisplayMode( mode );glutInitWindowSize(400,350);glutInitWindowPosition(10,10);glutCreateWindow( argv[0] );init();glutDisplayFunc( display );glutReshapeFunc( resize );glutKeyboardFunc( key );glutIdleFunc( idle );glutMainLoop();

}

Tamanho da janela a ser criada

Page 17: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Estrutura Básica de Programas OpenGL

#include <GL/gl.h>#include <GL/glut.h>void main( int argc, char** argv ){

int mode = GLUT_DOUBLE | GLUT_RGB;glutInitDisplayMode( mode );glutInitWindowSize(400,350);glutInitWindowPosition(10,10);glutCreateWindow( argv[0] );init();glutDisplayFunc( display );glutReshapeFunc( resize );glutKeyboardFunc( key );glutIdleFunc( idle );glutMainLoop();

}

Posição da janela na tela do computador

Page 18: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Estrutura Básica de Programas OpenGL

#include <GL/gl.h>#include <GL/glut.h>void main( int argc, char** argv ){

int mode = GLUT_DOUBLE | GLUT_RGB;glutInitDisplayMode(mod);glutInitWindowSize(400,350);glutInitWindowPosition(10,10);glutCreateWindow( “...” );init();glutDisplayFunc( display );glutReshapeFunc( resize );glutKeyboardFunc( key );glutIdleFunc( idle );glutMainLoop();

}

Neste momento serão inicializados quaisquer estados OpenGL, que serão executados na execução do programa

Page 19: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Estrutura Básica de Programas OpenGL

#include <GL/gl.h>#include <GL/glut.h>void main( int argc, char** argv ){

int mode = GLUT_DOUBLE | GLUT_RGB;glutInitDisplayMode(mod);glutInitWindowSize(400,350);glutInitWindowPosition(10,10);glutCreateWindow( “...” );init();glutDisplayFunc( display );glutReshapeFunc( resize );glutKeyboardFunc( key );glutIdleFunc( idle );glutMainLoop();

}

ações de callback qqr evento ocorrendo no sistema: -redimensionamento de janela;- entradas de usuários através de teclado, mouse, ou outro dispositivo de entrada;- ocorrência da animações.

Page 20: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

diferentes tipos de ações de callback

• glutDisplayFunc() – chamada quando um pixel na janela necessita ser atualizado.

• glutReshapeFunc() – chamado quando a janela é redimensionada.

• glutKeyboardFunc() – chamada quando uma tecla do teclado é pressionada.

• glutMouseFunc() – chamada quando o usuário pressiona um botão do mouse.

• glutMotionFunc() - chamada quando o usuário movimenta o mouse enquanto mantém um botão do mesmo pressionado.

• glutPassiveMouseFunc() – chamado quando o mouse é movimentado, independente do estado dos botões.

• glutIdleFunc() – uma função de callback chamada quando nada está acontecendo. Muito útil para animações.

Page 21: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Estrutura Básica de Programas OpenGL

#include <GL/gl.h>#include <GL/glut.h>void main( int argc, char** argv ){

int mode = GLUT_DOUBLE | GLUT_RGB;glutInitDisplayMode( mode );glutInitWindowSize(400,350);glutInitWindowPosition(10,10);glutCreateWindow( argv[0] );init();glutDisplayFunc( display );glutReshapeFunc( resize );glutKeyboardFunc( key );glutIdleFunc( idle );glutMainLoop();

}

entrar em um processo de loop, o qualinterpreta os eventos e chamadas das rotinas especificadas como callback

Page 22: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Modeloint main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutCreateWindow("Introdução a OPENGL - Computação Gráfica - março/2013"); init(); glutDisplayFunc(desenha); glutReshapeFunc(resize); glutKeyboardFunc(keyInput); glutMainLoop(); return 0; }

Page 23: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Modelovoid desenha(void){ glClear(GL_COLOR_BUFFER_BIT); glColor3f (1.0, 0.0, 0.0);

.

.

. glFlush(); }

Page 24: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Modelovoid init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); }

Page 25: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Modelovoid resize(int w, int h){ glViewport(0, 0, (GLsizei)w, (GLsizei)h); // Set viewport size to be

entire OpenGL window. glMatrixMode(GL_PROJECTION); // Set matrix mode to projection. glLoadIdentity(); // Clear current projection matrix to identity. // Specify the orthographic (or perpendicular) projection, // i.e., define the viewing box. glOrtho(0.0, 100.0, 0.0, 100.0, -1.0, 1.0);

glMatrixMode(GL_MODELVIEW); // Set matrix mode to modelview.

glLoadIdentity();}

Page 26: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Viewport: Definindo a área de desenho

• O viewport corresponde a uma região na janela realmente criada, onde o nosso desenho é exibido.

• Sempre que a janela muda de tamanho/forma, não é necessário mudar o desenho, apenas o viewport.

• Você também pode usar o viewport para aumentar ou diminuir o tamanho da imagem.

• Por padrão, o viewport do OpenGL ocupa toda a janela.

glViewport( x, y, GLsizei width, GLsizei height)

Page 27: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Modelo// uso do tecladovoid keyInput(unsigned char key, int x, int y){ switch(key) {

case 27: // Press escape to exit. exit(0); break; default: break; }}

Page 28: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Sintaxe de Comandos do OpenGL

• Todos os comandos utilizam-se do prefixo gl em letras minúsculas. Similarmente, OpenGL define constantes com as iniciais GL_, em letras maiúsculas, e usa um “underscore” para separar as palavras

• Ex: glColor3f(); GL_COLOR_BUFFER_BIT

Page 29: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Glvertex3fv(v)

Nº de Componentes2 – (x,y)3 – (x,y,z)4 – (x,y,z,w)

Tipo de dadosb – byteub – unsigned bytes – shortus – unsigned shorti – intui – unsigned intf – floatd – double

VetorOmite “v” para a forma escalar

Page 30: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Primitivas

glBegin(primitiva); glVertex3f(*,*,*);// v0

glVertex3f(*,*,*);//v1

... glVertex3f(*,*,*);//vn-1

glEnd();

Page 31: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

• GL_POINTS – Desenha apenas pontos no plano.

• v0, v1, ..., vn-1

Page 32: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

GL_POINTS

glColor3f (1.0, 0.0, 0.0); glPointSize(15); glBegin(GL_POINTS); glVertex2f(25,25); glVertex2f(25,75); glVertex2f(75,25); glVertex2f(75,75); glEnd();

Page 33: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

GL_POINTS const float distancia = 5.0f; float y=50, pos = -1 + distancia; int i; for (i = 1; i <= 20; i ++) { glPointSize(i); glBegin(GL_POINTS); glVertex3f(pos, y, 0); glEnd(); pos += distancia; }

Page 34: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

• GL_LINES – Desenha linhas independentes entre dois pontos

• v0v1, v2v3 ,..., vn-2

vn-1

Page 35: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

GL_LINES glLineWidth(5.0); glBegin(GL_LINES); glColor3f(1.0, 0.0, 0.0);//

vermelho glVertex3f(20.0, 20.0, 0.0); glColor3f(0.0, 1.0, 0.0);//

verde glVertex3f(80, 20.0, 0.0); glEnd();

Page 36: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

GL_POINTS

• você pode dizer quais os valores de cor devem estar no ponto médio (50,0, 20,0, 0,0) do segmento desenhado?

• verificar a sua resposta desenhando um ponto com os valores de cor um pouco acima do ponto médio.

Page 37: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

• GL_LINE_STRIP – Liga todos os pontos (não fecha o circuito)

• v0v1, v2v3 ,..., vn-2

vn-1

Page 38: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

• GL_LINE_LOOP – Liga todos os pontos (fecha o circuito)

• v0v1, v2v3 ,..., vn-2

vn-1, vn-1 v0

Page 39: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

• GL_TRIANGLES – A cada três vértices forma um triângulo

• v0v1v2, v3v4v5 ,..., vn-3vn-2 vn-1

Page 40: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

GL_TRIANGLES

glBegin(GL_TRIANGLES); glVertex2f(10,90); glVertex2f(10,10); glVertex2f(35,75); glVertex2f(30,20); glVertex2f(90,90); glVertex2f(80,40); glEnd();

Page 41: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

• GL_TRIANGLE_STRIP - Liga uma série de triângulos, formando uma tira com os mesmos.

• v0v1v2, v1v3v2 , v2v3v4 , ...,vn-3vn-2

vn-1 (para n ímpar)• v0v1v2, v1v3v2 ,

v2v3v4 , ..., vn-3vn-1

vn-2 (para n par)

Page 42: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

GL_TRIANGLE_STRIP glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glBegin(GL_TRIANGLE_STRIP); glVertex3f(10,90, 0); glVertex3f(10,10, 0); glVertex3f(35,75, 0); glVertex3f(30,20, 0); glVertex3f(90,90, 0); glVertex3f(80,40, 0); glEnd();

Page 43: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

Exercício 1 • Usando GL_TRIANGLE_STRIP reproduza as figuras

abaixo:

Page 44: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

• GL_TRIANGLE_FAN – A palavra "fan" significa “leque” em português. Ou seja, cria-se um leque no plano.

• v0v1v2, v0v2v3 , v0v3v4 , ..., v0vn-2 vn-1

Page 45: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

GL_TRIANGLE_FAN

Page 46: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

• GL_QUADS – A cada quatro vértices definidos, é desenhado um quadrado na tela.

• V0v1v3v2,v4v5v6v7,..

Page 47: Introdução a OpenGL · • pasta C:\Dev-C++\Lib contém os arquivos opengl32.def, glaux.def e glu32.def. • Faça o download do arquivo glut-devc.zip e descompacte o mesmo;

GL_QUADSglPolygonMode(GL_FRONT_AND

_BACK, GL_LINE); glBegin(GL_QUADS); glColor3f (0.0, 0.0, 1.0); glVertex3f(10,90,0); glVertex3f(10,10,0); glVertex3f(40,20,0); glVertex3f(35,75,0); glColor3f (0.0, 0.7, 1.0); glVertex3f(15,80,0); glVertex3f(20,10,0); glVertex3f(90,20,0); glVertex3f(90,75,0); glEnd();