从场景中截取非常大的屏幕截图

莫斯塔拉卜

我想从OpenGL中的应用程序中截取非常大的屏幕截图(如20000x20000),以便在横幅上进行打印。首先,由于最大的GPU纹理大小限制,我无法创建这么大的帧缓冲区。任何人都可以帮助我如何捕获不同块中的帧缓冲区?

如您已经提到的,多遍捕获是您的方法。以最简单的形式,您可以使用多个遍,每个遍渲染场景的一部分。

要获得适当的图像子区域,您需要做的就是对顶点的剪辑空间位置应用另一种变换。这归结为简单的翻译和定标xy

考虑剪辑空间-规范化的设备空间的欧洲风俗解释-观看空间在所有3个维度上均由立方体[-1,1]表示。

要仅渲染该立方体的与轴对齐的子区域,我们必须对其进行放大,以便仅该子区域适合[-1,1]区域,并且必须对其进行适当的平移。

假设我们希望将图像分割成的均匀网格mn瓷砖,瓷砖渲染时,我们可以做到以下几点转换ij

  1. 将图块的左下角移至原点。该图块位置将位于(-1 + 2*i/m, -1 + 2*j/n),因此我们必须使用取反的值进行翻译:

    x' = x + 1 - 2*i/my' = y + 1 - 2*j/n

    这只是使最终翻译更容易的帮助步骤。

  2. 按因子mn沿x和y方向缩放

    x'' = m * x' = x * m + m - 2*iy'' = y' * n = y * n + n - 2*j

  3. 现在,将图块对齐,使其左下角在原点处(仍然),右上中心在(2,2)处,因此只需将其平移回去,(-1, -1)以使我们再次进入视图voulme:

    x''' = x'' - 1 = x * m + m - 2*i - 1y''' = y'' - 1 = y * n + n - 2*j - 1

可以将其表示为简单的仿射变换矩阵:

(  m     0     0   m - 2*i - 1)
(  0     n     0   n - 2*j - 1)
(  0     0     1        0     )
(  0     0     0        1     )

在大多数情况下,您可以将该矩阵简单地预乘到投影矩阵(或您使用的任何矩阵)上,而在渲染过程中无需更改任何其他内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何截取比屏幕大的屏幕截图?

来自分类Dev

是否可以从LiveCode中截取屏幕截图?

来自分类Dev

如何在python中截取屏幕截图?

来自分类Dev

截取UIPickerView的屏幕截图

来自分类Dev

如何在 Xamarin Android 中裁剪屏幕并截取屏幕截图?

来自分类Dev

在Ubuntu安装过程中截取屏幕截图

来自分类Dev

从全屏Qt快速应用程序中截取屏幕截图

来自分类Dev

无法在Android上运行的Kivy应用中截取屏幕截图

来自分类Dev

通过选择区域从pyqt脚本中截取屏幕截图

来自分类Dev

从全屏Qt快速应用程序中截取屏幕截图

来自分类Dev

无法在Android上运行的Kivy应用中截取屏幕截图

来自分类Dev

FFmpeg从时长可变的视频中截取屏幕截图

来自分类Dev

在Ubuntu安装过程中截取屏幕截图

来自分类Dev

从.264或.m2ts文件中截取屏幕截图

来自分类Dev

截取屏幕截图并存储在 SQL VB.NET 中

来自分类Dev

在 xfce 中截取一个区域的屏幕截图?

来自分类Dev

如何在移相器中截取游戏div的屏幕截图

来自分类Dev

如何使用 React Native 中的按钮截取屏幕截图?

来自分类Dev

如何使用 Java 在 Selenium 中截取可滚动的屏幕截图?

来自分类Dev

在 ubuntu 错误位置的 selenium 中截取屏幕截图元素

来自分类Dev

在浏览器页面中截取容器的屏幕截图

来自分类Dev

如何截取尺寸的屏幕截图?

来自分类Dev

如何截取尺寸的屏幕截图?

来自分类Dev

截取特定布局的屏幕截图

来自分类Dev

在.NET中乘以非常大的整数

来自分类Dev

c中的循环计数非常大

来自分类Dev

在.NET中乘以非常大的整数

来自分类Dev

在 MySQL 中存储非常大的整数

来自分类Dev

截取屏幕特定部分的屏幕截图

Related 相关文章

热门标签

归档