5

怎么做GL_TEXTURE_MIN_LOD,怎么GL_TEXTURE_MAX_LOD工作LOD_BIAS

为了直观地检查它,我创建了带有 mipmapping 的 6*6 纹理,对于 > 0.5 的值,MIN_LOD我得到一个 3*3 纹理,而与MAX_LOD. 如果我改变LOD_BIAS它不会影响我的o/p。我无法弄清楚它是如何工作的。

任何人都可以通过举个例子来解释它吗?

编辑:我正在手动创建 mipmap 级别,以便我可以观察它正在拾取哪个级别。这是我的代码:

glTexImage2D(target, 0, GL_RGBA,9 ,9, 0, GL_RGBA, GL_BYTE,subpix);
glTexImage2D(target, 1, GL_RGBA,4 ,4, 0, GL_RGBA, GL_BYTE,&subpix[4]);
glTexImage2D(target, 2, GL_RGBA,2 ,2, 0, GL_RGBA, GL_BYTE,&subpix[10]);
glTexImage2D(target, 3, GL_RGBA,1 ,1, 0, GL_RGBA, GL_BYTE,&subpix[18]);
glSamplerParameterf(sampler,GL_TEXTURE_MIN_LOD,0.862);
glSamplerParameterf(sampler,GL_TEXTURE_MAX_LOD,0.99);
glSamplerParameterf(sampler,GL_TEXTURE_LOD_BIAS,0.0);

在这种情况下,我预计它将采用 2*2 的第二个 mipmap 级别,但它选择 4*4 的第一个 mipmap 级别。当我设置 min lod < 0.5 时,它需要 9*9 的第 0 级。无论设置为 max lod 的值如何,都会发生这种情况。

4

1 回答 1

1

首先是一些参考资料:

TEXTURE_MIN_LOD设置最小细节级别参数。这个浮点值限制了选择最高分辨率的 mipmap(最低的 mipmap 级别)。初始值为-1000。

TEXTURE_LOD_BIAS指定在纹理采样之前要添加到纹理细节级别参数的固定偏差值。指定的值被添加到着色器提供的偏差值(如果有的话),然后被钳制到实现定义的范围 - 偏差最大偏差最大值,其中偏差最大值是实现定义的常量的值GL_MAX_TEXTURE_LOD_BIAS。初始值为 0.0

因此,如果您对 mipmap 选择感到惊讶,我建议您执行以下步骤(不一定按顺序):

  • 手动创建 mipmap,使它们在视觉上彼此不同
  • 验证您的 mipmap 是否正确提供。
  • 验证您的LOD_BIAS设置不只是将所有值都放在范围之外,从而使采样器有效地始终使用最大或最小 LOD。

环顾四周,我发现textureQueryLod . 您也可能对帮助调试感兴趣。

于 2013-04-04T08:44:31.293 回答