首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SOIL - OpenGL的奇怪的mip地图相关问题

使用SOIL - OpenGL的奇怪的mip地图相关问题
EN

Stack Overflow用户
提问于 2012-01-31 12:53:15
回答 2查看 606关注 0票数 3

我正在使用土壤来生成OpenGL纹理。一切都很好,除了土壤中mip地图生成造成的远处伪影。当我不使用标志时:

代码语言:javascript
复制
SOIL_FLAG_MIPMAPS

它不是人工制品,但看起来很糟糕。有没有人见过这样的神器?在水面上,有一种栗色,在沙子上,它看起来像是浅绿色/蓝色的扭曲。

下面是它看起来的样子:

EN

回答 2

Stack Overflow用户

发布于 2012-02-14 08:09:32

我的猜测是,无论你用什么来生成mipmap都有一个bug,并且没有正确过滤mip级别-要么是从存储先前级别的像素的“有效”区域之外“泄漏”随机颜色,要么是忘记计算某些像素的值。也就是说,存在一个只影响mipmap链的最后一层的bug。

若要验证这是原因,请从加载的纹理的mip级别读回数据。使用glReadPixels或其他什么。如果最后的mip级别包含垃圾-这是你的纹理加载例程的错误。你也可以使用GL_LINEAR_MIPMAP_NEAREST滤镜,看看是否有一个紫色像素的特定MIP值。

要绕过该问题,请为第一级生成图像,并使用glGenerateMipmaps (OpenGL 3+)、glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);(OpenGL 2+或OpenGL 1.4+ )-我忘记了它是在哪个版本中添加的。在OpenGL 3+中已弃用)或gluBuild2DMipMap(旧的OpenGL版本)。

或者你可以自己计算mipmap。Box filter并不难实现。高斯也不难。

如果你使用公式生成纹理(因为你说了“生成”),另一种可能的情况是,公式会导致最后一个mip级别的计算错误,这会导致出现垃圾颜色。

还有另一种可能的情况是硬件故障(你不会相信在散热器坏了的过热GPU上可以得到什么样的图片)或驱动程序错误。但这应该会在许多应用程序中造成工件,而不仅仅是在你的程序中。

票数 3
EN

Stack Overflow用户

发布于 2012-02-01 04:20:52

Anisotropic filtering可能会有所帮助:

代码语言:javascript
复制
// right after you set your GL_TEXTURE_MIN/MAG_FILTER
if( glewIsSupported("GL_EXT_texture_filter_anisotropic") )
{
    GLfloat max;
    glGetFloatv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max );
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max);
}

或者是某种加载/纹理坐标错误,尽管没有足够的信息可以确定(即,一个完整的、最小的程序来演示该问题)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9074586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档