OpenGL不会画,为什么?

时间:2012-05-28 10:04:50

标签: opengl textures draw lwjgl

我是OpenGL的新手,所以我尝试绘制纹理2D矩形。我不知道为什么,但这不起作用:

    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glViewport(0, 0, frameWidth, frameHeight);
    GL11.glOrtho(0, 640, 0, 480, 0, 128);
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, renderer.getTexture("/textures/menu/title.png"));
    GL11.glEnable(GL11.GL_ALPHA_TEST);
    GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2f(0, 0);
    GL11.glVertex3f(-frameWidth/2, -frameHeight/2, -1);
    GL11.glTexCoord2f(1, 0);
    GL11.glVertex3f(+frameWidth/2, -frameHeight/2, -1);
    GL11.glTexCoord2f(1, 1);
    GL11.glVertex3f(+frameWidth/2, +frameHeight/2, -1);
    GL11.glTexCoord2f(0, 1);
    GL11.glVertex3f(-frameWidth/2, +frameWidth/2, -1);
    GL11.glEnd();
    GL11.glEnable(GL11.GL_CULL_FACE);
    GL11.glCullFace(GL11.GL_BACK);

frameWidth是窗口的宽度,frameHeight是高度。

2 个答案:

答案 0 :(得分:3)

因为你实际上没有写出出错的地方,我只能猜测,但在这里,你指定了z在范围内的正交投影(0,128)。

 GL11.glOrtho(0, 640, 0, 480, 0, 128);

然后将顶点放在z = -1。当然不会被绘制,因为所有顶点都将被剪裁。

 GL11.glVertex3f(-frameWidth/2, -frameHeight/2, -1);

尝试将glOrtho更改为gluOrtho2D(或等效的硬编码),并将所有顶点更改为glVertex2f

答案 1 :(得分:0)

您应该在渲染之前调用glEnable(GL_CULL_FACE); glCullFace(GL_BACK)。如果您使用glOrtho表示2D,则应该使用glOrtho(..., ..., ..., ..., -1, 1);并使用glVertex2f作为2D顶点。