【发布时间】:2013-02-17 08:39:37
【问题描述】:
如何在使用 LWJGL 的 Display.Create() 创建的窗口中使用 Slick2D 呈现基本字符串?
【问题讨论】:
如何在使用 LWJGL 的 Display.Create() 创建的窗口中使用 Slick2D 呈现基本字符串?
【问题讨论】:
没有简单的方法可以做到这一点,但您可以使用一些库。在这里查看更多信息:How to draw a String to the window with OpenGL?
【讨论】:
听起来你应该使用 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);
}
}
这会产生:
您需要提供一个字体文件。
【讨论】: