[JOGL] glut-Text und andere Objekte

MrCastle

Mitglied
Hi Community,

ich habe mometan das Problem, dass ich mit glut generierten Text nicht gleichzeitig mit einem anderen Objekt aus Vertices (inkl. Textur) auf einer Szene darstellen kann.
Wie bereits aus dem Titel erkennbar wird benutze ich die JOGL wrapper library. Ich habe seit einer Weile mein Projekt nicht mehr angefasst, da ich im letzten Jahr leider wenig Zeit dafür hatte, daher bin ich mir z.B. bei der Benutzung der Methoden glPushMatrix() und glPopMatrix() an bestimmten Stellen nicht mehr sicher.

Sobald ich die Draw Methode nicht mehr aufrufe, wird der Text ordnungsgemäß angezeigt. Analog dazu: Wenn ich die Ausgabe das Textes auskommentiere (Aufrufe von glutBitmapString etc), dann wird das Objekt gezeichnet.
Wenn ich es so lasse wie oben zu sehen ist, dann wird ebenfalls nur das Objekt angezeigt.

Display Methode:
Code:
public void display(GLAutoDrawable gLDrawable) {
// GL-Objekt von der Zeichenfläche holen
final GL gl = gLDrawable.getGL();

// Zeichenfläche löschen
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL.GL_PROJECTION);
       gl.glLoadIdentity();
       
       // glu.gluOrtho2D(-1.0, 1.0, -1.0 * (float) height / (float) width, 1.0 * (float) height / (float) width);
       glu.gluOrtho2D(0, 0, width, height);
       gl.glMatrixMode(GL.GL_MODELVIEW);
       gl.glLoadIdentity();
       
       // Alphatest zur Erkennung der Transparenz anhand der Textur
       gl.glEnable(GL.GL_ALPHA_TEST);
       gl.glAlphaFunc(GL.GL_GREATER, 0.1f);
       
       // Blending zur Behebung der weißen Ränder durch Alphatest
       gl.glEnable(GL.GL_BLEND);
       gl.glBlendFunc(GL.GL_ONE, GL.GL_ONE_MINUS_SRC_ALPHA);        
     
       
       gl.glEnable(GL.GL_BLEND);
       gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
       
   // Schiff zeichnen        
       testShip.draw(gl);
       
       // Text zeichnen
       DecimalFormat f = new DecimalFormat("#0.00");
       
       // Text zeichnen
   gl.glRasterPos2f(-1.0f, 0.94f);
   glut.glutBitmapString(GLUT.BITMAP_TIMES_ROMAN_10, "X: " + f.format(testShip.getPosition().x));
   gl.glRasterPos2f(-1.0f, 0.9f);
   glut.glutBitmapString(GLUT.BITMAP_TIMES_ROMAN_10, "Y: " + f.format(testShip.getPosition().y));
   gl.glRasterPos2f(-1.0f, 0.86f);
   glut.glutBitmapString(GLUT.BITMAP_TIMES_ROMAN_10, "Z: " + f.format(testShip.getPosition().z));
   gl.glRasterPos2f(-1.0f, 0.82f);
   glut.glutBitmapString(GLUT.BITMAP_TIMES_ROMAN_10, "Rotation: " + f.format(testShip.getRotation()));

   
   gl.glFlush();
}

Draw Methode:
Code:
public void draw(GL gl){
        // Nur zeichnen wenn erlaubt
        if(allowDrawing){           
            gl.glPushMatrix();
                // Das Objekt auf seine aktuelle Position setzen.
                gl.glTranslated(posVect.x, posVect.y, posVect.z);
               
                // Das Objekt drehen, da bisher nur Vektor gedreht wurde
                gl.glRotated(rotation, 0, 0, 1);
               
                // Texturbind
                gl.glEnable(GL.GL_TEXTURE_2D);
                gl.glBindTexture(GL.GL_TEXTURE_2D, tex.getTexture().texID[0]);
   
             // Objekt zeichnen
                gl.glBegin(GL.GL_QUADS);
                    gl.glTexCoord2d(0,0); gl.glVertex3d(-width/2,-height/2, 0);
                    gl.glTexCoord2d(1,0); gl.glVertex3d(+width/2,-height/2, 0);
                    gl.glTexCoord2d(1,1); gl.glVertex3d(+width/2,+height/2, 0);
                    gl.glTexCoord2d(0,1); gl.glVertex3d(-width/2,+height/2, 0);
                gl.glEnd();
            gl.glPopMatrix();

        }
    }

Wie schaffe ich es nun, dass beides gleichzeitig angezeigt wird?

Vielen Dank im Voraus

Gruß
MrCastle
 
Wie erwartet war die Lösung durchaus simpel...
Die fehlende Codezeile ist fett markiert:

Code:
public void draw(GL gl){
        // Nur zeichnen wenn erlaubt
        if(allowDrawing){           
            gl.glPushMatrix();
                // Das Objekt auf seine aktuelle Position setzen.
                gl.glTranslated(posVect.x, posVect.y, posVect.z);
               
                // Das Objekt drehen, da bisher nur Vektor gedreht wurde
                gl.glRotated(rotation, 0, 0, 1);
               
                // Texturbind
                gl.glEnable(GL.GL_TEXTURE_2D);
                gl.glBindTexture(GL.GL_TEXTURE_2D, tex.getTexture().texID[0]);
   
             // Objekt zeichnen
                gl.glBegin(GL.GL_QUADS);
                    gl.glTexCoord2d(0,0); gl.glVertex3d(-width/2,-height/2, 0);
                    gl.glTexCoord2d(1,0); gl.glVertex3d(+width/2,-height/2, 0);
                    gl.glTexCoord2d(1,1); gl.glVertex3d(+width/2,+height/2, 0);
                    gl.glTexCoord2d(0,1); gl.glVertex3d(-width/2,+height/2, 0);
                gl.glEnd();
                gl.glDisable(GL.GL_TEXTURE_2D);
            gl.glPopMatrix();

        }
    }
 
Zurück