LWJGL - 2D Text über 3D Hintergrund

tdc

Bekanntes Mitglied
Hi,

ich versuche zurzeit einen Timer in mein Spiel einzubauen. Die bisher benötigte Zeit in Sekunden soll mithilfe einer Font auf dem Bildschirm ausgegeben werden. Ich lasse bereits in der Mitte des Bildschirms mithilfe von OpenGL ein kleines Fadenkreuz zeichnen. Das funktioniert auch einwandtfrei, aber sobald ich den String mit der Font auf dem Bildschirm ausgeben lasse, fängt zumindest der 3D-Teil an, stark zu flackern.

Mein Code sieht bisher folgendermaßen aus:
Java:
...
	
	UnicodeFont timerfont;
	
	...
	
	public void initGame()
	{
		...
		timerfont = loadFont(25f); //selbstgeschriebene Methode... daran sollte es nicht liegen
		...
	}
	
	public void drawTimer()
	{
		timerfont.drawString(Display.getDisplayMode().getWidth()-80, 10, time+"", Color.white);
	}
	
	public void initOpenGL()
	{
		glEnable(GL_TEXTURE_2D); // Enable Texture Mapping
		
        glShadeModel(GL_SMOOTH); // Enable Smooth Shading
        glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Black Background
        glClearDepth(1.0f); // Depth Buffer Setup
        glEnable(GL_DEPTH_TEST); // Enables Depth Testing
        glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do

        glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
        glLoadIdentity(); // Reset The Projection Matrix

        // Calculate The Aspect Ratio Of The Window
        GLU.gluPerspective(
                45.0f,
                (float) Display.getDisplayMode().getWidth() / (float) Display.getDisplayMode().getHeight(),
                0.1f,
                100.0f);
        glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix

        // Really Nice Perspective Calculations
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
	}
	
	public void drawOpenGL()
	{
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);          // Clear The Screen And The Depth Buffer  
		
		//3D
        if(objects != null)
        {
        	for(GameObject obj:objects)
        	{
			//Objekte werden gezeichnet
        		obj.initDraw();
        		obj.drawOpenGL();
        		obj.endDraw();
        	}
        }
        
        glMatrixMode(GL_PROJECTION);
        glPushMatrix();
        glLoadIdentity();
        glOrtho(0,getWidth(),0,getHeight(),-1,1);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();

        //2D
        drawInterface();              //zeichnet nur dieses "Fadenkreuz" OpenGL-2D-Zeichnungen funktionieren also
        //drawTimer();                <=== sobald // entfernt wird, flackert es
        
        glMatrixMode(GL_PROJECTION);
        glPopMatrix();
        glMatrixMode(GL_MODELVIEW);
	}
	
	public void drawInterface()
	{
		glColor3f(0.3f, 0.3f, 0.3f);
        glBegin(GL_LINES);
       		glVertex2f(getWidth()/2-12, getHeight()/2);
       		glVertex2f(getWidth()/2+12, getHeight()/2);
        glEnd();
        glBegin(GL_LINES);
   			glVertex2f(getWidth()/2, getHeight()/2-12);
   			glVertex2f(getWidth()/2, getHeight()/2+12);
   		glEnd();
	}
	
	...

Die wichtigste Methode ist wohl drawOpenGL():
Java:
public void drawOpenGL()
	{
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);          // Clear The Screen And The Depth Buffer  
		
		//3D
        if(objects != null)
        {
        	for(GameObject obj:objects)
        	{
        		obj.initDraw();
        		obj.drawOpenGL();
        		obj.endDraw();
        	}
        }
        
        glMatrixMode(GL_PROJECTION);
        glPushMatrix();
        glLoadIdentity();
        glOrtho(0,getWidth(),0,getHeight(),-1,1);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();

        //2D
        drawInterface();
        //drawTimer();
        
        glMatrixMode(GL_PROJECTION);
        glPopMatrix();
        glMatrixMode(GL_MODELVIEW);
	}

So funktioniert es, aber sobald ich die // vor "drawTimer()" entferne, fängt es an zu flackern.

Zum laden der Font verwende ich Slick. Slick ist ja eigentlich eine 2D-Library, aber ich zeichne die Font ja über die 3D-Szene, also sollte das ja kein Problem sein... oder? Und wenn es an Slick liegt, was könnte ich alternativ machen?


Ich hoffe ihr könnt mir weiterhelfen,
mfg tdc
 

tdc

Bekanntes Mitglied
Wie ich den Timer zeichne sieht man doch:
Java:
timerfont.drawString(Display.getDisplayMode().getWidth()-80, 10, time+"", Color.white);
Und das ist doch genau so, wie auf der Seite, von der du mir den Link geschickt hast.

Auch das Laden der Font mache ich mit Slick genau so, wie in dem Link (daher hab ich das ja) und in meinem Menü funktioniert es bereits. Nur das zeichnen über die 3D-Szene klappt noch nicht.

Aber in den Ortho-Modus wechsele ich doch (erster Codeblock Zeile 63):
Java:
glOrtho(0,getWidth(),0,getHeight(),-1,1);

Oder verstehe ich da etwas falsch?
 
Zuletzt bearbeitet:

TimoH.

Mitglied
Es könnte eventuell das selbe Problem sein das ich hatte (war bei mir zwar in einer reinen 2D Umgebung): Versuche mal bevor du den Timer-String zeichnest die letzte Textur zu lösen (unbind).
Java:
        org.newdawn.slick.opengl.TextureImpl.bindNone();
        font.drawString(x, y, text,c);
verwende ich dafür. Vlt. funktioniert es ja.
 

tdc

Bekanntes Mitglied
Das funktioniert leider auch nicht... ich benutze bisher auch noch gar keine Texturen in meiner 3D-Umgebung, sondern nur farbige Formen/Körper.
 

Evil-Devil

Top Contributor
Wenn du keine Texturen nutzt, wie stellst du dann den Timer dar?

Hast du sonst vllt. eine binär Version zum ausprobieren? Vielleicht zuckelt das nur auf deinem Rechner.
 

tdc

Bekanntes Mitglied
Also den Timer mache ich über UnicodeFont von Slick... (ja, ok, da wird es vllt. mit einer Textur gemacht, aber ich benutze bisher keine eigenen Texturen)

Eine ausführbare *.jar habe ich zurzeit nicht, aber ich kann versuchen in den nächsten Tagen mal eine Version hochzuladen (hab jetzt leider keine Zeit).

An meinem PC sollte es eigentlich nicht liegen, wenn dann könnte es noch irgendwie an Ubuntu liegen aber Hardwaretechnisch habe ich einen recht aktuellen PC. ;)

Im Anhang aber mal 2 Screenshots. Das erste ist ein Screenshot ohne der Methode "drawTimer()" und das zweite mit dieser Methode.

Edit: Der Timer ist irgendwie auch falsch herum und sollte oben rechts sein... stimmt vllt. was mit meiner glOrtho() nicht?
 

Anhänge

  • GameBild1.png
    GameBild1.png
    16,6 KB · Aufrufe: 71
  • GameBild2.png
    GameBild2.png
    48 KB · Aufrufe: 55
Zuletzt bearbeitet:

tdc

Bekanntes Mitglied
Problem gelöst! :D

Java:
public void drawTimer()
	{
		timerfont.drawString(Display.getDisplayMode().getWidth()-80, 10, time+"", Color.white);
		TextureImpl.bindNone();
	}

Mit TextureImpl.bindNone(); funktioniert es plötzlich. Obwohl ich gar keine Texturen verwende lag es wohl daran.

Edit: Oh, ich sehe gerade, dass es ungefähr das ist, was Timo H. vorgeschlagen hat... nur irgendwie muss es danach und nicht davor stehen.
(Mist, mit ein wenig herumprobieren hätte ich mir einiges an Zeit sparen können...)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
coolian slick lwjgl text darstellen mit UnicodeFont funktoniert nicht? Spiele- und Multimedia-Programmierung 11
M LWJGL Text rendern Spiele- und Multimedia-Programmierung 3
Z Anfängerfrage: Text anzeigen mit LWJGL Spiele- und Multimedia-Programmierung 2
A LWJGL/OpenGL und Text Spiele- und Multimedia-Programmierung 8
T LWJGL und Text Spiele- und Multimedia-Programmierung 5
coolian lwjgl glfw window zeigt nur grau an Spiele- und Multimedia-Programmierung 0
F OpenGL (LWJGL) Shader Programmierung GLSL Spiele- und Multimedia-Programmierung 2
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
V LWJGL GUI Spiele- und Multimedia-Programmierung 1
V GUI in LWJGL 2 erstellen Spiele- und Multimedia-Programmierung 6
C GLSL Shaderprogrammierung in LWJGL 3 Spiele- und Multimedia-Programmierung 12
G Low Poly 3D LWJGL Shader Problem Spiele- und Multimedia-Programmierung 4
B LWJGL OpenGL SIGSEGV auf Linux (Verzweiflung :/) Spiele- und Multimedia-Programmierung 8
G LWJGL .obj .mtl loader Spiele- und Multimedia-Programmierung 3
G 2D animationen LWJGL Spiele- und Multimedia-Programmierung 0
pcfreak9000 "Allgemeine" Performance verbessern (LWJGL 2) Spiele- und Multimedia-Programmierung 2
G LWJGL Rendert nicht Spiele- und Multimedia-Programmierung 3
G lwjgl verwendung Spiele- und Multimedia-Programmierung 6
R [LWJGL] Skeletal Animation Spiele- und Multimedia-Programmierung 5
E LWJGL glGenVertexArrays() erzeugt doppelte IDs Spiele- und Multimedia-Programmierung 3
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
K No Lwjgl Spiele- und Multimedia-Programmierung 2
T LWJGL 2.9.2: Seltsamer Effekt beim Rendern (VertexShader Problem?) Spiele- und Multimedia-Programmierung 3
T LWJGL: Terrain-Texturen / 2D-Array in Shader? Spiele- und Multimedia-Programmierung 2
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
P java lwjgl Game Spiele- und Multimedia-Programmierung 0
T [LWJGL] Textur / File wieder freigeben Spiele- und Multimedia-Programmierung 4
F [LWJGL] Skeletal Animation 3D Spiele- und Multimedia-Programmierung 1
C Generelle Hilfe zur lwjgl Spiele- und Multimedia-Programmierung 0
D LWJGL gluLookAt "Umschauen" Problem Spiele- und Multimedia-Programmierung 0
D Problem mit Würfelanimierung in LWJGL Spiele- und Multimedia-Programmierung 7
RalleYTN LWJGL Vignette Spiele- und Multimedia-Programmierung 2
E LWJGL Switchen zwischen gluOrtho und gluPerspective Spiele- und Multimedia-Programmierung 0
RalleYTN LWJGL Rotation Spiele- und Multimedia-Programmierung 1
C LWJGL Color Picking Textures deaktivieren Spiele- und Multimedia-Programmierung 0
K FBO Framebuffer object [LWJGL] 2D tutorial gesucht Spiele- und Multimedia-Programmierung 2
K [LWJGL] 2D Tunneler Hintergrund Spiele- und Multimedia-Programmierung 7
S LWJGL 3d-spieleentwicklung Spiele- und Multimedia-Programmierung 3
H LWJGL-Renderfail Spiele- und Multimedia-Programmierung 1
Seikuassi LWJGL - Texturen flackern Spiele- und Multimedia-Programmierung 2
Androbin LWJGL - Kollisions-Bug (Fallen) Spiele- und Multimedia-Programmierung 14
K Schiessen in 2D (LWJGL) Spiele- und Multimedia-Programmierung 2
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
U Kann nur ein Objekt mit LWJGL rendern Spiele- und Multimedia-Programmierung 2
X LWJGL | Parent.isDisplayable() must be true | wie kann man das zu true machen? Spiele- und Multimedia-Programmierung 0
X [LWJGL] Binden von Texturen per PNG File und Texture Sheet Spiele- und Multimedia-Programmierung 1
X LWJGL - Anklick baren Button erstellen aber wie? Spiele- und Multimedia-Programmierung 6
U Quadrate anklicken LWJGL Spiele- und Multimedia-Programmierung 3
B LWJGL / OPENGL Kriege Depth-Test nicht hin :( Spiele- und Multimedia-Programmierung 0
B LWJGL Manche Seiten werden transparent angezeigt Spiele- und Multimedia-Programmierung 2
T LWJGL VBO's funktionieren nicht, geben aber auch keinen Fehler Spiele- und Multimedia-Programmierung 0
U Komische fragmente bei LWJGL Spiele- und Multimedia-Programmierung 6
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
Q LWJGL - Alpha-Probleme Spiele- und Multimedia-Programmierung 2
S [LWJGL] Zweimal selbe Textur trotz unterschiedlicher IDs Spiele- und Multimedia-Programmierung 3
O LWJGL AWTGLCanvas Tiefe auf 1 beschränkt Spiele- und Multimedia-Programmierung 5
Seikuassi LWJGL-Problem Spiele- und Multimedia-Programmierung 2
S [LWJGL] schwarzer Bildschrim beim rendern von .obj Model Spiele- und Multimedia-Programmierung 2
S [lwjgl] Renderbug bei mehreren Objekten Spiele- und Multimedia-Programmierung 2
R LWJGL: OpenGL Fehler - weitere Informationen auslesen möglich? Spiele- und Multimedia-Programmierung 2
S LWJGL Kamera Koordinaten invertiert. Spiele- und Multimedia-Programmierung 2
B LWJGL Mauskoordinaten Spiele- und Multimedia-Programmierung 1
J LWJGL Update Schleife (Snake) Spiele- und Multimedia-Programmierung 6
B LWJGL Display.update() ist langsam Spiele- und Multimedia-Programmierung 5
R LWJGL: Performance glBegin, drawList, ... Spiele- und Multimedia-Programmierung 16
R LWJGL: Object Loader -> .obj, .c4d, ... laden Spiele- und Multimedia-Programmierung 3
R LWJGL: Textur -> unsichtbare Stellen, wie erzeugen? Spiele- und Multimedia-Programmierung 4
A LwJGL - Animation Stockt Spiele- und Multimedia-Programmierung 5
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
R LWJGL: 3D Picking Spiele- und Multimedia-Programmierung 4
F LWJGL: Textur ändern mit GL11.readPixels Spiele- und Multimedia-Programmierung 5
F LWJGL: Licht und GL_LINES funktioniert nicht Spiele- und Multimedia-Programmierung 6
A [LWJGL] BMP Textur wird nicht richtig dargestellt Spiele- und Multimedia-Programmierung 8
S LWJGL Rechteck wird nicht gezeichnet Spiele- und Multimedia-Programmierung 6
F LWJGL: Is undefined? Spiele- und Multimedia-Programmierung 7
F LWJGL Kamerabug Spiele- und Multimedia-Programmierung 2
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
F LWJGL Dreidimensionaler Würfel Spiele- und Multimedia-Programmierung 15
P LWJGL oder OpenGL (C++) Spiele- und Multimedia-Programmierung 7
P "Tiefe" in Objekten - LWJGL Spiele- und Multimedia-Programmierung 12
T LWJGL 3D Objekt Collision: Wie? Spiele- und Multimedia-Programmierung 11
S LWJGL Kamera Frage Spiele- und Multimedia-Programmierung 2
V Komischer Fehler in LWJGL Spiele- und Multimedia-Programmierung 18
Z lwjgl oder jogl nutzen Spiele- und Multimedia-Programmierung 9
Y LWJGL Hintergrund Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Textur wird falsch angezeigt Spiele- und Multimedia-Programmierung 12
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
Creylon [LWJGL] 2D Sprite Rotieren/Drehen Spiele- und Multimedia-Programmierung 6
CookieSoft LWJGL Ubuntu 12.04 Fehler Spiele- und Multimedia-Programmierung 7
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
F lwjgl - Skysphere Spiele- und Multimedia-Programmierung 3
CookieSoft Slick und LWJGL Texture lag Spiele- und Multimedia-Programmierung 13
U OpenGl 1.1 (LWJGL GL11.*) und weiter? Spiele- und Multimedia-Programmierung 7
0 Grafikfehler LWJGL Spiele- und Multimedia-Programmierung 2
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
Luk10 (LWJGL) Aufwendiges Animieren von Texturen Spiele- und Multimedia-Programmierung 16
S (LWJGL) VertexBufferObjects Spiele- und Multimedia-Programmierung 20
T LWJGL Grafik meines Projektes läuft nicht korrekt auf meinem iMac Spiele- und Multimedia-Programmierung 19
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6

Ähnliche Java Themen

Neue Themen


Oben