0

如何在使用 LWJGL 的 Display.Create() 创建的窗口中使用 Slick2D 呈现基本字符串?

4

2 回答 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 回答