JOGL - Podstawy rysowania

OpenGL API udostępnia prymitywne metody rysowania podstawowych elementów graficznych, takich jak punkt, wierzchołek, linia itp. Za pomocą tych metod można tworzyć kształty takie jak trójkąt, wielokąt i okrąg. W wymiarach 2D i 3D. Ten rozdział uczy, jak narysować podstawową linię za pomocą JOGL w programie Java.

Rysowanie obiektów

Aby uzyskać dostęp do programów, które są specyficzne dla platform sprzętowych i systemów operacyjnych i gdzie biblioteki są napisane w innych językach, takich jak C i C ++ (aplikacje natywne), Java używa struktury programistycznej o nazwie Java Native Interface (JNI). JOGL używa tego interfejsu wewnętrznie, aby uzyskać dostęp do funkcji OpenGL, jak pokazano na poniższym diagramie.

Wszystkie cztery metody GLEventListenerinterfejs ma kod (metody JOGL java) do wewnętrznego wywoływania funkcji OpenGL. Nazewnictwo tych metod JOGL jest również podobne do konwencji nazewnictwa OpenGL. Jeśli nazwa funkcji w OpenGL toglBegin(), jest używany jako gl.glBegin().

Zawsze, gdy gl.glBegin() java JOGL, wywołuje wewnętrznie metodę glBegin()metoda OpenGL. Z tego powodu podczas instalacji JOGL w systemie użytkownika należy instalować natywne pliki biblioteczne.

Metoda Display ()

Jest to ważna metoda, która przechowuje kod do tworzenia grafiki. WymagaGLAutoDrawable obiekt interfejsu jako jego parametr.

Plik display()metoda początkowo pobiera kontekst OpenGL za pomocą obiektu interfejsu GL (GL dziedziczy interfejs GLBase, który zawiera metody do generowania wszystkich obiektów kontekstu OpenGL). Ponieważ ten samouczek dotyczy JOGL2, wygenerujmy obiekt GL2.

Poniższy fragment kodu pokazuje, jak wygenerować obiekt 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();

Korzystając z obiektu interfejsu GL2, można uzyskać dostęp do elementów tego interfejsu, które z kolei zapewniają dostęp do funkcji OpenGL [1.0 ... 3.0].

Rysowanie linii

Interfejs GL2 zawiera ogromną listę metod, ale tutaj omówione są trzy główne, ważne metody glBegin(), glVertex(), i glEnd().

Sr.No. Metody i opis
1

glBegin()

Ta metoda rozpoczyna proces rysowania linii. Pobiera predefiniowaną liczbę całkowitą „GL_LINES” jako parametr dziedziczony z interfejsu GL.

2

glVertex3f()/glVertex2f()

Ta metoda tworzy wierzchołek i musimy przekazać współrzędne jako parametry 3f i 2f, które oznaczają odpowiednio 3-wymiarowe współrzędne zmiennoprzecinkowe i 2-wymiarowe współrzędne zmiennoprzecinkowe.

3

glEnd()

kończy linię

Poniżej podany jest program do rysowania linii podstawowej za pomocą 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;