如何在使用 LWJGL 的 Display.Create() 创建的窗口中使用 Slick2D 呈现基本字符串?
问问题
571 次
2 回答
0
没有简单的方法可以做到这一点,但是您可以使用一些库。在这里查看更多信息:如何使用 OpenGL 将字符串绘制到窗口?
于 2014-02-19T16:01:34.623 回答
0
听起来您应该使用 Slick2d 的UnicodeFont
课程。
使用UnicodeFont
,您可以轻松地将不同颜色的文本绘制到屏幕上。
初始化:
UnicodeFont uf = null;
try {
uf = new UnicodeFont("path/to/font", <size>, <bold>, <italic>);
uf.getEffects().add(new ColorEffect(java.awt.Color.white)); // set the default color to white
uf.addAsciiGlyphs();
uf.loadGlyphs(); // load glyphs from font file
} catch (SlickException exception) {
exception.printStackTrace();
}
要将文本绘制到屏幕上:
uf.drawString(<x>, <y>, <text>);
请务必将此代码添加到您的 OpenGL 初始化中:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
这确保不会发生这种情况:
GL_DEPTH_TEST
此外,如果启用,也会发生类似的问题。GL_DEPTH_TEST
要解决此问题,请在将文本绘制到屏幕时禁用。
完整的字体绘图程序:
import static org.lwjgl.opengl.GL11.*;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.UnicodeFont;
import org.newdawn.slick.font.effects.ColorEffect;
public class TextDrawing {
static UnicodeFont uf = null;
public static void initGL() {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 640, 480, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
@SuppressWarnings("unchecked")
public static void initFont(int size, boolean bold, boolean italic) {
try {
uf = new UnicodeFont("path/to/font.ttf", size, bold, italic);
uf.addAsciiGlyphs();
uf.getEffects().add(new ColorEffect(java.awt.Color.white));
uf.loadGlyphs();
} catch (SlickException e) {
}
}
public static void main(String[] args) {
try {
Display.setDisplayMode(new DisplayMode(640, 480));
Display.setTitle("Text Drawing!");
Display.setResizable(false);
Display.create();
} catch (LWJGLException e) {
}
initGL();
initFont(100, false, false);
while (!Display.isCloseRequested()) {
glClear(GL_COLOR_BUFFER_BIT);
uf.drawString(10, 10, "Sweet Text");
Display.update();
Display.sync(60);
}
System.exit(0);
}
}
这会产生:
您将需要提供一个字体文件。
于 2016-01-28T23:50:45.050 回答