【问题标题】:Need to make SDL/OpenGL window size larger than screen size需要使 SDL/OpenGL 窗口大小大于屏幕大小
【发布时间】:2014-12-24 08:01:59
【问题描述】:

我需要从不同角度拍摄 3D 模型的快照。 为此,我使用 SDLOpenGL。 但是当我尝试使窗口尺寸大于屏幕尺寸时,它缩小以适应,这不是我想要的。

是否有任何正确的或 hacky 的方式来做到这一点?

【问题讨论】:

  • 如果用于屏幕外渲染,您可以使用大于屏幕的 FBO(最大尺寸可以查询)。
  • 这就是我正在使用阴影映射做的事情......(请原谅,我不太了解 OpenGL)。虽然部分理解,但仍然无法弄清楚,我的错误在哪里。请帮忙。链接到 pastebin 代码:pastebin

标签: opengl window screen sdl sdl-2


【解决方案1】:

使用具有适当大小的渲染缓冲区目标的帧缓冲区对象。如果支持的最大渲染缓冲区大小不能满足您的需求,请实施平铺渲染。

不要使用屏幕窗口来创建您需要“完美”和原始条件的渲染。从某种意义上说,屏幕上的帧缓冲区是不可靠的,如果需要,它的内容可能随时被操作系统破坏。

此外,由于窗口帧缓冲区实际上只是一个进入更大的单屏幕帧缓冲区的真实窗口,因此您将很难使其大于屏幕大小。

【讨论】:

  • 同意。如果您不需要交互或需要最高性能,请在屏幕外渲染。如果您仍然需要在屏幕上查看输出,例如为了让您的快照适合您的角度,请从您的 FBO 复制它并将其缩小到窗口。然后从分辨率更高的 FBO 拍摄快照。我认为大多数高端实现至少支持 4kx4k 渲染。
  • 这就是我正在使用阴影映射做的事情......(请原谅,我不太了解 OpenGL)。虽然部分理解,但仍然无法弄清楚,我的错误在哪里。请帮忙。 pastebin 代码链接:pastebin
  • @SMH:第 63 行没有意义。您已经将阴影贴图直接渲染到纹理。不需要复制任何东西。在随后从相机的有利位置进行的渲染中,您仍然有阴影贴图帧缓冲区绑定。您必须首先绑定另一个帧缓冲区(屏幕上的默认 0 或渲染到渲染缓冲区 fbo[1]),并且再次不需要将任何内容复制到目标缓冲区。但最终您将不得不使用 glReadPixels 来检索生成的图像。
  • @datenwolf:好的!我会检查的。 但我的主要观点是,最终渲染仍然会在大尺寸图像上缩小尺寸(大于我需要的屏幕尺寸。) 即图像的上部未渲染。我希望它在大于屏幕尺寸的屏幕外表面上渲染。 即使在使用 FBO 之后,渲染的大小也会以丑陋的纵横比进行调整。(注意,我使用的是 SDL2 和 OpenGL 3.1)
  • @SMH:您必须在绑定具有与目标渲染缓冲区匹配的偏移量和大小的帧缓冲区后调用 glViewport。您的代码中也缺少这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
相关资源
最近更新 更多