在python3中,我使用glfw和PyOpenGL。当我创建一个隐藏的窗口,渲染到它,读取它的像素-我得到了很好的渲染图像。在
如果我试图调整窗口大小-OpenGL似乎不知道新的渲染大小,而是将大图像渲染到一个小窗口中,这会使回读图像被裁剪
下面是一个例子:
width = height = 500
# Create the hidden window we are going to render into
glfw.window_hint(glfw.VISIBLE, False)
glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 3)
glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 2)
glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, OpenGL.GL.GL_TRUE)
glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)
window = glfw.create_window(width, height, "hidden window", None, None)
assert window
glfw.make_context_current(window)
# THIS CODE BREAKS IT:
# width = height = 300
# glfw.set_window_size(window, 300, 300)
# render into the window:
# ...code to choose the VBO...
glDrawArrays(GL_TRIANGLES, ...)
# Read back the created pixels:
data = glReadPixels(0, 0, width, height, OpenGL.GL.GL_RGB, OpenGL.GL.GL_UNSIGNED_BYTE)
rendered_image = np.frombuffer(data, dtype=np.uint8).reshape(rendered_image_height, rendered_image_width, 3)[::-1]
另一种在创建窗口并对其进行多次渲染(并明显清除)后更改渲染大小的另一种解决方案可能也很有用
当窗口的大小发生变化时,必须通过^{} 重置视口矩形
实现resize回调并按^{} 设置:
^{pr2}$通过^{} 获得新的帧缓冲区大小,并通过^{} 设置视口矩形:
相关问题 更多 >
编程相关推荐