3D-Grafik JOGL - Verschiedene Perspektiven darstellen

JavaJ

Mitglied
Hallo zusammen,

ich bin gerade dabei mit JOGL (Java + OpenGL) eine 3D Ansicht zu realisieren. Dafür lasse ich mein Model in GLEventListener rendern (display()). In der init() Methode wird zuvor das Model geladen und die Perspektive festgelegt. Ich kann das Ganze auch schon anzeigen lassen in einem Frame. Jetzt will ich jedoch die Szene von mehreren verschiedenen Perspektiven anzeigen lassen (Frontansicht, Seitenansicht ...) Dafür könnte man ja mehrere GLEventListener erstellen, immer mit den gleichen Daten. Das müsste doch aber auch anderst gehen, oder? Dass man irgendwie in der display() Methode je nach Aufrufer vorher eine Rotation bzw. Translation durchführen kann.

Wie wird das umgesetzt? Kann mir da jemand helfen?
Danke schonmal!

Viele Grüße
 
Wenn alles in EINEN GLCanvas gerendert werden soll, sollte es eigentlich reichen, sowas zu machen wie (Pseudocode: )
Java:
void display()
{
    displayFront();
    displayLeft();
    ...
}

void displayFront()
{
    glViewPort(0,0,100,100);
    setViewMatrixForFront();
    renderScene();
}

void displayLeft()
{
    glViewPort(0,100,100,100);
    setViewMatrixForLeft();
    renderScene();
}
....

Oder meintest du was konkreteres?
 
Ja, so ähnlich hatte ich es auch gedacht. Muss ich dann meinen eigenen Animator dafür schreiben? Weil bei dem Standard Animator von Opengl sind die so schlau die run() Methode anonym zu machen, so dass man sie nicht überschreiben kann, also immer display() augerufen wird. Ich will die canvas nämlich in 2 verschiedenen JFrames anzeigen. Also einmal müsste ich dann display1() aufrufen und einmal display2() wobei diese Methoden zuerst die Perspektive ändern und dann display() aufrufen.
 
Bei zwei verschiedenen Frames (d.h. 2 verschiedenen GLCanvassen) wird es auch 2 verschiedene display-Methoden geben, die aber für das eigentliche Zeichnen ggf. nur eine gemeinsame "displayEverythingWithCurrentViewConfiguration"-Methode aufrufen...
 
Moin,

der Ansatz von Marco bezieht sich auf der Darstellung von zwei verschiedenen Perspektiven innerhalb einer GL-Zeichenfläche (GLWindow, GLCanvas, GPJPanel). Von OpenGL aus gesehen ist das auch der bessere Ansatz. Es gibt dort dann auch nur einen Animator (und der von jogl reicht auch vollkommen).

Wenn Du das in zwei verschiedenen JFrames darstellen willst, brauchst Du auch zwei verschiedene GL-Zeichenflächen mit auch jeweils einem eigenen Animator. Ein Beispiel mit zwei GLCanvas gibt es hier.

Gruß,
Fancy
 
Moin,

der Ansatz von Marco bezieht sich auf der Darstellung von zwei verschiedenen Perspektiven innerhalb einer GL-Zeichenfläche (GLWindow, GLCanvas, GPJPanel). Von OpenGL aus gesehen ist das auch der bessere Ansatz. Es gibt dort dann auch nur einen Animator (und der von jogl reicht auch vollkommen).

Wenn Du das in zwei verschiedenen JFrames darstellen willst, brauchst Du auch zwei verschiedene GL-Zeichenflächen mit auch jeweils einem eigenen Animator. Ein Beispiel mit zwei GLCanvas gibt es hier.

Gruß,
Fancy

Ok, also zwei Canvases erstellen und dann den glEventListener bei display() auf eine externe, gemeinsame display() Funktion lassen. Also grob so:

Code:
externedisplay() {
 ...
 Hier werden die Models gezeichnet
...
}

Code:
glEventListener1 Klasse
...
display() {
 Ansicht einstellen
 externedisplay() aufrufen
}


Code:
glEventListener2 Klasse
...
display() {
 Ansicht einstellen
 externedisplay() aufrufen
}

Und die init() funktioniert dann entsprechend.

Und wofür ist der Context genau? Verstehe die englische Beschreibung dazu nicht so richtig.
 

Zurück
Oben