如何在lwjgl中渲染2D文本?

5
在你因为“没有搜索”而责备我之前,请注意,我已经进行了大量的搜索,并找到了很多答案,但是它们都对我无效。
嗨,我正在制作一个3D Java lwjgl游戏,我试图在屏幕中央渲染一些简单的2D文本,但无论我尝试什么,我从未看到任何文本呈现在任何地方。这是我的Text2D.java类:
package com.gmail.br45entei.base.engine.rendering;

import java.awt.Font;
import java.awt.FontFormatException;
import java.io.IOException;

import org.newdawn.slick.Color;

import org.newdawn.slick.UnicodeFont;

import com.gmail.br45entei.base.engine.core.Vector2f;
import com.gmail.br45entei.base.game.Game;
import com.gmail.br45entei.base.game.MainComponent;
import com.gmail.br45entei.file.FileMgmt;

/**
 * @author Brian_Entei
 *
 */
public class Text3D {

    private Camera camera;

    private UnicodeFont font;
    private Color color;
    private Vector2f position;
    private String text = "New string";
    private int size = 12;

    public int getSize() {
        return this.size;
    }

    public void setSize(int size) {
        this.size = size;
        updateFont();
    }

    private void updateFont() {
        try {
            this.font = new UnicodeFont(Font.createFont(Font.TRUETYPE_FONT, FileMgmt.getFile(MainComponent.resourceFolder, "/fonts/BrianOwenReidBold.ttf", false)), size, false, false);
        } catch (FontFormatException e) {
            FileMgmt.LogException(e, "updateFont()", "Failed to create font from file!", false);
        } catch (IOException e) {
            FileMgmt.LogException(e, "Text3D()", "Failed to load file to create font!", false);
        }
    }

    public Text3D(String text, Camera camera) {
        this.camera = camera;
        this.color = Color.black;
        this.position = new Vector2f(0, 0);
        this.text = text;
        updateFont();
    }

    public void drawHudString() {
        //org.lwjgl.opengl.GL11.glPushMatrix();// This gets called right before here.
        org.lwjgl.opengl.GL11.glRotatef(camera.getForward().getX(), -1.0f, 0.0f, 0.0f);
        org.lwjgl.opengl.GL11.glRotatef(camera.getForward().getY(), 0.0f, -1.0f, 0.0f);
        org.lwjgl.opengl.GL11.glRotatef(camera.getForward().getZ(), 0.0f, 0.0f, -1.0f);
        org.lwjgl.opengl.GL11.glTranslatef(-camera.getPos().getX(), -camera.getPos().getY(), -camera.getPos().getZ() + 20);

        this.font.drawString(this.position.getX(), this.position.getY(), this.text, this.color);
        //org.lwjgl.opengl.GL11.glPopMatrix();// This gets called right after here.
    }

    public void render() {
        Game.print("Text render!");
        org.lwjgl.opengl.GL11.glMatrixMode(org.lwjgl.opengl.GL11.GL_PROJECTION);
        org.lwjgl.opengl.GL11.glPushMatrix();
        org.lwjgl.opengl.GL11.glLoadIdentity();
        org.lwjgl.opengl.GL11.glOrtho(0, 800, 600, 0, 1, -1);
        org.lwjgl.opengl.GL11.glMatrixMode(org.lwjgl.opengl.GL11.GL_MODELVIEW);
        org.lwjgl.opengl.GL11.glDisable(org.lwjgl.opengl.GL11.GL_CULL_FACE);
        org.lwjgl.opengl.GL11.glDisable(org.lwjgl.opengl.GL11.GL_DEPTH_TEST); 
        org.lwjgl.opengl.GL11.glClear(org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT);
        org.lwjgl.opengl.GL11.glLoadIdentity();

        // render font
        this.drawHudString();

        org.lwjgl.opengl.GL11.glEnable(org.lwjgl.opengl.GL11.GL_DEPTH_TEST);
        org.lwjgl.opengl.GL11.glEnable(org.lwjgl.opengl.GL11.GL_CULL_FACE);
        org.lwjgl.opengl.GL11.glMatrixMode(org.lwjgl.opengl.GL11.GL_PROJECTION);
        org.lwjgl.opengl.GL11.glPopMatrix();
        org.lwjgl.opengl.GL11.glMatrixMode(org.lwjgl.opengl.GL11.GL_MODELVIEW);
    }
}

这个类中的渲染函数在我的3D对象渲染完成后被调用。希望有人能帮我解决这个问题!

你没有展示所有的代码。你的字体图集纹理在哪里? - Michael IV
好吧,我想这是我的问题,因为我不知道那是什么。你能解释一下那会做什么吗? - Brian_Entei
试一下这个:http://lwjgl.org/wiki/index.php?title=Slick-Util_Library_-_Part_3_-_TrueType_Fonts_for_LWJGL。之前我用过,效果不错。 - Himesh Sameera
1
新的链接网站结构已经改变。如文档所示,此方法已被弃用。 - Himesh Sameera
2个回答

9

您已经将上面的答案选为解决方案,但是您说它不起作用。解决方法是按照您的设置将其缩小0.01f或类似比例。要进行缩放,请使用glScale(x,y,z)。同时,您还需要像这样启用混合:

glEnable(GL11.GL_BLEND);
glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

你还需要像这样启用混合: - HenrikD
启用(GL11.GL_BLEND); 混合函数(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - HenrikD
我最终能够明白我需要做你发布的内容。谢谢! - Brian_Entei

6

我创建了一个渲染文本的文本类,使用LWJGL写成。只需要调用drawString("text", positionX, positionY, scale, width);就可以了。

package text;

import org.lwjgl.opengl.GL11;

public class Text {

 public static void drawString(String s, float x, float y, float scale, float width) {
      float startX = x;
      scale = scale * 0.25f;
      GL11.glLineWidth(width);
      GL11.glBegin(GL11.GL_LINES);
      GL11.glEnable(GL11.GL_LINE_WIDTH);
      GL11.glColor3f(1, 1, 1);
      boolean space = false;
      int charNum = 1, spaceNum = 0;
      for (char c : s.toLowerCase().toCharArray()) {
          switch(c){
          case ' ':
              space = true;
              break;
          case '\n':
              y -= 2;
              startX -= charNum * (scale * 5);
              startX -= spaceNum * (scale * 3);
              spaceNum = 0;
              charNum = 0;
              break;
          case 'a':
            GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
            GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + -1));
            GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + -1));
            GL11.glVertex2f(scale * startX, scale * (y + -1));
            GL11.glVertex2f(scale * startX, scale * (y + -1));
            GL11.glVertex2f(scale * startX, scale * y);
            GL11.glVertex2f(scale * startX, scale * y);
            GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
            GL11.glVertex2f(scale * startX, scale * y);
            GL11.glVertex2f(scale * startX, scale * (y + 0.5f));
            GL11.glVertex2f(scale * startX, scale * (y + 0.5f));
            GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.5f));
              break;
          case 'b':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              break;
          case 'd':
              GL11.glVertex2f(scale * startX, scale * (y - 1));
              GL11.glVertex2f(scale * startX, scale * (y + 0.8f));
          case 'c':
              GL11.glVertex2f(scale * startX, scale * y);
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * startX, scale * (y - 1));
              break;
          case 'e':
              GL11.glVertex2f(scale * startX, scale * y);
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * startX, scale * y);
              GL11.glVertex2f(scale * startX, scale * (y - 0.5f));
              GL11.glVertex2f(scale * startX, scale * (y - 0.5f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 0.5f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 0.5f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 0.5f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              break;
          case 'f':
              GL11.glVertex2f(scale * (startX + 0.25f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.25f));
              GL11.glVertex2f(scale * (startX), scale * (y + 0.25f));
              break;
          case 'g':
              GL11.glVertex2f(scale * (startX), scale * y);
              GL11.glVertex2f(scale * (startX), scale * (y - 1.5f));
              GL11.glVertex2f(scale * (startX), scale * (y - 1.5f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1.5f));
              GL11.glVertex2f(scale * (startX), scale * y);
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1f));
              break;
          case 'h':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              break;
          case 'i':
              GL11.glVertex2f(scale * (startX - 0.25f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y - 1));
              GL11.glEnd();
              GL11.glPointSize(width);
              GL11.glBegin(GL11.GL_POINTS);
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y + 0.25f));
              GL11.glEnd();
              GL11.glBegin(GL11.GL_LINES);
              break;
          case 'j':
              GL11.glVertex2f(scale * (startX - 0.25f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y - 1.5f));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y - 1.5f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1.5f));
              GL11.glEnd();
              GL11.glPointSize(width);
              GL11.glBegin(GL11.GL_POINTS);
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y + 0.25f));
              GL11.glEnd();
              GL11.glBegin(GL11.GL_LINES);
              break;
          case 'k':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y + 0.25f));
              break;
          case 't':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.15f));
              GL11.glVertex2f(scale * (startX), scale * (y + 0.15f));
          case 'l':
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y - 1));
              break;
          case 'm':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.25f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.25f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * y);
              GL11.glVertex2f(scale * (startX), scale * y);
              GL11.glVertex2f(scale * (startX), scale * y);
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              break;
          case 'p':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1.5f));
          case 'o':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
          case 'n':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * (startX), scale * y);
              GL11.glVertex2f(scale * (startX), scale * y);
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              break;
          case 'q':
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1.5f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * (startX), scale * y);
              GL11.glVertex2f(scale * (startX), scale * y);
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              break;
          case 'r':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 0.15f));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y - 0.1f));
              break;
          case 's':
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 0.5f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 0.5f));
              GL11.glVertex2f(scale * (startX), scale * (y - 0.5f));
              GL11.glVertex2f(scale * (startX), scale * (y - 0.5f));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              break;
          case 'u':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * y);
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * y);
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              break;
          case 'w':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.125f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.125f), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX + 0.125f), scale * (y));
              break;
          case 'v':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y));
              break;
          case 'x':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              break;
          case 'y':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.33f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1.5f));
              break;
          case 'z':
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              break;
          case '1':
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.25f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              break;
          case '2':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.65f));
              GL11.glVertex2f(scale * (startX - 0.3f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.3f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.15f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.15f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.35f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              break;
          case '3':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              break;
          case '4':
              GL11.glVertex2f(scale * startX, scale * (y + 0.8f));
              GL11.glVertex2f(scale * startX, scale * (y - 1));
              GL11.glVertex2f(scale * startX, scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y));
              break;
          case '8':
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y + 0.8f));
          case '6':
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
          case '5':
              GL11.glVertex2f(scale * (startX), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              break;
          case '7':
              GL11.glVertex2f(scale * (startX), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX), scale * (y + 0.8f));
              break;
          case '9':
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              break;
          case '0':
              GL11.glVertex2f(scale * (startX), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y - 1));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX - 0.5f), scale * (y + 0.8f));
              GL11.glVertex2f(scale * (startX), scale * (y + 0.8f));
              break;
          }
          if(!space){
              startX += scale * 5;
              charNum++;
          }else{
              startX += scale * 3;
              spaceNum++;
          }
          space = false;
      }
      GL11.glEnd();
      GL11.glDisable(GL11.GL_LINE_WIDTH);
   }

}

9
-1,永远不要使用立即模式,它会影响性能,使代码冗长,自 OpenGL 2.0 起已被弃用,在 GL 3.0 Forward Compatible 中删除,并且自2016年以来是极差的实践方法。 - ElementW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接