Introdução à Opengl com Java
Introdução à Opengl com Java
SCC0250 - Computação Grá�ca
Prof. Fernando V. Paulovichhttp://www.icmc.usp.br/~paulovic
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
Introdução à Opengl com Java
Instalando
Sumário
1 Instalando
2 OpenGL
2 / 23
Introdução à Opengl com Java
Instalando
Sumário
1 Instalando
2 OpenGL
3 / 23
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
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
Introdução à Opengl com Java
OpenGL
Sumário
1 Instalando
2 OpenGL
6 / 23
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
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
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
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
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
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
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
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
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
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
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
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
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
Introdução à Opengl com Java
OpenGL
Primitivas
20 / 23
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
Introdução à Opengl com Java
OpenGL
Outras Primitivas: Poli-linhas e Polígonos
22 / 23
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
Top Related