JOGL - API per modello di base
Utilizzando la programmazione JOGL, è possibile disegnare varie forme grafiche come linee rette, triangoli, forme 3D inclusi effetti speciali come rotazione, illuminazione, colori, ecc. Per disegnare oggetti in JOGL prima di tutto dobbiamo costruire una cornice JOGL di base . Di seguito sono riportate le classi richieste per costruire un frame di base.
Interfaccia GLEventListener
Per rendere il tuo programma in grado di utilizzare l'API grafica JOGL, devi implementare GLEventListenerinterfaccia. Puoi trovare il fileGLEventListener interfaccia in javax.media.opengl pacchetto.
La tabella seguente fornisce i dettagli di vari metodi e descrizioni di GLEventListener interfaccia -
Sr.No. | Metodi e descrizioni |
---|---|
1 | Void display(GLAutoDrawable drawable) Viene chiamato dall'oggetto dell'interfaccia GLAutoDrawable per avviare il rendering OpenGL da parte del client. cioè, questo metodo contiene la logica utilizzata per disegnare elementi grafici utilizzando OpenGL API. |
2 | Void dispose(GLAutoDrawable drawable) Questo metodo segnala al listener di eseguire il rilascio di tutte le risorse OpenGL per ogni GLContext, come buffer di memoria e programmi GLSL. |
3 | Void init(GLAutoDrawble drawable) Viene chiamato dall'oggetto dell'interfaccia GLAutoDrawable immediatamente dopo l'inizializzazione del contesto OpenGL. |
4 | Void reshape(GLAutoDrawble drawble, int x, int y, int width, int height) Viene chiamato dall'oggetto dell'interfaccia GLAutoDrawable durante il primo ridisegno dopo che il componente è stato ridimensionato. Viene chiamato anche ogni volta che viene modificata la posizione del componente sulla finestra. |
Tutti i metodi di GLEventListener richiedono oggetto di GLAutoDrawable interfaccia come parametro.
Interfaccia GLAutoDrawable
Questa interfaccia fornisce un meccanismo basato sugli eventi (GLEventListener) per eseguire il rendering OpenGL. GLAutoDrawable crea automaticamente un contesto di rendering primario a cui è associato GLAutoDrawable per tutta la vita dell'oggetto.
La tabella seguente fornisce i dettagli di vari metodi e descrizioni di GLAutoDrawable interfaccia -
Suor n | Metodi e descrizioni |
---|---|
1 | GL getGL() Restituisce l'oggetto della pipeline GL utilizzato dall'oggetto corrente dell'interfaccia GLAutoDrawable. |
2 | void addGLEventListener(GLEventListener Listener) Aggiunge il listener specificato alla fine della coda drawable corrente. |
3 | void addGLEventListener(int index, GLEventListener listener) Aggiunge il listener dato all'indice dato di questa coda disegnabile. |
4 | void destroy() Destroys tutte le risorse associate a questo oggetto dell'interfaccia GLAutoDrawable, incluso GLContext. |
Note- Ci sono altri metodi in questo pacchetto. In questa interfaccia vengono discussi solo alcuni metodi importanti relativi al modello.
Classe GLCanvas
GLCanvas e GLJpanel sono le due classi principali di JOGL GUI che implementano GLAutoDrawable interfaccia, che può essere utilizzata come superfici di disegno per i comandi OpenGL.
GLCanvas è un componente AWT pesante che fornisce supporto per il rendering OpenGL. Questa è l'implementazione principale di un fileAWTAutoGLDrawableinterfaccia. Eredita anchejava.awt.Canvasclasse. Trattandosi di un componente pesante, in alcuni casi,GLJCanvaspotrebbe non integrarsi correttamente con il componente swing. Pertanto, è necessario prestare attenzione durante l'utilizzo con Swing. Ogni volta che affronti problemi conGLJCanvas, quindi devi usare GLJPanel classe.
Il diagramma gerarchico di classe GLCanvas può essere come mostrato di seguito -
GLEventistener l'interfaccia funziona insieme a GLCanvasclasse. Risponde ai cambiamenti inGLCanvas classe e alle richieste di disegno da loro avanzate.
Ogni volta GLCanvas class è istanziato, il init() metodo di GLEventListenerviene invocato. È possibile sovrascrivere questo metodo per inizializzare lo stato OpenGL.
Ogni volta GLCanvas viene inizialmente disegnato (istanziato) o ridimensionato, il file reshape() metodo di GLEventListenerviene eseguito. Viene utilizzato per inizializzare il viewport OpenGL e la matrice di proiezione. Viene anche chiamato ogni volta che viene modificata la posizione del componente.
Il metodo display () di GLEventListenercontiene il codice per il rendering della scena 3D. Viene invocato ogni volta che il metodo display () diGLCanvas viene invocato.
Di seguito sono riportati i costruttori necessari per istanziare la classe GLCanvas.
Suor n | Costruttore e descrizione |
---|---|
1 | GLCanvas() Crea un nuovo componente GLCanvas con un set predefinito di funzionalità OpenGL, utilizzando il meccanismo di selezione delle funzionalità OpenGL predefinito, sul dispositivo dello schermo predefinito. |
2 | GLCanvas(GLCapabilitiesImmutable) Crea un nuovo componente GLCanvas con il set richiesto di funzionalità OpenGL utilizzando il meccanismo di selezione delle funzionalità OpenGL predefinito sul dispositivo dello schermo predefinito. |
Di seguito vengono forniti i metodi utilizzati per la gestione degli eventi della classe GLCanvas.
Sr. No. | Metodi e descrizione |
---|---|
1 | void addGLEventListener(GLEventListener listener) Aggiunge l'ascoltatore dato alla fine di questa coda disegnabile. |
2 | void addGLEventListener(int indexGLEventListener listener) Aggiunge il listener dato all'indice dato di questa coda disegnabile. |
Per istanziare GLCanvas classe, hai bisogno dell'oggetto di GLCapabilitiesImmutable interfaccia, che specifica un insieme immutabile di funzionalità OpenGL.
Uno dei modi per ottenere un oggetto di CapabilitiesImmutable l'interfaccia è di istanziare GLCapabilitiesclass, che implementa l'interfaccia. Un'istanza diGLCapabilities classe può essere utilizzata per servire allo scopo.
Classe GLCapabilities
Questa classe specifica un insieme di funzionalità OpenGL. Accetta l'oggetto GLCapabilities come parametro. IlGLCapabilities class descrive le capacità desiderate che un contesto di rendering deve supportare, come il profilo OpenGL.
Di seguito viene fornito un costruttore per istanziare la classe GLCapabilities
Sr. No. | Metodi e descrizione |
---|---|
1 | GLCapabilities(GLProfile glprofile) Crea un oggetto GLCapabilities. |
Per istanziare GLCanvas class, è necessario un oggetto dell'interfaccia GLCapabilitiesImmutable, che specifica un insieme immutabile di funzionalità OpenGL.
Uno dei modi per ottenere un oggetto di CapabilitiesImmutable l'interfaccia è di istanziare GLCapabilitiesclass, che implementa l'interfaccia. L'istanza diGLCapabilities classe può essere utilizzata per servire allo scopo.
Il GLCapabilities classe a sua volta richiede un file GLProfile oggetto.
Classe GLProfile
Dal momento che sono state rilasciate diverse versioni di OpenGL API; è necessario specificare la versione esatta dell'API OpenGL utilizzata nel programma sulla JVM (Java Virtual Machine). Questo viene fatto usando ilGLProfile classe.
Il get() metodo di questa classe accetta diversi predefiniti Stringoggetti come parametri. Ogni oggetto String è un nome di un'interfaccia e ogni interfaccia supporta determinate versioni di OpenGL. Se si inizializza questa classe come statica e singleton, viene restituita singletonGLProfile oggetti per ogni profilo JOGL disponibile.
Di seguito viene fornito il prototipo del metodo get della classe GLProfile.
Sr.No. | Metodo e descrizione |
---|---|
1 | Static GLProfile get(String profile) Utilizza il dispositivo predefinito. |
Poiché si tratta di un metodo statico, è necessario richiamarlo utilizzando il nome della classe e richiede una variabile di stringa statica predefinita come parametro. Ci sono 12 variabili di questo tipo in questa classe, ognuna rappresenta un'implementazione individuale dell'interfaccia GL.
GLProfile.get(GLProfile.GL2);
Parametri del metodo get ()
Suor n | Valore stringa predefinito (nome interfaccia) e descrizione |
---|---|
1 | GL2 Questa interfaccia contiene tutti i metodi OpenGL [1.0… 3.0] così come la maggior parte delle sue estensioni definite al momento di questa specifica. |
2 | GLES1 Questa interfaccia contiene tutti i metodi OpenGL ES [1.0 ... 1.1] così come la maggior parte delle sue estensioni definite al momento di questa specifica. |
3 | GLES2 Questa interfaccia contiene tutti i metodi OpenGL ES 2.0 e la maggior parte delle sue estensioni definite al momento di questa specifica. |
4 | GLES3 Questa interfaccia contiene tutti i metodi OpenGL ES 3.0 e la maggior parte delle sue estensioni definite al momento di questa specifica. |
5 | GL2ES1 Questa interfaccia contiene il sottoinsieme comune di GL2 e GLES1. |
6 | GL2ES2 Questa interfaccia contiene il sottoinsieme comune di GL3, GL2 e GLES2. |
7 | GL2GL3 Questa interfaccia contiene il sottoinsieme comune del core GL3 (OpenGL 3.1+) e GL2. |
8 | GL3 Questa interfaccia contiene tutti i metodi principali di OpenGL [3.1 ... 3.3] così come la maggior parte delle sue estensioni definite al momento di questa specifica. |
9 | GL3bc Questa interfaccia contiene tutti i metodi di compatibilità OpenGL [3.1 ... 3.3] , così come la maggior parte delle sue estensioni definite al momento di questa specifica. |
10 | GL3ES3 Questa interfaccia contiene il sottoinsieme comune del core GL3 (OpenGL 3.1+) e GLES3 (OpenGL ES 3.0). |
11 | GL4 Questa interfaccia contiene tutti i metodi principali di OpenGL [4.0 ... 4.3] , così come la maggior parte delle sue estensioni definite al momento di questa specifica. |
12 | GL4bc Questa interfaccia contiene tutti i profili di compatibilità OpenGL [4.0 ... 4.3] , così come la maggior parte delle sue estensioni definite al momento di questa specifica. |
13 | GL4ES3 Interfaccia contenente il sottoinsieme comune del core GL4 (OpenGL 4.0+) e GLES3 (OpenGL ES 3.0). |
Classe GLJPanel
È un componente Swing leggero che fornisce supporto per il rendering OpenGL. Viene fornito per compatibilità con Swing.
Gerarchia di classi GLJPanel
Di seguito è riportato il diagramma che rappresenta la gerarchia delle classi della classe GLJPanel.
Di seguito sono riportati i vari costruttori della classe GLJPanel.
Sr. No. | Costruttori e descrizione |
---|---|
1 | GJPanel() Crea un nuovo componente GLJPanel con un set predefinito di funzionalità OpenGL. |
2 | (GLCapabilitiesImmutable) Crea un nuovo componente GLJPanel con il set richiesto di funzionalità OpenGL. |
3 | GLJPanel(GLCapabilitiesImmutable userCapsRequest, GLCapabilitiesChooser chooser) Crea un nuovo componente GLJPanel. |
Di seguito sono riportati i metodi della classe GLJPanel.
Sr.No. | Metodi e descrizione |
---|---|
1 | void addGLEventListener(GLEventListener listener) Questo metodo aggiunge l'ascoltatore dato alla fine di questa coda disegnabile. |
2 | void addGLEventListener(int indexGLEventListener listener) Questo metodo aggiunge il listener dato all'indice dato di questa coda disegnabile. |