JOGL - API für Basisvorlage

Mit der JOGL-Programmierung können verschiedene grafische Formen wie gerade Linien, Dreiecke, 3D-Formen einschließlich Spezialeffekten wie Drehung, Beleuchtung, Farben usw. gezeichnet werden. Um Objekte in JOGL zu zeichnen, müssen wir zunächst einen grundlegenden JOGL-Rahmen erstellen . Nachfolgend sind die Klassen aufgeführt, die zum Erstellen eines Grundrahmens erforderlich sind.

GLEventListener-Schnittstelle

Damit Ihr Programm die grafische JOGL-API verwenden kann, müssen Sie implementieren GLEventListenerSchnittstelle. Sie finden dieGLEventListener Schnittstelle in der javax.media.opengl Paket.

Die folgende Tabelle enthält Einzelheiten zu verschiedenen Methoden und Beschreibungen von GLEventListener Schnittstelle -

Sr.Nr. Methoden und Beschreibungen
1

Void display(GLAutoDrawable drawable)

Es wird vom Objekt der GLAutoDrawable-Schnittstelle aufgerufen, um das OpenGL-Rendering durch den Client zu initiieren. Das heißt, diese Methode enthält die Logik zum Zeichnen grafischer Elemente mithilfe der OpenGL-API.

2

Void dispose(GLAutoDrawable drawable)

Diese Methode signalisiert dem Listener, die Freigabe aller OpenGL-Ressourcen für jeden GLContext durchzuführen, z. B. Speicherpuffer und GLSL-Programme.

3

Void init(GLAutoDrawble drawable)

Es wird vom Objekt der GLAutoDrawable-Schnittstelle unmittelbar nach der Initialisierung des OpenGL-Kontexts aufgerufen.

4

Void reshape(GLAutoDrawble drawble, int x, int y, int width, int height)

Es wird vom Objekt der GLAutoDrawable-Schnittstelle beim ersten Repaint aufgerufen, nachdem die Größe der Komponente geändert wurde. Es wird auch aufgerufen, wenn die Position der Komponente im Fenster geändert wird.

Alle Methoden von GLEventListener erfordern Objekt von GLAutoDrawable Schnittstelle als Parameter.

GLAutoDrawable-Schnittstelle

Diese Schnittstelle bietet einen ereignisbasierten Mechanismus (GLEventListener) zum Durchführen von OpenGL-Rendering. GLAutoDrawable Erstellt automatisch einen primären Renderkontext, der zugeordnet ist GLAutoDrawable für die Lebensdauer des Objekts.

Die folgende Tabelle enthält Einzelheiten zu verschiedenen Methoden und Beschreibungen von GLAutoDrawable Schnittstelle -

Sr.Nr. Methoden und Beschreibungen
1

GL getGL()

Gibt das GL-Pipeline-Objekt zurück, das vom aktuellen Objekt der GLAutoDrawable-Schnittstelle verwendet wird.

2

void addGLEventListener(GLEventListener Listener)

Fügt den angegebenen Listener am Ende der aktuellen Zeichnungswarteschlange hinzu.

3

void addGLEventListener(int index, GLEventListener listener)

Fügt den angegebenen Listener am angegebenen Index dieser zeichnbaren Warteschlange hinzu.

4

void destroy()

Destroys Alle Ressourcen, die diesem Objekt der GLAutoDrawable-Schnittstelle zugeordnet sind, einschließlich des GLContext.

Note- Dieses Paket enthält andere Methoden. In dieser Schnittstelle werden nur einige wichtige Methoden zur Vorlage erläutert.

GLCanvas-Klasse

GLCanvas und GLJpanel sind die beiden Hauptklassen der JOGL-GUI, die implementiert werden GLAutoDrawable Schnittstelle, die als Zeichenfläche für OpenGL-Befehle verwendet werden kann.

GLCanvas ist eine schwere AWT-Komponente, die OpenGL-Rendering-Unterstützung bietet. Dies ist die primäre Implementierung einesAWTAutoGLDrawableSchnittstelle. Es erbt auchjava.awt.CanvasKlasse. Da es sich in bestimmten Fällen um eine Schwergewichtskomponente handelt,GLJCanvasmöglicherweise nicht richtig in die Schwenkkomponente integriert. Daher ist bei der Verwendung mit Swing Vorsicht geboten. Wann immer Sie Probleme mit habenGLJCanvas, dann musst du verwenden GLJPanel Klasse.

Das hierarchische Diagramm der Klasse GLCanvas kann wie unten gezeigt sein -

  • GLEventistener Schnittstelle funktioniert zusammen mit GLCanvasKlasse. Es reagiert auf die Änderungen inGLCanvas Klasse und zu den von ihnen gestellten Zeichnungsanfragen.

  • Wann immer GLCanvas Klasse wird instanziiert, die init() Methode von GLEventListenerwird aufgerufen. Sie können diese Methode überschreiben, um den OpenGL-Status zu initialisieren.

  • Wann immer GLCanvas wird anfänglich gezeichnet (instanziiert) oder in der Größe geändert reshape() Methode von GLEventListenerausgeführt wird. Es wird verwendet, um das OpenGL-Ansichtsfenster und die Projektionsmatrix zu initialisieren. Es wird auch aufgerufen, wenn der Standort der Komponente geändert wird.

  • Die display () -Methode von GLEventListenerenthält den Code zum Rendern der 3D-Szene. Es wird immer dann aufgerufen, wenn die display () -Methode vonGLCanvas wird aufgerufen.

Nachfolgend sind die Konstruktoren aufgeführt, die zum Instanziieren der GLCanvas-Klasse erforderlich sind.

Sr.Nr. Konstruktor und Beschreibung
1

GLCanvas()

Es erstellt eine neue GLCanvas-Komponente mit einem Standardsatz von OpenGL-Funktionen unter Verwendung des Standardmechanismus zur Auswahl von OpenGL-Funktionen auf dem Standardbildschirmgerät.

2

GLCanvas(GLCapabilitiesImmutable)

Es erstellt eine neue GLCanvas-Komponente mit den angeforderten OpenGL-Funktionen unter Verwendung des Standardmechanismus zur Auswahl der OpenGL-Funktionen auf dem Standardbildschirmgerät.

Nachfolgend sind die Methoden aufgeführt, die für die Ereignisbehandlung der GLCanvas-Klasse verwendet werden.

Sr. Nr. Methoden und Beschreibung
1

void addGLEventListener(GLEventListener listener)

Fügt den angegebenen Listener am Ende dieser zeichnbaren Warteschlange hinzu.

2

void addGLEventListener(int indexGLEventListener listener)

Fügt den angegebenen Listener am angegebenen Index dieser zeichnbaren Warteschlange hinzu.

Instanziieren GLCanvas Klasse, brauchen Sie das Objekt von GLCapabilitiesImmutable Schnittstelle, die einen unveränderlichen Satz von OpenGL-Funktionen angibt.

Eine der Möglichkeiten, ein Objekt von zu bekommen CapabilitiesImmutable Schnittstelle ist zu instanziieren GLCapabilitiesKlasse, die die Schnittstelle implementiert. Eine Instanz vonGLCapabilities Klasse kann verwendet werden, um den Zweck zu erfüllen.

GLCapabilities-Klasse

Diese Klasse gibt eine Reihe von OpenGL-Funktionen an. Es nimmt das GLCapabilities-Objekt als Parameter. DasGLCapabilities Klasse beschreibt die gewünschten Funktionen, die ein Rendering-Kontext unterstützen muss, z. B. das OpenGL-Profil.

Unten ist ein Konstruktor zum Instanziieren der GLCapabilities-Klasse angegeben

Sr. Nr. Methoden und Beschreibung
1

GLCapabilities(GLProfile glprofile)

Es wird ein GLCapabilities-Objekt erstellt.

Instanziieren GLCanvas Klasse benötigen Sie ein Objekt der GLCapabilitiesImmutable-Schnittstelle, das einen unveränderlichen Satz von OpenGL-Funktionen angibt.

Eine der Möglichkeiten, ein Objekt von zu bekommen CapabilitiesImmutable Schnittstelle ist zu instanziieren GLCapabilitiesKlasse, die die Schnittstelle implementiert. Die Instanz vonGLCapabilities Klasse kann verwendet werden, um den Zweck zu erfüllen.

Das GLCapabilities Klasse wiederum erfordert a GLProfile Objekt.

GLProfile-Klasse

Da mehrere Versionen der OpenGL-API veröffentlicht wurden; Sie müssen die genaue Version der OpenGL-API, die in Ihrem Programm verwendet wird, für Ihre Java Virtual Machine (JVM) angeben. Dies geschieht mit demGLProfile Klasse.

Das get() Methode dieser Klasse akzeptiert verschiedene vordefinierte StringObjekte als Parameter. Jedes String-Objekt ist ein Name einer Schnittstelle und jede Schnittstelle unterstützt bestimmte Versionen von OpenGL. Wenn Sie diese Klasse als statisch und Singleton initialisieren, erhalten Sie SingletonGLProfile Objekte für jedes verfügbare JOGL-Profil.

Unten ist der Prototyp der get-Methode der GLProfile-Klasse angegeben.

Sr.Nr. Methode und Beschreibung
1

Static GLProfile get(String profile)

Verwendet das Standardgerät.

Da dies eine statische Methode ist, müssen Sie sie unter Verwendung des Klassennamens aufrufen, und es ist eine vordefinierte statische Zeichenfolgenvariable als Parameter erforderlich. Diese Klasse enthält 12 solcher Variablen, die jeweils eine individuelle Implementierung der GL-Schnittstelle darstellen.

GLProfile.get(GLProfile.GL2);

Parameter der Methode get ()

Sr.Nr. Vordefinierter Zeichenfolgenwert (Schnittstellenname) und Beschreibung
1

GL2

Diese Schnittstelle enthält alle OpenGL-Methoden [1.0… 3.0] sowie die meisten zum Zeitpunkt dieser Spezifikation definierten Erweiterungen.

2

GLES1

Diese Schnittstelle enthält alle OpenGL ES [1.0 ... 1.1] -Methoden sowie die meisten zum Zeitpunkt dieser Spezifikation definierten Erweiterungen.

3

GLES2

Diese Schnittstelle enthält alle OpenGL ES 2.0-Methoden sowie die meisten der zum Zeitpunkt dieser Spezifikation definierten Erweiterungen.

4

GLES3

Diese Schnittstelle enthält alle OpenGL ES 3.0-Methoden sowie die meisten zum Zeitpunkt dieser Spezifikation definierten Erweiterungen.

5

GL2ES1

Diese Schnittstelle enthält die gemeinsame Teilmenge von GL2 und GLES1.

6

GL2ES2

Diese Schnittstelle enthält die gemeinsame Teilmenge von GL3, GL2 und GLES2.

7

GL2GL3

Diese Schnittstelle enthält die gemeinsame Teilmenge von Core GL3 (OpenGL 3.1+) und GL2.

8

GL3

Diese Schnittstelle enthält alle OpenGL [3.1 ... 3.3] Kern - Methoden sowie die meisten seiner Erweiterungen zum Zeitpunkt dieser Spezifikation definiert.

9

GL3bc

Diese Schnittstelle enthält alle OpenGL- Kompatibilitätsmethoden [3.1 ... 3.3] sowie die meisten Erweiterungen, die zum Zeitpunkt dieser Spezifikation definiert wurden.

10

GL3ES3

Diese Schnittstelle enthält die gemeinsame Teilmenge von Core GL3 (OpenGL 3.1+) und GLES3 (OpenGL ES 3.0).

11

GL4

Diese Schnittstelle enthält alle OpenGL [4.0 ... 4.3] Kern Methoden, sowie die meisten seiner Erweiterungen zum Zeitpunkt dieser Spezifikation definiert.

12

GL4bc

Diese Schnittstelle enthält alle OpenGL [4.0 ... 4.3] Kompatibilität Profil , wie auch die meisten seiner Erweiterungen zum Zeitpunkt dieser Spezifikation definiert.

13

GL4ES3

Schnittstelle mit der gemeinsamen Teilmenge von Core GL4 (OpenGL 4.0+) und GLES3 (OpenGL ES 3.0).

GLJPanel-Klasse

Es ist eine leichte Swing-Komponente, die OpenGL-Rendering-Unterstützung bietet. Es ist aus Gründen der Kompatibilität mit Swing vorgesehen.

GLJPanel-Klassenhierarchie

Das folgende Diagramm zeigt die Klassenhierarchie der GLJPanel-Klasse.

Nachstehend sind verschiedene Konstruktoren der GLJPanel-Klasse aufgeführt.

Sr. Nr. Konstruktoren und Beschreibung
1

GJPanel()

Es wird eine neue GLJPanel-Komponente mit einem Standardsatz von OpenGL-Funktionen erstellt.

2

(GLCapabilitiesImmutable)

Es wird eine neue GLJPanel-Komponente mit den angeforderten OpenGL-Funktionen erstellt.

3

GLJPanel(GLCapabilitiesImmutable userCapsRequest, GLCapabilitiesChooser chooser)

Es wird eine neue GLJPanel-Komponente erstellt.

Nachfolgend sind die Methoden der GLJPanel-Klasse aufgeführt.

Sr.Nr. Methoden und Beschreibung
1

void addGLEventListener(GLEventListener listener)

Diese Methode fügt den angegebenen Listener am Ende dieser zeichnbaren Warteschlange hinzu.

2

void addGLEventListener(int indexGLEventListener listener)

Diese Methode fügt den angegebenen Listener am angegebenen Index dieser zeichnbaren Warteschlange hinzu.