Wie das Rendern von 2D-text in lwjgl?
Before you go off on me for "not searching", I've searched around a LOT and found a lot of answers, but none of them worked for me.
Hallo, ich bin so ein 3D-java-lwjgl Spiel, und ich versuche, machen einige einfache 2D-text auf meinem Bildschirm in der Mitte, aber egal was ich versuche, ich nie sehen keine text gerendert auf meinem Bildschirm überall. Hier ist meine Text2D.java Klasse:
package com.gmail.br45entei.base.engine.rendering;
import java.awt.Font;
import java.awt.FontFormatException;
import java.io.IOException;
import org.newdawn.slick.Color;
import org.newdawn.slick.UnicodeFont;
import com.gmail.br45entei.base.engine.core.Vector2f;
import com.gmail.br45entei.base.game.Game;
import com.gmail.br45entei.base.game.MainComponent;
import com.gmail.br45entei.file.FileMgmt;
/**
* @author Brian_Entei
*
*/
public class Text3D {
private Camera camera;
private UnicodeFont font;
private Color color;
private Vector2f position;
private String text = "New string";
private int size = 12;
public int getSize() {
return this.size;
}
public void setSize(int size) {
this.size = size;
updateFont();
}
private void updateFont() {
try {
this.font = new UnicodeFont(Font.createFont(Font.TRUETYPE_FONT, FileMgmt.getFile(MainComponent.resourceFolder, "/fonts/BrianOwenReidBold.ttf", false)), size, false, false);
} catch (FontFormatException e) {
FileMgmt.LogException(e, "updateFont()", "Failed to create font from file!", false);
} catch (IOException e) {
FileMgmt.LogException(e, "Text3D()", "Failed to load file to create font!", false);
}
}
public Text3D(String text, Camera camera) {
this.camera = camera;
this.color = Color.black;
this.position = new Vector2f(0, 0);
this.text = text;
updateFont();
}
public void drawHudString() {
//org.lwjgl.opengl.GL11.glPushMatrix();//This gets called right before here.
org.lwjgl.opengl.GL11.glRotatef(camera.getForward().getX(), -1.0f, 0.0f, 0.0f);
org.lwjgl.opengl.GL11.glRotatef(camera.getForward().getY(), 0.0f, -1.0f, 0.0f);
org.lwjgl.opengl.GL11.glRotatef(camera.getForward().getZ(), 0.0f, 0.0f, -1.0f);
org.lwjgl.opengl.GL11.glTranslatef(-camera.getPos().getX(), -camera.getPos().getY(), -camera.getPos().getZ() + 20);
this.font.drawString(this.position.getX(), this.position.getY(), this.text, this.color);
//org.lwjgl.opengl.GL11.glPopMatrix();//This gets called right after here.
}
public void render() {
Game.print("Text render!");
org.lwjgl.opengl.GL11.glMatrixMode(org.lwjgl.opengl.GL11.GL_PROJECTION);
org.lwjgl.opengl.GL11.glPushMatrix();
org.lwjgl.opengl.GL11.glLoadIdentity();
org.lwjgl.opengl.GL11.glOrtho(0, 800, 600, 0, 1, -1);
org.lwjgl.opengl.GL11.glMatrixMode(org.lwjgl.opengl.GL11.GL_MODELVIEW);
org.lwjgl.opengl.GL11.glDisable(org.lwjgl.opengl.GL11.GL_CULL_FACE);
org.lwjgl.opengl.GL11.glDisable(org.lwjgl.opengl.GL11.GL_DEPTH_TEST);
org.lwjgl.opengl.GL11.glClear(org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT);
org.lwjgl.opengl.GL11.glLoadIdentity();
//render font
this.drawHudString();
org.lwjgl.opengl.GL11.glEnable(org.lwjgl.opengl.GL11.GL_DEPTH_TEST);
org.lwjgl.opengl.GL11.glEnable(org.lwjgl.opengl.GL11.GL_CULL_FACE);
org.lwjgl.opengl.GL11.glMatrixMode(org.lwjgl.opengl.GL11.GL_PROJECTION);
org.lwjgl.opengl.GL11.glPopMatrix();
org.lwjgl.opengl.GL11.glMatrixMode(org.lwjgl.opengl.GL11.GL_MODELVIEW);
}
}
Die render-Funktion in dieser Klasse wird aufgerufen, nachdem meine 3D-Objekte gerendert werden. Ich hoffe, jemand kann mir helfen, mit dieser!
- Sie zeigen nicht, hier der gesamte code.Wo ist die Schrift atlas textur?
- Naja, ich denke das ist mein problem, bedenkt, dass ich nicht wissen, was das ist. Könnten Sie erklären, was Sie tun?
- Versuchen Sie dieser aus. Es hat sich für mich vor einiger Zeit.
- Die neue link Sie haben sich verändert die Struktur der Webseite. Und so veraltet ist, wie gezeigt, in der Dokumentation.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie bereits ausgewählt, die obige Antwort als Lösung, aber Sie sagte, es funktioniert nicht. Die Lösung ist die Skalierung von 0,01 f oder so etwas wie, dass abhängig von Ihrem setup. Skalieren verwenden Sie einfach glScale(x,y,z).
Auch Sie habe zu aktivieren Blending, wie diese: