如何在openGL中使用纹理压缩?
问题描述:
我正在制作一个使用openGL的图像查看器,并且遇到了需要加载非常大(> 50MB)图像以供查看的情况。我将图片加载为纹理并将其显示到GL_QUAD,该图对于较小的图片效果很好,但在较大的图片上加载失败,我得到一个空白的矩形。到目前为止,我已经实现了一个非常丑陋的黑客,它使用另一个程序将图像转换为可以加载的更小,更低分辨率的版本,但我正在寻找更优雅的解决方案。我发现openGL有一个texture compression feature,但我无法让它工作。当我打电话如何在openGL中使用纹理压缩?
glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ARB, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits());
我得到的编译器错误 “GL_COMPRESSED_RGBA_ARB未申报”。我究竟做错了什么?有我缺少的图书馆吗?更一般地说,这是对我的问题可行的解决方案吗?
我在Windows Vista计算机上使用Qt Creator,使用NVIDIA Quadro FX 1700图形卡。
答
在我自己的GFX卡上,opengl纹理的最大分辨率是8192x8192,如果你的图像大于50MB,它可能是非常高的分辨率... 检查http://www.opengl.org/resources/faq/technical/texture.htm,它描述了如何找到最大值纹理大小。
答
首先,我不得不问这些大图像是什么分辨率?其次,要使用GL_COMPRESSED_RGBA_ARB这样的定义,你需要下载和使用比标准MS-Dev安装在GL API更现代化的GLEW。
图像每边有10,000和30,000像素之间的任何地方。 – 2009-07-13 20:55:26