如何在纹理中使用OpenGL LOD?

5jdjgkvh  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(131)

GL_TEXTURE_MIN_LODGL_TEXTURE_MAX_LODLOD_BIAS是如何工作的?
为了直观地检查它,我用mipmapping创建了66纹理,对于MIN_LOD的值> 0.5,我得到了一个33纹理,与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);

在这种情况下,我希望它会采取第二个mipmap水平,这是22,但它选择第一个mipmap水平44。当我设置min lod < 0.5时,它需要9*9的第0个级别。无论max lod的值是多少,都会发生这种情况。

fykwrbwg

fykwrbwg1#

首先是一些参考:

**TEXTURE_MIN_LOD**设置最小细节级别参数。此浮点值限制最高分辨率mipmap(最低mipmap级别)的选择。初始值为-1000。
**TEXTURE_LOD_BIAS**指定一个固定的偏移值,该值将在纹理采样之前添加到纹理的细节级别参数中。指定的值将添加到着色器提供的偏置值(如果有),然后箝位到实现定义的范围- bias max bias max,其中bias max是实现定义的常量GL_MAX_TEXTURE_LOD_BIAS的值。初始值为0.0

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

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

在这附近搜索,我找到了textureQueryLod。您可能也会对帮助调试感兴趣。

相关问题