JOGL - Grundlagen des Zeichnens
Die OpenGL-API bietet primitive Methoden zum Zeichnen grundlegender grafischer Elemente wie Punkt, Scheitelpunkt, Linie usw. Mit diesen Methoden können Sie Formen wie Dreieck, Polygon und Kreis entwickeln. In 2D- und 3D-Dimensionen. In diesem Kapitel erfahren Sie, wie Sie mit JOGL in einem Java-Programm eine Grundlinie zeichnen.
Objekte zeichnen
Für den Zugriff auf Programme, die für Hardware- und Betriebssystemplattformen spezifisch sind und bei denen die Bibliotheken in anderen Sprachen wie C und C ++ (native Anwendungen) geschrieben sind, verwendet Java ein Programmierframework namens Java Native Interface (JNI). JOGL verwendet diese Schnittstelle intern, um auf OpenGL-Funktionen zuzugreifen, wie in der folgenden Abbildung dargestellt.
Alle vier Methoden von GLEventListenerSchnittstelle haben den Code (Java JOGL-Methoden), um OpenGL-Funktionen intern aufzurufen. Die Benennung dieser JOGL-Methoden ähnelt auch den Namenskonventionen von OpenGL. Wenn der Funktionsname in OpenGL lautetglBegin()wird es verwendet als gl.glBegin().
Wann immer die gl.glBegin() Methode von Java JOGL heißt, es ruft intern die glBegin()Methode von OpenGL. Dies ist der Grund für die Installation nativer Bibliotheksdateien auf dem Benutzersystem zum Zeitpunkt der Installation von JOGL.
Die Display () -Methode
Dies ist eine wichtige Methode, die den Code für die Entwicklung von Grafiken enthält. Es erfordert dieGLAutoDrawable Schnittstellenobjekt als Parameter.
Das display()Die Methode ruft zunächst den OpenGL-Kontext mithilfe des Objekts der GL-Schnittstelle ab (GL erbt die GLBase-Schnittstelle, die Methoden zum Generieren aller OpenGL-Kontextobjekte enthält). Da es sich bei diesem Tutorial um JOGL2 handelt, generieren wir ein GL2-Objekt.
Das folgende Codefragment zeigt, wie ein GL2-Objekt generiert wird -
//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();
Über das Objekt der GL2-Schnittstelle kann auf die Mitglieder dieser Schnittstelle zugegriffen werden, die wiederum Zugriff auf OpenGL-Funktionen [1.0 ... 3.0] bieten.
Eine Linie zeichnen
Die GL2-Schnittstelle enthält eine große Liste von Methoden, aber hier werden drei wichtige Methoden diskutiert, nämlich glBegin(), glVertex(), und glEnd().
Sr.Nr. | Methoden und Beschreibung |
---|---|
1 | glBegin() Diese Methode startet den Prozess des Zeichnens einer Linie. Es wird eine vordefinierte Zeichenfolge-Ganzzahl "GL_LINES" als Parameter verwendet, die von der GL-Schnittstelle geerbt wird. |
2 | glVertex3f()/glVertex2f() Diese Methode erzeugt den Scheitelpunkt und wir müssen Koordinaten als Parameter 3f und 2f übergeben, die dreidimensionale Gleitkommakoordinaten bzw. zweidimensionale Gleitkommakoordinaten bezeichnen. |
3 | glEnd() beendet die Zeile |
Nachfolgend finden Sie das Programm zum Zeichnen einer Grundlinie mit 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;