Рендеринг текста с помощью Slick2D внутри окна LWJGL?

Как мне визуализировать базовую строку с помощью Slick2D внутри окна, созданного с помощью Display.Create() из LWJGL?


person seedasharp    schedule 17.02.2013    source источник


Ответы (2)


Нет простого способа сделать это, но есть библиотеки, которые вы можете использовать для этого. Посмотрите здесь для получения дополнительной информации: Как нарисовать строку для окно с OpenGL?

person FidgetyTheGamer    schedule 19.02.2014

Похоже, вы должны использовать класс UnicodeFont Slick2d.

С помощью 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);

    }
}

Это производит:

приятный текст

Вам нужно будет предоставить файл шрифта.

person codecubed    schedule 28.01.2016