渲染帧缓冲显示错误的结果
我试图在使用LWJGL的同时将所有渲染渲染到帧缓冲区而不是后缓冲区。
我为图形做了以下事情。
设置显示并设置OpenGL:
try {
Display.setDisplayMode(new DisplayMode(1024, 768));
Display.create();
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
Display.setTitle(WINDOW_NAME);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 1024, 0, 768, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
然后我创建一个framebuffer对象:
m_width = p_width;
m_height = p_height;
m_frameBufferObject = glGenFramebuffersEXT();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_frameBufferObject);
m_depthBuffer = glGenRenderbuffersEXT();
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_depthBuffer);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, p_width, p_height);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_depthBuffer);
m_frameBufferTexture = glGenTextures();
glBindTexture(GL_TEXTURE_2D, m_frameBufferTexture);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, p_width, p_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (java.nio.ByteBuffer)null);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_frameBufferTexture, 0);
渲染是这样完成的(目前我只尝试绘制一个像素):
// Bind the framebuffer object.
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_frameBufferObject);
glPushAttrib(GL_VIEWPORT_BIT);
glViewport(0, 0, m_width, m_height);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
// Clear with black
GL11.glColor3f(0.0f, 0.0f, 0.0f);
GL11.glBegin(GL11.GL_POINTS);
setOpenGLColour(new Colour(Colour.RED));
GL11.glVertex2f(100, 100);
GL11.glEnd();
//Deactivate the framebuffer object
glPopAttrib();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
//Render the framebuffer object to the screen
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0f, 0f);
GL11.glVertex2f(0, 0);
GL11.glTexCoord2f(1f, 0f);
GL11.glVertex2f(1024, 0);
GL11.glTexCoord2f(1f, 1f);
GL11.glVertex2f(1024, 768);
GL11.glTexCoord2f(0f, 1f);
GL11.glVertex2f(0, 768);
GL11.glEnd();
问题是:现在完整的屏幕是红色的。 不只是一个红色的像素,但完整的屏幕是红色的。 如果我不绘制像素,那么屏幕只是黑色。
有人能告诉我我可能做错了什么,或者如何做对吗?
它看起来像当你试图将FBO渲染结果复制到屏幕时没有变形。 由于您将当前绘制颜色设置为红色,因此只会将屏幕尺寸四边形绘制为红色。
我所看到的一件事是纹理从未启用。 在开始最终绘图命令之前添加此项:
glEnable(GL_TEXTURE_2D);
纹理也需要绑定,这通常会在绘图函数中发生。 但是既然你在设置过程中绑定了纹理,并且从不解除绑定,那么这个部分很可能不会引起问题。
链接地址: http://www.djcxy.com/p/34029.html