在LWJGL窗口内使用Slick2D渲染文本?

时间:2013-02-17 08:39:38

标签: java text lwjgl slick2d

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

2 个答案:

答案 0 :(得分:0)

没有简单的方法可以做到这一点,但你可以使用它们。点击此处了解更多信息:How to draw a String to the window with OpenGL?

答案 1 :(得分: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);

这可确保不会发生这种情况:

oh no!

此外,如果启用了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);

    }
}

这会产生:

sweet text

您需要提供一个字体文件。