【发布时间】:2020-11-11 12:45:14
【问题描述】:
我创建了一个具有复古风格显示的低分辨率帧缓冲区对象。
帧缓冲区似乎会显示自己,导致屏幕底部出现混乱的像素。
This is how it looks when framebuffer is drawn completely overlapping the viewport
This is how it looks when framebuffer is drawn in overlapping the quarter of the viewport
这就是我制作帧缓冲区和渲染缓冲区的方式
FBO = glGenFramebuffers(1)
DBO = glGenRenderbuffers(1)
glBindRenderbuffer(GL_RENDERBUFFER, DBO)
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, 1280, 720)
glBindFramebuffer(GL_FRAMEBUFFER, FBO)
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, DBO)
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0)
这是主循环中的代码
glDrawElements(GL_TRIANGLES, len(indices), GL_UNSIGNED_INT, None) # Drawing Stuff
###
glBindFramebuffer(GL_FRAMEBUFFER, 0)
glBlitFramebuffer(
640 - 128,
360 - 72,
640 + 128,
360 + 72,
0,
0,
1280,
720,
GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT,
GL_NEAREST
)
我正在使用 Python 3 和 PyOpenGL
【问题讨论】:
-
如果
glBlitFramebuffer调用的源矩形和目标矩形不重叠会怎样?这是否给出了预期的结果? -
我不太明白你的意思。我是 OpenGL 新手,我正在学习它。
-
首先,为什么要复制帧缓冲区而不是直接直接渲染到屏幕上?其次需要通过 glViewport khronos.org/registry/OpenGL-Refpages/gl4/html/glViewport.xhtml 修改视口
-
什么是“复制”帧缓冲区?你的意思是我要对帧缓冲区进行两次传输?如果是这样,原因是我试图用第一个 blit 减小立方体的大小,然后在第二个 blit 中增加它。如果我只做第二个,它可以正常工作(它仍然会重复自己),但在这种情况下,我需要在立方体缩放时添加额外的翻译。
-
另外,这可能是驱动程序问题吗?这篇文章 (stackoverflow.com/questions/41413021/…) 说英特尔驱动程序存在问题。我也在使用英特尔驱动程序。此外,更改渲染缓冲区尺寸并没有带来任何变化。
标签: opengl framebuffer