deb*_*air 5 opengl textures texture-mapping
如何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);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我希望它将采用2*2的第二个mipmap级别,但它选择4*4的第一个mipmap级别.当我设置min lod <0.5时,它取0级9*9.并且无论设置为max lod的值如何,都会发生这种情况.
首先一些参考资料:
TEXTURE_MIN_LOD
设置最小细节级别参数。此浮点值限制最高分辨率 mipmap(最低 mipmap 级别)的选择。初始值为-1000。
TEXTURE_LOD_BIAS
指定要在纹理采样之前添加到纹理的细节层次参数的固定偏差值。指定的值将添加到着色器提供的偏差值(如果有),然后钳位到实现定义的范围 - 偏差最大值 偏差 max ,其中偏差 max 是实现定义的常量的值GL_MAX_TEXTURE_LOD_BIAS
。初始值为0.0
因此,如果您对 mipmap 选择感到惊讶,我建议执行以下步骤(不一定按顺序):
LOD_BIAS
设置不会将所有值置于范围之外,从而使采样器始终有效地使用最大或最小 LOD。围绕这个搜索,我发现了textureQueryLod
。您可能也对帮助调试感兴趣。