0

我是 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 是高度。

4

2 回答 2

3

因为您实际上并没有写出哪里出了问题,所以我只能猜测,但是在这里,您指定了 z 在 (0,128) 范围内的正交投影。

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

然后将您的顶点设置为 z = -1。当然它不会被绘制,因为所有的顶点都会被剪掉。

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

尝试更改glOrthogluOrtho2D(或硬编码等效项),并将所有顶点更改为glVertex2f.

于 2012-08-20T12:28:28.633 回答
0

您应该glEnable(GL_CULL_FACE); glCullFace(GL_BACK)在渲染之前调用。如果您使用glOrtho2D,您应该glOrtho(..., ..., ..., ..., -1, 1);为您的 2D 顶点执行和使用 glVertex2f。

于 2012-08-20T12:23:22.073 回答