Introduo Opengl com Java
Introduo Opengl com JavaSCC0250 - Computao Grca
http://www.icmc.usp.br/[email protected]
Prof. Fernando V. Paulovich
Instituto de Cincias Matemticas e de Computao (ICMC) Universidade de So Paulo (USP)
8 de maro de 2012
1 / 23
Introduo Opengl com Java Instalando
Sumrio
1
Instalando
2
OpenGL
2 / 23
Introduo Opengl com Java Instalando
Sumrio
1
Instalando
2
OpenGL
3 / 23
Introduo Opengl com Java Instalando
Instalando Plug-in Netbeans
Instale o Netbeans
http://netbeans.org/
Faa download e instale o plug-in
http://plugins.netbeans.org/PluginPortal/faces/ PluginDetailPage.jsp;jsessionid= 92dc9baf4c97e0db77c57dbc8a32?pluginid=3260Ferramentas -> Plug-ins -> Baixados -> Adicionar plug-insDesabilitar a instalao de GLSL editor e GLSL Compiler editor support
NetBeans OpenGL Pack
4 / 23
Introduo Opengl com Java Instalando
Utilizando Bibliotecas
Outra forma de usar a JOGL incluindo as bibliotecas necessriasgluegen-rt.jar jogl.jar
E deixar visvel as DLLs correspondentes (o mesmo vale para Linux)glu32.dll gluegen-rt.dll glut32.dll jogl.dll opengl32.dll jogl_awt.dll jogl_cg.dll
5 / 23
Introduo Opengl com Java OpenGL
Sumrio
1
Instalando
2
OpenGL
6 / 23
Introduo Opengl com Java OpenGL
Introduo
Application Programming Interface (API) Coleo de rotinas que o programador pode chamar Modelo de como estas rotinas operam em conjunto para gerar grcos Programador enxerga apenas a interface No precisa lidar com aspectos especcos do hardware ou idiossincracias de software no sistema grco residente (independente do dispositivo) Oferece suporte para gerar e exibir cenas 3D complexas, e tambm para grcos 2D simples
7 / 23
Introduo Opengl com Java OpenGL
OpenGL
Ambiente p/ escrever e executar programas grcosMonitor (tela) + biblioteca de software para desenhar primitivas grcas na tela
API pode ser vista como uma caixa pretaEntradas: Chamadas a funes da biblioteca feitas pelo programa do usurio; Medidas fornecidas por dispositivos de entrada; etc Sadas: Os grcos exibidos no monitor Descrita em termos das funes que disponibiliza
8 / 23
Introduo Opengl com Java OpenGL
API OpenGL
Programa Em geral, trabalha com um sistema de janelas (window system) Inicializaes: modo de exibio (display mode), janela de desenho e sistema de coordenadas de referncia (associado janela)
API oferece centenas de funes... Diferentes funcionalidadesFunes primitivas: o que Funes de atributos: como ...
9 / 23
Introduo Opengl com Java OpenGL
Programao Dirigida a Eventos
Direcionada a eventos (event-driven)programa responde a eventos: clique do mouse, tecla pressionada, redimensionamento da janela
10 / 23
Introduo Opengl com Java OpenGL
Estados do OpenGL
OpenGL rastreia diversas variveis de estadoTamanho atual de um ponto, cor de fundo da janela, cor do desenho, etc. O valor corrente permanece ativo at que seja alteradoTamanho de ponto: glPointSize(3.0) Cor de desenho: glColor3f(red, green, blue) Cor de fundo: glClearColor(red, green, blue, alpha) Limpar janela: glClear(GL_COLOR_BUFFER_BIT) os bits do color buer sero modicados para a cor de fundo
11 / 23
Introduo Opengl com Java OpenGL
Programando
OpenGL utilizada junto com outras bibliotecas auxiliaresOpenGL Utility (GLU): denir a viso, matrizes de projeo, aproximao poligonal, desenho de superfcies, etc OpenGL Utility Toolkit (GLUT): dene o sistema de janelas, e outras funes de desenho de superfcie
12 / 23
Introduo Opengl com Java OpenGL
Programando
Implementar a interface
GLEventListener, responsvel pelo
desenho e outras funes1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
public class Renderer implements GLEventListener { public void init(GLAutoDrawable drawable) { }
//inicializar o sistema
public void display(GLAutoDrawable drawable) { }
//funo de desenho
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { }
//funo de redimensionamento
public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) { } }
//funo para mudana no display
13 / 23
Introduo Opengl com Java OpenGL
Programando
Registrar o ouvinte em um painel e adicion-lo em uma janela1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
//acelera o rendering
GLCapabilities caps = new GLCapabilities(); caps.setDoubleBuffered(true); caps.setHardwareAccelerated(true);
//cria o painel e adiciona um ouvinte GLEventListenerGLCanvas canvas = new GLCanvas(caps); canvas.addGLEventListener(new Renderer());
//cria uma janela e adiciona o painel
JFrame frame = new JFrame("Aplicao JOGL Simples"); frame.getContentPane().add(canvas); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//inicializa o sistema e chama display() a 60 fps
Animator animator = new FPSAnimator(canvas, 60); frame.setLocationRelativeTo(null); frame.setVisible(true); animator.start();14 / 23
Introduo Opengl com Java OpenGL
Programando
Dene o mtodo de inicializao1 2 3 4 5 6 7 8 9 10
public void init(GLAutoDrawable drawable) { GL gl = drawable.getGL(); gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //dene cor de fundo gl.glMatrixMode(GL.GL_PROJECTION); //carrega a matriz de projeo gl.glLoadIdentity(); //l a matriz identidade GLU glu = new GLU(); glu.gluOrtho2D(0.0, 200.0, 0.0, 150.0); //dene projeo ortogonal 2D
}
15 / 23
Introduo Opengl com Java OpenGL
Programando
O pipeline da OpenGL sempre 3D, mas possvel criar desenhos 2D, denindoglMatrixMode(GL_PROJECTION) gluOrtho2D(0.0, 200.0, 0.0, 150.0)
16 / 23
Introduo Opengl com Java OpenGL
Programando
OpenGL permite desenhar grcos de modo independente do dispositivo possvel especicar o Sistema de Coordenadas do Mundo (ponto utuante) onde os objetos so denidos Os elementos so traados no Sistema de Coordenadas do Dispositivo, ou Sistema de Coordenadas da Tela (inteiro)O mapeamento entre esses sistemas de coordenadas feito de forma transparente pela OpenGL
17 / 23
Introduo Opengl com Java OpenGL
Programando
Dene o mtodo de desenho1 2 3 4 5 6 7 8 9 10 11 12 13
public void display(GLAutoDrawable drawable) { GL gl = drawable.getGL(); gl.glClear(GL.GL_COLOR_BUFFER_BIT); //desenha o fundo (limpa a janela) gl.glColor3f(1.0f, 0.0f, 0.0f); //altera o atributo de cor gl.glBegin(GL.GL_LINES); //desenha uma linha gl.glVertex2i(10, 10); gl.glVertex2i(190, 140); gl.glEnd(); } gl.glFlush(); //processa as rotinas OpenGL o mais rpido possvel
18 / 23
Introduo Opengl com Java OpenGL
Primitivas
Primitivas bsicasPontos, linhas, poli-linhas, polgonos (GL_POINTS, GL_LINES, GL_POLYGON, etc.)
Para descrever um objeto, uma lista de vrtices informada1 2 3 4 5
gl.glBegin(GL_POINTS); gl.glVertex2i(100, 50); // desenha 3 pontos gl.glVertex2i(100, 130); gl.glVertex2i(150, 130); gl.glEnd();
19 / 23
Introduo Opengl com Java OpenGL
Primitivas
20 / 23
Introduo Opengl com Java OpenGL
Outras Primitivas: Poli-linhas e Polgonos
Poli-linha: GL_LINE_STRIP, GL_LINE_LOOPseqncia de linhas conectadas... fechada ou no
Outras primitivasGL_TRIANGLES GL_QUADS GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUAD_STRIP
21 / 23
Introduo Opengl com Java OpenGL
Outras Primitivas: Poli-linhas e Polgonos
22 / 23
Introduo Opengl com Java OpenGL
Exerccio
Fazer um programa que desenhe alguma imagem 2DEsse programa deve possibilitar fazer zoom e pan
23 / 23