Java LWJGL-从3D切换到2D以在没有外部库的情况下渲染文本

Java LWJGL-从3D切换到2D以在没有外部库的情况下渲染文本,java,text,fonts,3d,lwjgl,Java,Text,Fonts,3d,Lwjgl,我想通过切换到2D场景,然后切换回3D,在屏幕上渲染2D四边形。 除了LWJGL,我不想使用任何外部图书馆 到目前为止,我得到的是: private static void renderLetter(char c, float x, float y) { int character = c+1; GL11.glPushMatrix(); setOrthoOn(); GL11.glTranslatef(x, y, 0); float[] xy = ga

我想通过切换到2D场景,然后切换回3D,在屏幕上渲染2D四边形。 除了LWJGL,我不想使用任何外部图书馆

到目前为止,我得到的是:

private static void renderLetter(char c, float x, float y) {
    int character = c+1;
    GL11.glPushMatrix();

    setOrthoOn();

    GL11.glTranslatef(x, y, 0);

    float[] xy = game.getResourceManager().getSpriteSheets().get(fontSheet).getXYForCell(character);
    float cellx = game.getResourceManager().getSpriteSheets().get(fontSheet).getCell_sizeX();
    float celly = game.getResourceManager().getSpriteSheets().get(fontSheet).getCell_sizeY();
    float xx = xy[0];
    float yy = xy[1];

    GL11.glBindTexture(GL11.GL_TEXTURE_2D, game.getResourceManager().getTextures().get(game.getResourceManager().getSpriteSheets().get(fontSheet).getTextureID()));
    GL11.glBegin(GL11.GL_QUADS);
        GL11.glTexCoord2f(xx, yy);
        GL11.glVertex2f(0,0);
        GL11.glTexCoord2f(xx+cellx, yy);
        GL11.glVertex2f(fontSize,0);
        GL11.glTexCoord2f(xx+cellx, yy+celly);
        GL11.glVertex2f(fontSize,fontSize);
        GL11.glTexCoord2f(xx, yy+celly);
        GL11.glVertex2f(0,fontSize);
    GL11.glEnd();
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);      

    setOrthoOff();

    GL11.glPopMatrix();
}

public static void setOrthoOn()
{
    GL11.glDisable(GL11.GL_LIGHTING);
    GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);                
    GL11.glClearDepth(1);
    GL11.glViewport(0,0,1360,768);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);
    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(0, 1360, 768, 0, 1, -1);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);
    GL11.glLoadIdentity();
}

public static void setOrthoOff()
{
    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GLU.gluPerspective(game.getFieldOfView(), 1360f/768f, 0.1f, 1000);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);
    GL11.glLoadIdentity();
    GL11.glEnable(GL11.GL_DEPTH_TEST);
    GL11.glDepthFunc(GL11.GL_LEQUAL);
    GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
}
第一种方法是渲染字母。我试图做的是调用SetOrthon切换到2D渲染,然后渲染四边形,然后调用setOrthoOff切换回3D

当我运行此代码时,它对我没有任何帮助。。我做错了什么?


注意:有些代码可能是无关的。我对OpenGL不是很有经验,但这对我很有用。我还建议您静态导入GL11。这样你就不必键入“GL11.BlaBlaBla”,只需键入“BlaBlaBla”即可。

它不起作用。。我已经将我的方法内部转换为你给我的方法,但它不起作用。。我试着不绑定纹理,只是给四元体一个颜色,看看它是否至少渲染了四元体,但它没有…你可能需要添加
glDisable(GL_照明)到那个开头。另外,如果窗口大小不是800x600,请将代码中的800和600更改为窗口大小。尝试禁用纹理
glDisable(GL\u TEXTURE\u 2D)那我就不知道了。我的代码对我有用,所以你在程序的早期做了一些不同的事情,但我不知道该告诉你什么。如果你想编写游戏,我建议你从零开始使用。只需向下滚动,直到找到“jogl-2.0………zip”,然后下载适用于您的操作系统的。我发现从地面开始建造发动机要比使用预制发动机容易得多。不过那只是我。