如何在纹理中使用OpenGL LOD?

问题描述 投票:0回答:1

GL_TEXTURE_MIN_LOD
GL_TEXTURE_MAX_LOD
LOD_BIAS
如何工作?

为了直观地检查它,我使用 mipmapping 创建了 6*6 纹理,对于

MIN_LOD
的值 > 0.5,无论
MAX_LOD
的值如何,我都会得到 3*3 的纹理。如果我改变
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 级别。当我设置最小 lod < 0.5, It takes 0th level of 9*9. And it this happens irrespective of the value set to max lod.

opengl textures texture-mapping
1个回答
1
投票

首先一些参考资料:

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

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

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

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

围绕这个搜索,我发现了

textureQueryLod
。您可能也对帮助调试感兴趣。

© www.soinside.com 2019 - 2024. All rights reserved.