2013-08-29 353 views
1

我发现我的opengl可以支持的最大纹理尺寸是8192,但是我使用的图像是16997x15931。正如您在此链接中看到的,我已完成课程COpenGLControl并将其定制为供我自己使用,以使用较小的7697x7309图像并为其启动不同的导航任务。如何从opengl中的大图像创建纹理(大于MAX_TEXTURE_SIZE)

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

,但现在在工作的最后阶段,我决定改变,其中适用纹理的部分,使其能够处理更大的图像比大小8192

问题:

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

现在我的程序使用271 MB RAM的只是显示这个小图像(7697x7309)和我将任务添加到它(图像处理过滤过程),我用我所有的努力以优化代码,但它使用376 MB的RAM(7697x7309)图像(该代码已被编写为控制台应用程序将与此项目结合使用)。所以我认为最后的项目会在7000x7000尺寸附近使用高达700 MB的RAM。显然对于更大的图像(16997x15931),ram的使用将会更高!

所以我在寻找一个概念来处理比MAX_TEXTURE_SIZE更大的图像,同时优化了程序的性能

更多的问题:

  • 我应该在OpenGL的学习理念是什么要达到上述目标吗?
  • 解释一下你建议的概念吗?

我的问题的Game Developement太多,但决定在这里重复的问题也许就会有更多的观众。只要我得到答案,我会从网站上删除问题。所以不要担心多个问题。

+0

MegaTextures呢? http://www.opengl.org/registry/specs/AMD/sparse_texture.txt和这里http://renderingpipeline.com/2012/03/partially-resident-textures-amd_sparse_texture/ – fen

+0

我不使用现代的OpenGL和你看我在我的课堂上使用旧的WGL API,因为我已经习惯了。是否支持在不赞成的OpenGL作为[这个答案的评论说](http://stackoverflow.com/a/18478717/1245120)说的? @fen – sepideh

+1

你能检查你的硬件支持哪些opengl版本吗?现代的opengl通过使用扩展来启用,动态加载。如果你不能使用超级纹理,那么你可以有4个纹理是从你的巨大纹理的一部分创建的。然后在应用程序中,你必须管理它们。同时寻找压缩机制,如DXT纹理和压缩(也支持通过opengl扩展) – fen

回答

2

我会尽量总结我对原始问题的评论。

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

一般来说有很多选择,但它取决于你的经验什么更简单和最快的实现。

+0

谢谢我在使用opengl方面经验不足,事实上这是我的第一个程序,但我会在未来的项目中采纳所有的建议,但仅仅是为了好奇什么是mipmap的使用呢? – sepideh

+0

感谢@fen从一个简短的研究中我发现,mipmapps就像GIS应用程序中的金字塔,使图像比原始图像的大小更小,并将其用于快速导航任务?所以即使使用mipmap也不能解决我的问题。它只是使我的8000x8000图像的较小版本?但是,如果我使用多个纹理,如你所建议的使用mipmap概念构建我的原始图像的四个纹理将增强渲染性能?我对吗? **我觉得像我这样的初学者多纹理是最好的解决问题的快速** – sepideh

+0

你想在一些3d墙上显示它吗?也许你可以缩放你的输入纹理到一些较小的版本(即使使用一些照片应用程序),然后在程序中使用它? – fen