Ahoi Forum,
ich habe mal wieder ein Problem mit JOGL, was primär wohl daran liegt, dass ich mit OpenGL an sich noch auf einer "lerne ich gerade" Ebene bin.
Ich habe eine recht umfangreiche OpenGL bzw JOGL Scene, die auf einen AWTCanvas gerendert wird und in einem Swing GUI eingebettet dargestellt wird.
Soweit funktioniert das auch alles wunderbar.
Nun wollte ich die Scene um eine Art "TextOverlay" erweitern im sinne von FPS Counter und diverser anderer informationen (später auch 2D texturen für eine art Interface).
Auch das klappt bereits Teilweise, hier mal ein Codeausschnitt:
Damit probiere ich gerade mit den Raster bzw Vector Textmöglichkeiten herum. Ich sehe beide Texte auch in meiner Scene, allerdings werden diese von meinem Trackball (also meiner Camera) beeinflusst, erfahren also ebenfalls wie die dargestellten objekte alle translationen und rotationen .
Wenn ich am anfang der Methode ein
sage, was meines Wissens nach eigendlich genau das vermeiden soll, sehe ich GARKEINEN text mehr .
Was ich konkret erreichen will:
ich will in der Scene quasi 2 ebenen haben.
1. die tatsächliche 3D-Szene die auf rotation und translation reagiert
2. eine 2D-Schicht die sich nie verändert, also immer z.b. in der linken oberen Ecke ist egal wo ich mich in der welt hinbewege.
Stehe da gerade aufm Schlauch und bin für jeden Tipp dankbar .
EDIT:
Achso falls es von bedeutung ist: die drawOverlay() calle ich in der display() function, wird also für jeden Frame aufgerufen. Das müsste denke ich korrekt sein...
EDIT2:
wo ich schon dabei bin:
Mein Trackball schaut zu beginn senkrecht auf den Ursprung (also auf 0,0), welcher in meinem Canvas aber nicht die untere linke ecke der Scene ist, sondern bereits ins Zentrum verschoben wurde.
Ergo erscheint mein Text derzeit ebenfalls im Zentrum des Bildes bei 0,0,0. Gibt es da nen einfachen weg den in die ecken zu bekommen? Das problem ist, dass der User die Fenstergröße nicht fix ist und zur Laufzeit verändert werden kann.
Achso und mit den Overlays soll NICHT interagiert werden müssen. sie dienen also wirklich rein als visuelle anzeige und sollen nicht klickbar, etc pp werden!
ich habe mal wieder ein Problem mit JOGL, was primär wohl daran liegt, dass ich mit OpenGL an sich noch auf einer "lerne ich gerade" Ebene bin.
Ich habe eine recht umfangreiche OpenGL bzw JOGL Scene, die auf einen AWTCanvas gerendert wird und in einem Swing GUI eingebettet dargestellt wird.
Soweit funktioniert das auch alles wunderbar.
Nun wollte ich die Scene um eine Art "TextOverlay" erweitern im sinne von FPS Counter und diverser anderer informationen (später auch 2D texturen für eine art Interface).
Auch das klappt bereits Teilweise, hier mal ein Codeausschnitt:
Java:
private void drawOverlay(GL gl, GLUT glut) {
gl.glPushMatrix();
gl.glRasterPos3f(0, 0, 0);
gl.glColor3f(0, 1, 0);
glut.glutBitmapString(GLUT.BITMAP_TIMES_ROMAN_10, "Ich bin ein Text");
gl.glPopMatrix();
gl.glColor3d(1, 1, 0);
gl.glPushMatrix();
gl.glTranslated(-1, -1, 0);
gl.glScaled(.25, .25, .25);
glut.glutStrokeString(GLUT.STROKE_ROMAN, "Auch ich bin ein Text");
gl.glPopMatrix();
}
Damit probiere ich gerade mit den Raster bzw Vector Textmöglichkeiten herum. Ich sehe beide Texte auch in meiner Scene, allerdings werden diese von meinem Trackball (also meiner Camera) beeinflusst, erfahren also ebenfalls wie die dargestellten objekte alle translationen und rotationen .
Wenn ich am anfang der Methode ein
Code:
gl.glLoadIdentiy()
Was ich konkret erreichen will:
ich will in der Scene quasi 2 ebenen haben.
1. die tatsächliche 3D-Szene die auf rotation und translation reagiert
2. eine 2D-Schicht die sich nie verändert, also immer z.b. in der linken oberen Ecke ist egal wo ich mich in der welt hinbewege.
Stehe da gerade aufm Schlauch und bin für jeden Tipp dankbar .
EDIT:
Achso falls es von bedeutung ist: die drawOverlay() calle ich in der display() function, wird also für jeden Frame aufgerufen. Das müsste denke ich korrekt sein...
EDIT2:
wo ich schon dabei bin:
Mein Trackball schaut zu beginn senkrecht auf den Ursprung (also auf 0,0), welcher in meinem Canvas aber nicht die untere linke ecke der Scene ist, sondern bereits ins Zentrum verschoben wurde.
Ergo erscheint mein Text derzeit ebenfalls im Zentrum des Bildes bei 0,0,0. Gibt es da nen einfachen weg den in die ecken zu bekommen? Das problem ist, dass der User die Fenstergröße nicht fix ist und zur Laufzeit verändert werden kann.
Achso und mit den Overlays soll NICHT interagiert werden müssen. sie dienen also wirklich rein als visuelle anzeige und sollen nicht klickbar, etc pp werden!
Zuletzt bearbeitet: