Top Banner
                     
23

SCC0250 Slides 05 Introducao Opengl Java

Jul 21, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

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