Как мне визуализировать базовую строку с помощью Slick2D внутри окна, созданного с помощью Display.Create() из LWJGL?
Рендеринг текста с помощью Slick2D внутри окна LWJGL?
Ответы (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