0

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);
}

最初の方法は、文字をレンダリングすることです。私がやろうとしているのは、setOrthoOn スイッチを 2D レンダリングに呼び出してから、クワッドをレンダリングしてから setOrthoOff を呼び出して 3D に戻すことです。

このコードは、実行しても何もしません..何が間違っていますか?

4

1 に答える 1

0

これでうまくいくはずです。

注: 一部のコードは無関係である可能性があります。私は OpenGL の経験があまりありませんが、これはうまくいきました。GL11 を静的にインポートすることもお勧めします。そうすれば、「GL11.BlaBlaBla」と入力する必要がなくなり、「BlaBlaBla」と入力するだけで済みます。

于 2013-04-20T20:45:15.740 に答える