3D场景上的2D叠加不起作用

时间:2014-05-07 10:40:24

标签: java opengl lwjgl

我正在尝试在3D场景上创建2D叠加层!我已经尝试了所有可以在GameDev和StackOverflow上找到的解决方案,但它们似乎没有用!

我目前的代码:

static void ready3D()
{
    glViewport(0, 0, Display.getWidth(),Display.getHeight());
    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();
    GLU.gluPerspective(45, (float) Display.getWidth()/Display.getHeight(), 0.1f, 5000.0f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glDepthFunc(GL_LEQUAL);
    glEnable(GL_DEPTH_TEST);
}

static void ready2D()
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    GLU.gluOrtho2D(0.0f, Display.getWidth(), Display.getHeight(), 0.0f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0.375f, 0.375f, 0.0f);

    glDisable(GL_DEPTH_TEST);
}

glPushMatrix();
    //Overlay start - This is in my render method BTW.
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    ready2D();

    glBegin(GL_QUADS);
    glColor3f(1, 1, 1);
    glVertex2f(0, 0); // bottom-left
            glVertex2f(0, 1); // top-left
            glVertex2f(1, 1); // top-right
            glVertex2f(1, 0); // bottom-right
    glEnd();

    glPopMatrix();
    ready3D();

然而,我试图绘制的2D盒子不会画画!显然,我最终希望在叠加层上有复杂的对象/图标,但首先要做的事情。

3D世界仍然完全正常。

有人能够告诉我我做错了吗?

1 个答案:

答案 0 :(得分:0)

2D四边形顶点的顺序对我来说有点可疑,如果我正确地读它:左下角,右上角,右下角,左上角,这会产生一种交叉而不是四边形。

试试这个:

glVertex2f(0, 0); // bottom-left
glVertex2f(0, 1); // top-left
glVertex2f(1, 1); // top-right
glVertex2f(1, 0); // bottom-right

请注意顺时针顺序,我相信OpenGL默认为前置四边形。