【发布时间】:2011-06-10 04:20:25
【问题描述】:
我有一个 Java OpenGL (JOGL) 应用程序,我正在尝试创建一个覆盖整个屏幕的纹理映射四边形。在将一些像素绘制到缓冲区中,然后我想将这些像素读入纹理并在屏幕上重绘它们(应用了片段着色器)。我将纹理映射到视口的代码是:
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glPushMatrix();
gl.glLoadIdentity();
gl.glOrtho( 0, width, height, 0, -1, 1 );
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glPushMatrix();
gl.glLoadIdentity();
IntBuffer ib = IntBuffer.allocate(1);
gl.glEnable(GL.GL_TEXTURE_2D);
gl.glGenTextures(1, ib);
gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, 1);
//buff contains pixels read from glReadPixels
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, width, height, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, buff);
gl.glBindTexture(GL.GL_TEXTURE_2D, ib.get(0));
gl.glBegin(GL.GL_QUADS);
gl.glTexCoord2f(0,1);
gl.glVertex2f(0,0);
gl.glTexCoord2f(0,0);
gl.glVertex2f(0,height);
gl.glTexCoord2f(1,0);
gl.glVertex2f(width,height);
gl.glTexCoord2f(1,1);
gl.glVertex2f(width,0);
gl.glEnd();
gl.glBindTexture(GL.GL_TEXTURE_2D, 0);
gl.glPopMatrix();
gl.glPopMatrix();
最终结果是一个四边形,它没有覆盖整个视口(它是部分打开的)并且不包含缓冲区中的像素。我在这里做错了什么?
谢谢, 杰夫
【问题讨论】:
-
您还应该记住,垂直翻转屏幕(在您的
glOrtho调用中)会有效地反转您的面部方向。但既然你至少看到了一些东西,那将不是你的问题,因为剔除你根本看不到任何东西。
标签: java opengl jogl texture2d