【问题标题】:How to create textures from large images in opengl (bigger than the MAX_TEXTURE_SIZE)如何在opengl中从大图像创建纹理(大于MAX_TEXTURE_SIZE)
【发布时间】:2013-08-30 02:28:23
【问题描述】:

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

Render an outlined red rectangle on top a 2D texture in OpenGL

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

问题:

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

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

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

更多问题:

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

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

【问题讨论】:

标签: performance opengl mfc textures mipmaps


【解决方案1】:

我将尝试为原始问题总结我的 cmets。

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

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

【讨论】:

  • 谢谢我在使用 opengl 方面并不是很有经验,事实上这是我的第一个程序,但我会在我未来的项目中采纳你的所有建议,但只是想知道 mipmap 的用途是什么?
  • 感谢@fen 从一个简短的研究中我发现 mipmaps 类似于 GIS 应用程序中的金字塔,它使图像小于原始图像的大小并使用它来快速导航任务?所以即使使用 mipmap 也不能解决我的问题。它只是制作我的 8000x8000 图像的较小版本?但是,如果我按照您的建议使用多个纹理,使用 mipmap 概念构建原始图像的四个纹理会提高渲染性能吗?我对吗? 我认为对于像我这样的初学者来说,多重纹理最好是快速解决问题
  • 你想把它显示在一些 3d 墙上吗?也许你可以将你的输入纹理缩放到一些更小的版本(甚至使用一些照片应用程序),然后在程序中使用它?
  • 除了@fen,请原谅我对我的问题的愚蠢评论,我的 OpenGL 版本如下:GL_RENDERER: GeForce GT 230M/PCI/SSE2 GL_VERSION: 3.3。 0 GLSL 版本:3.30 NVIDIA 通过 Cg 编译器和我的 总 GPU 内存:512MB
  • 有了这个 geForce,你可以进行现代的 opengl 编程...但是因为它是一个移动版本,所以不要期望有很好的性能:) 祝你项目好运。
猜你喜欢
  • 1970-01-01
  • 2011-08-11
  • 2018-03-31
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多