【发布时间】:2010-06-18 08:00:07
【问题描述】:
最近我遇到了一个问题,即我的 OpenGL 程序无法在一台使用了 2 年、配备 nVidia Quadro 140 卡的联想笔记本电脑上正确渲染纹理。它运行 OpenGL 2.1.2 和 GLSL 1.20,但是当我打开 mip-mapping 时,整个屏幕都是黑色的,没有任何警告或错误。
这是我的纹理过滤器代码:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
摆弄了 40 分钟后,我发现 mip-mapping 是问题所在。关闭它修复它:
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
我得到了很多别名,但至少程序是可见的并且运行良好。
最后,两个问题:
- 除了检查 OpenGL 版本之外,检查机器上是否可用 mip 映射的最佳或标准方法是什么?
- 如果 mip-mapping 不可用,避免混叠的最佳解决方法是什么?
编辑:
这是我真正想要的问题:
如何以编程方式检查平台上是否提供 mip-mapping?
【问题讨论】:
-
纹理内部格式和大小是多少?某些格式在首次从扩展中引入时会有奇怪的限制(例如浮动纹理、非二次幂纹理),但 GL 2.1.2 要求其中大多数正常工作...
-
@Bahbar:在上述情况下,我只使用
512x512的.bmp文件。我正在使用GL_UNSIGNED_BYTE。 -
嗯。那应该行得通。我敢打赌实现中的一个错误。
-
@Bahbar:是的,我是这么认为的。我想。
=/
标签: opengl filtering textures mipmaps