1

我发现我的 opengl 可以支持的最大纹理大小是 8192,但我正在使用的图像是 16997x15931。正如您在此链接中看到的那样,我已经完成了COpenGLControl类并对其进行了自定义以供我自己使用以使用较小的 7697x7309 图像并为其激活不同的导航任务。

在 OpenGL 中的 2D 纹理顶部渲染一个带轮廓的红色矩形

但现在在工作的最后阶段,我决定更改应用纹理的部分,使其能够处理大于 8192 尺寸的图像。

问题:

  • 在我的opengl中有可能吗?
  • 我应该研究什么概念,mipmaps,多重纹理?
  • 它会扩展代码的性能吗?

现在我的程序使用 271 MB 的内存来显示这个小图像(7697x7309),我将向它添加一个任务(用于图像处理过滤过程),我已经竭尽全力优化代码,但它为 (7697x7309) 图像使用 376 MB 的内存(代码已经编写为控制台应用程序将与此项目结合使用)。所以我认为最终的项目将使用高达 700 MB 的内存来存储接近 7000x7000 大小的图像。显然,对于更大的图像(16997x15931),ram 的使用率会更高!

所以我正在寻找一个概念来处理大于 MAX_TEXTURE_SIZE 的图像并优化程序的性能

更多问题:

  • 我应该在OpenGL中学习什么概念来实现上述目标?
  • 解释一下你建议的概念?

我也在游戏开发中问过这个问题,但决定在这里重复这个问题,也许它会有更多的观众。一旦我得到答案,我将从任何一个网站上删除问题。所以不用担心多次提问。

4

1 回答 1

2

我将尝试总结我对原始问题的评论。

  • 知道你正确的 opengl 版本:也许你可以加载一些现代扩展并使用最新版本的 opengl。
  • 为了减少内存,您可以使用一些纹理压缩:
  • 另一个简单的想法:您可以分割巨大的纹理并创建 4 个较小的纹理(从 16k x 16k 到 4 个 8k x 8k)并以某种方式渲染四个正方形。
  • 也许您可以使用 OpenCL 或 CUDA 来完成这项工作?
  • 关于mipmap:它是一组较小版本的输入纹理,mipmap 提高了过滤的性能和最终质量,但是对于具有完整 mipmap 链的纹理,您需要另外 33% 的内存。在您的情况下,它们可能会很有帮助。例如,当您从很远的距离看一堵墙时,您不必使用完整的(大)纹理......只有它的一个小版本就足够了。g-truc 在 mipmap 上

一般来说,有很多选择,但这取决于您的经验,哪个更简单,实现最快。

于 2013-08-29T18:02:15.627 回答