JOGL - Desenho Básico
A API OpenGL fornece métodos primitivos para desenhar elementos gráficos básicos, como ponto, vértice, linha, etc. Usando esses métodos, você pode desenvolver formas como triângulo, polígono e círculo. Em ambas as dimensões, 2D e 3D. Este capítulo ensina como desenhar uma linha básica usando JOGL em um programa Java.
Objetos de Desenho
Para acessar programas que são específicos para plataformas de hardware e sistema operacional e onde as bibliotecas são escritas em outras linguagens como C e C ++ (aplicativos nativos), Java usa uma estrutura de programação chamada Java Native Interface (JNI). O JOGL usa essa interface internamente para acessar as funções do OpenGL conforme mostrado no diagrama a seguir.
Todos os quatro métodos de GLEventListenerinterface tem o código (métodos java JOGL) para chamar funções OpenGL internamente. A nomenclatura desses métodos JOGL também é semelhante às convenções de nomenclatura do OpenGL. Se o nome da função em OpenGL forglBegin(), é usado como gl.glBegin().
Sempre que gl.glBegin() método de java JOGL é chamado, ele invoca internamente o glBegin()método do OpenGL. Esta é a razão para instalar os arquivos da biblioteca nativa no sistema do usuário no momento da instalação do JOGL.
O Método Display ()
Este é um método importante que contém o código para desenvolver gráficos. Requer oGLAutoDrawable objeto de interface como seu parâmetro.
o display()O método inicialmente obtém o contexto OpenGL usando o objeto da interface GL (GL herda a interface GLBase que contém métodos para gerar todos os objetos de contexto OpenGL). Como este tutorial é sobre JOGL2, vamos gerar um objeto GL2.
O seguinte trecho de código mostra como gerar um objeto GL2 -
//Generating GL object
GL gl = drawable.getGL();
GL gl = drawable.getGL();
//Using this Getting the Gl2 Object
//this can be written in a single line like
final GL2 gl = drawable.getGL().getGL2();
Utilizando o objeto da interface GL2, é possível acessar os membros desta interface, que por sua vez fornecem acesso às funções do OpenGL [1.0 ... 3.0].
Desenhando uma Linha
A interface GL2 contém uma lista enorme de métodos, mas aqui três métodos importantes principais são discutidos, a saber glBegin(), glVertex()e glEnd().
Sr. Não. | Métodos e Descrição |
---|---|
1 | glBegin() Este método inicia o processo de desenho de uma linha. Ele leva o número inteiro de string predefinido “GL_LINES” como parâmetro, que é herdado da interface GL. |
2 | glVertex3f()/glVertex2f() Este método cria o vértice e temos que passar as coordenadas como parâmetros 3f e 2f, que denotam coordenadas de ponto flutuante tridimensional e coordenadas de ponto flutuante bidimensional, respectivamente. |
3 | glEnd() termina a linha |
Abaixo fornecido é o programa para desenhar uma linha básica usando JOGL -
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.swing.JFrame;
public class Line implements GLEventListener {
@Override
public void display(GLAutoDrawable drawable) {
final GL2 gl = drawable.getGL().getGL2();
gl.glBegin (GL2.GL_LINES);//static field
gl.glVertex3f(0.50f,-0.50f,0);
gl.glVertex3f(-0.50f,0.50f,0);
gl.glEnd();
}
@Override
public void dispose(GLAutoDrawable arg0) {
//method body
}
@Override
public void init(GLAutoDrawable arg0) {
// method body
}
public static void main(String[] args) {
//getting the capabilities object of GL2 profile
final GLProfile profile = GLProfile.get(GLProfile.GL2);
GLCapabilities capabilities = new GLCapabilities(profile);
// The canvas
final GLCanvas glcanvas = new GLCanvas(capabilities);
Line l = new Line();
glcanvas.addGLEventListener(l);
glcanvas.setSize(400, 400);
//creating frame
final JFrame frame = new JFrame ("straight Line");
//adding canvas to frame
frame.getContentPane().add(glcanvas);
frame.setSize(frame.getContentPane().getPreferredSize());
frame.setVisible(true);
}//end of main
}//end of classimport javax.media.opengl.GL2;