Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 04:34

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Jan 05, 2010 21:50 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jul 22, 2006 00:43
Beiträge: 30
Wohnort: Borland
Hi Community,

ich muss euch nochmal mit Java konfrontieren :o
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 unten zu sehen ist, dann wird ebenfalls nur das Objekt angezeigt.

Display Methode:
Code:
  1. public void display(GLAutoDrawable gLDrawable) {
  2.        // GL-Objekt von der Zeichenfläche holen
  3.        final GL gl = gLDrawable.getGL();
  4.  
  5.        // Zeichenfläche löschen
  6.        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
  7.        gl.glMatrixMode(GL.GL_PROJECTION);
  8.        gl.glLoadIdentity();
  9.        
  10.        // glu.gluOrtho2D(-1.0, 1.0, -1.0 * (float) height / (float) width, 1.0 * (float) height / (float) width);
  11.        glu.gluOrtho2D(0, 0, width, height);
  12.        gl.glMatrixMode(GL.GL_MODELVIEW);
  13.        gl.glLoadIdentity();
  14.        
  15.        // Alphatest zur Erkennung der Transparenz anhand der Textur
  16.        gl.glEnable(GL.GL_ALPHA_TEST);
  17.        gl.glAlphaFunc(GL.GL_GREATER, 0.1f);
  18.        
  19.        // Blending zur Behebung der weißen Ränder durch Alphatest
  20.        gl.glEnable(GL.GL_BLEND);
  21.        gl.glBlendFunc(GL.GL_ONE, GL.GL_ONE_MINUS_SRC_ALPHA);        
  22.      
  23.        
  24.        gl.glEnable(GL.GL_BLEND);
  25.        gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
  26.        
  27.    // Schiff zeichnen        
  28.        testShip.draw(gl);
  29.        
  30.        // Text zeichnen
  31.        DecimalFormat f = new DecimalFormat("#0.00");
  32.        
  33.        // Text zeichnen
  34.    gl.glRasterPos2f(-1.0f, 0.94f);
  35.    glut.glutBitmapString(GLUT.BITMAP_TIMES_ROMAN_10, "X: " + f.format(testShip.getPosition().x));
  36.    gl.glRasterPos2f(-1.0f, 0.9f);
  37.    glut.glutBitmapString(GLUT.BITMAP_TIMES_ROMAN_10, "Y: " + f.format(testShip.getPosition().y));
  38.    gl.glRasterPos2f(-1.0f, 0.86f);
  39.    glut.glutBitmapString(GLUT.BITMAP_TIMES_ROMAN_10, "Z: " + f.format(testShip.getPosition().z));
  40.    gl.glRasterPos2f(-1.0f, 0.82f);
  41.    glut.glutBitmapString(GLUT.BITMAP_TIMES_ROMAN_10, "Rotation: " + f.format(testShip.getRotation()));
  42.  
  43.    
  44.    gl.glFlush();
  45. }


Draw Methode:
Code:
  1. public void draw(GL gl){
  2.         // Nur zeichnen wenn erlaubt
  3.         if(allowDrawing){          
  4.             gl.glPushMatrix();
  5.                 // Das Objekt auf seine aktuelle Position setzen.
  6.                 gl.glTranslated(posVect.x, posVect.y, posVect.z);
  7.                
  8.                 // Das Objekt drehen, da bisher nur Vektor gedreht wurde
  9.                 gl.glRotated(rotation, 0, 0, 1);
  10.                
  11.                 // Texturbind
  12.                 gl.glEnable(GL.GL_TEXTURE_2D);
  13.                 gl.glBindTexture(GL.GL_TEXTURE_2D, tex.getTexture().texID[0]);
  14.    
  15.              // Objekt zeichnen
  16.                 gl.glBegin(GL.GL_QUADS);
  17.                     gl.glTexCoord2d(0,0); gl.glVertex3d(-width/2,-height/2, 0);
  18.                     gl.glTexCoord2d(1,0); gl.glVertex3d(+width/2,-height/2, 0);
  19.                     gl.glTexCoord2d(1,1); gl.glVertex3d(+width/2,+height/2, 0);
  20.                     gl.glTexCoord2d(0,1); gl.glVertex3d(-width/2,+height/2, 0);
  21.                 gl.glEnd();
  22.             gl.glPopMatrix();
  23.  
  24.         }
  25.     }


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

Vielen Dank im Voraus

Gruß
MB


Zuletzt geändert von MB am Mi Jan 06, 2010 01:07, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jan 06, 2010 01:07 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jul 22, 2006 00:43
Beiträge: 30
Wohnort: Borland
OK, als ich das gefühlte 12361847324. Mal über den Code geschaut habe ist mir aufgefallen was gefehlt hat:

Code:
  1.  
  2. public void draw(GL gl){
  3.         // Nur zeichnen wenn erlaubt
  4.         if(allowDrawing){          
  5.             gl.glPushMatrix();
  6.                 // Das Objekt auf seine aktuelle Position setzen.
  7.                 gl.glTranslated(posVect.x, posVect.y, posVect.z);
  8.                
  9.                 // Das Objekt drehen, da bisher nur Vektor gedreht wurde
  10.                 gl.glRotated(rotation, 0, 0, 1);
  11.                
  12.                 // Texturbind
  13.                 gl.glEnable(GL.GL_TEXTURE_2D);
  14.                 gl.glBindTexture(GL.GL_TEXTURE_2D, tex.getTexture().texID[0]);
  15.    
  16.              // Objekt zeichnen
  17.                 gl.glBegin(GL.GL_QUADS);
  18.                     gl.glTexCoord2d(0,0); gl.glVertex3d(-width/2,-height/2, 0);
  19.                     gl.glTexCoord2d(1,0); gl.glVertex3d(+width/2,-height/2, 0);
  20.                     gl.glTexCoord2d(1,1); gl.glVertex3d(+width/2,+height/2, 0);
  21.                     gl.glTexCoord2d(0,1); gl.glVertex3d(-width/2,+height/2, 0);
  22.                 gl.glEnd();
  23.                 gl.glDisable(GL.GL_TEXTURE_2D); // <-----
  24.             gl.glPopMatrix();
  25.  
  26.         }
  27.     }
  28.  


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jan 06, 2010 15:42 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ein Vorschlag um derartige Probleme schneller zu finden:

Setz deine Clear-Color auf einen anderen Farbton. Ich denke, deine Objekte wurden gezeichnet, allerdings schwarz und deshalb hast du sie nicht gesehen. Wenn du einen abstrusen Farbton verwendest, den du im sonstigen Programm nicht verwendest, dann siehst du solche probleme schneller.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jan 06, 2010 17:38 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jul 22, 2006 00:43
Beiträge: 30
Wohnort: Borland
Klingt einleuchtend, danke für den Tipp :)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]