【问题标题】:Rendering text with Slick2D inside a LWJGL window?在 LWJGL 窗口中使用 Slick2D 渲染文本?
【发布时间】:2013-02-17 08:39:37
【问题描述】:

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

【问题讨论】:

    标签: java text lwjgl slick2d


    【解决方案1】:

    没有简单的方法可以做到这一点,但您可以使用一些库。在这里查看更多信息:How to draw a String to the window with OpenGL?

    【讨论】:

      【解决方案2】:

      听起来你应该使用 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);
      
          }
      }
      

      这会产生:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-12
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 2015-09-15
        • 1970-01-01
        • 2014-03-24
        • 2013-10-23
        相关资源
        最近更新 更多