introdução à opengl com java - lcad.icmc.usp.br · introdução à opengl com java instalando...

23

Upload: vancong

Post on 09-Nov-2018

266 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

Introdução à Opengl com Java

SCC0250 - Computação Grá�ca

Prof. Fernando V. Paulovichhttp://www.icmc.usp.br/~paulovic

[email protected]

Instituto de Ciências Matemáticas e de Computação (ICMC)Universidade de São Paulo (USP)

8 de março de 2012

1 / 23

Page 2: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

Instalando

Sumário

1 Instalando

2 OpenGL

2 / 23

Page 3: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

Instalando

Sumário

1 Instalando

2 OpenGL

3 / 23

Page 4: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

Instalando

Instalando Plug-in Netbeans

Instale o Netbeans http://netbeans.org/Faça download e instale o plug-in NetBeans OpenGL Pack

http://plugins.netbeans.org/PluginPortal/faces/

PluginDetailPage.jsp;jsessionid=

92dc9baf4c97e0db77c57dbc8a32?pluginid=3260Ferramentas -> Plug-ins -> Baixados -> Adicionar plug-ins

Desabilitar a instalação de �GLSL editor� e �GLSL Compilereditor support�

4 / 23

Page 5: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

Instalando

Utilizando Bibliotecas

Outra forma de usar a JOGL é incluindo as bibliotecasnecessárias

gluegen-rt.jarjogl.jar

E deixar �visível� as DLLs correspondentes (o mesmo vale paraLinux)

glu32.dllgluegen-rt.dllglut32.dlljogl.dllopengl32.dlljogl_awt.dlljogl_cg.dll

5 / 23

Page 6: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Sumário

1 Instalando

2 OpenGL

6 / 23

Page 7: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Introdução

Application Programming Interface (API)

Coleção de rotinas que o programador pode chamarModelo de como estas rotinas operam em conjunto para gerargrá�cosProgramador �enxerga� apenas a interfaceNão precisa lidar com aspectos especí�cos do hardware ouidiossincracias de software no sistema grá�co residente(independente do dispositivo)Oferece suporte para gerar e exibir cenas 3D complexas, etambém para grá�cos 2D simples

7 / 23

Page 8: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

OpenGL

Ambiente p/ escrever e executar programas grá�cosMonitor (�tela�) + biblioteca de software � para desenharprimitivas grá�cas na tela

API pode ser vista como uma �caixa preta�Entradas: Chamadas a funções da biblioteca feitas peloprograma do usuário; Medidas fornecidas por dispositivos deentrada; etcSaídas: Os grá�cos exibidos no monitorDescrita em termos das funções que disponibiliza

8 / 23

Page 9: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

API OpenGL

Programa

Em geral, trabalha com um sistema de janelas (�windowsystem�)Inicializações: modo de exibição (�display mode�), janela dedesenho e sistema de coordenadas de referência (associado àjanela)

API oferece centenas de funções...

Diferentes funcionalidadesFunções primitivas: o queFunções de atributos: como...

9 / 23

Page 10: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Programação Dirigida a Eventos

Direcionada a eventos (event-driven)programa responde a eventos: clique do mouse, teclapressionada, redimensionamento da janela

10 / 23

Page 11: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Estados do OpenGL

OpenGL rastreia diversas variáveis de estadoTamanho atual de um ponto, cor de fundo da janela, cor dodesenho, etc.O valor corrente permanece ativo até que seja alterado

Tamanho 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 bitsdo �color bu�er� serão modi�cados para a cor de fundo

11 / 23

Page 12: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Programando

OpenGL é utilizada junto com outras bibliotecas auxiliaresOpenGL Utility (GLU): de�nir a visão, matrizes de projeção,aproximação poligonal, desenho de superfícies, etcOpenGL Utility Toolkit (GLUT): de�ne o sistema de janelas, eoutras funções de desenho de superfície

12 / 23

Page 13: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Programando

Implementar a interface GLEventListener, responsável pelodesenho e outras funções

1 public class Renderer implements GLEventListener {

2

3 public void init(GLAutoDrawable drawable) {

4 //inicializar o sistema5 }

6

7 public void display(GLAutoDrawable drawable) {

8 //função de desenho9 }

10

11 public void reshape(GLAutoDrawable drawable, int x, int y, int ←↩width, int height) {

12 //função de redimensionamento13 }

14

15 public void displayChanged(GLAutoDrawable drawable, boolean ←↩modeChanged, boolean deviceChanged) {

16 //função para mudança no display17 }

18 }

13 / 23

Page 14: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Programando

Registrar o ouvinte em um painel e adicioná-lo em uma janela

1 //acelera o rendering2 GLCapabilities caps = new GLCapabilities();

3 caps.setDoubleBuffered(true);

4 caps.setHardwareAccelerated(true);

5

6 //cria o painel e adiciona um ouvinte GLEventListener7 GLCanvas canvas = new GLCanvas(caps);

8 canvas.addGLEventListener(new Renderer());

9

10 //cria uma janela e adiciona o painel11 JFrame frame = new JFrame("Aplicação JOGL Simples");

12 frame.getContentPane().add(canvas);

13 frame.setSize(400, 300);

14 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

15

16 //inicializa o sistema e chama display() a 60 fps17 Animator animator = new FPSAnimator(canvas, 60);

18 frame.setLocationRelativeTo(null);

19 frame.setVisible(true);

20 animator.start();

14 / 23

Page 15: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Programando

De�ne o método de inicialização

1 public void init(GLAutoDrawable drawable) {

2 GL gl = drawable.getGL();

3

4 gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //de�ne cor de fundo5 gl.glMatrixMode(GL.GL_PROJECTION); //carrega a matriz de projeção6 gl.glLoadIdentity(); //lê a matriz identidade7

8 GLU glu = new GLU();

9 glu.gluOrtho2D(0.0, 200.0, 0.0, 150.0); //de�ne projeção ortogonal 2D10 }

15 / 23

Page 16: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Programando

O pipeline da OpenGL é sempre 3D, mas é possível criardesenhos 2D, de�nindo

glMatrixMode(GL_PROJECTION)gluOrtho2D(0.0, 200.0, 0.0, 150.0)

16 / 23

Page 17: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Programando

OpenGL permite desenhar grá�cos de modo independente dodispositivoÉ possível especi�car o Sistema de Coordenadas do Mundo(ponto �utuante) onde os objetos são de�nidosOs elementos são traçados no Sistema de Coordenadas doDispositivo, ou Sistema de Coordenadas da Tela (inteiro)

O mapeamento entre esses sistemas de coordenadas é feito deforma transparente pela OpenGL

17 / 23

Page 18: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Programando

De�ne o método de desenho

1 public void display(GLAutoDrawable drawable) {

2 GL gl = drawable.getGL();

3

4 gl.glClear(GL.GL_COLOR_BUFFER_BIT); //desenha o fundo (limpa a janela)5 gl.glColor3f(1.0f, 0.0f, 0.0f); //altera o atributo de cor6

7 gl.glBegin(GL.GL_LINES); //desenha uma linha8 gl.glVertex2i(10, 10);

9 gl.glVertex2i(190, 140);

10 gl.glEnd();

11

12 gl.glFlush(); //processa as rotinas OpenGL o mais rápido possível13 }

18 / 23

Page 19: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Primitivas

Primitivas básicasPontos, linhas, poli-linhas, polígonos (GL_POINTS,GL_LINES, GL_POLYGON, etc.)

Para descrever um objeto, uma lista de vértices é informada

1 gl.glBegin(GL_POINTS);

2 gl.glVertex2i(100, 50); // desenha 3 pontos3 gl.glVertex2i(100, 130);

4 gl.glVertex2i(150, 130);

5 gl.glEnd();

19 / 23

Page 20: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Primitivas

20 / 23

Page 21: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Outras Primitivas: Poli-linhas e Polígonos

Poli-linha: GL_LINE_STRIP, GL_LINE_LOOPseqüência de linhas conectadas... fechada ou não

Outras primitivasGL_TRIANGLESGL_QUADSGL_TRIANGLE_STRIPGL_TRIANGLE_FANGL_QUAD_STRIP

21 / 23

Page 22: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Outras Primitivas: Poli-linhas e Polígonos

22 / 23

Page 23: Introdução à Opengl com Java - lcad.icmc.usp.br · Introdução à Opengl com Java Instalando Instalando Plug-in Netbeans Instale o Netbeans Faça download e instale o plug-in

Introdução à Opengl com Java

OpenGL

Exercício

Fazer um programa que desenhe alguma imagem 2DEsse programa deve possibilitar fazer zoom e pan

23 / 23