在lwjgl / opengl中的3d场景上绘制2d叠加层

时间:2014-06-15 21:01:27

标签: opengl 3d 2d lwjgl

我试图绘制一个hud,在3d场景的顶部显示应用程序的fps。我知道这个问题的答案与更改初始化代码并将其切换回来有关。你知道,这个东西:

GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 800, 600, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);

这是我需要渲染屏幕的2d部分的代码。在相关的说明中,我很难理解所有这些代码的作用,并且没有找到合适的资源。任何人都可以指出我正确的方向。大多数教程都没有包含设置代码,我认为他们假设人们知道要使用什么(但我不会!)。

1 个答案:

答案 0 :(得分:0)

我正在使用这些方法:

public static void make3D() {

    glPopAttrib();
    glPushAttrib(GL_ENABLE_BIT);

    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);

    glViewport(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    // FOV = Field of View
    // Aspect ration
    // zNear and zFar (Viewing range)
    gluPerspective(FOV,(float) SCREEN_WIDTH / SCREEN_HEIGHT,0.1f,1000f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

}

用于更改为3D视图和

public static void make2D() {

    glPopAttrib();
    glPushAttrib(GL_ENABLE_BIT);

    glViewport(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT,0,-1,1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

}

用于更改为2D视图。

Java似乎没有任何问题,请纠正我,如果我错了!