我是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是高度。
答案 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顶点。