如何在纹理中使用OpenGL LOD?

如何在纹理中使用OpenGL LOD?,opengl,textures,texture-mapping,Opengl,Textures,Texture Mapping,GL\u纹理\u最小LOD、GL\u纹理\u最大LOD和LOD\u偏差是如何工作的 为了直观地检查它,我使用mipmapping创建了6*6纹理,对于MIN\u LOD值>0.5的纹理,无论MAX\u LOD的值如何,我都会得到一个3*3纹理。如果我更改LOD\U偏差,它不会影响我的o/p。我不知道它到底是怎么工作的 有人能举例说明吗 编辑: 我正在手动创建mipmap级别,以便观察它拾取的级别。这是我的密码: glTexImage2D(target, 0, GL_RGBA,9 ,9, 0, G

GL\u纹理\u最小LOD
GL\u纹理\u最大LOD
LOD\u偏差
是如何工作的

为了直观地检查它,我使用mipmapping创建了6*6纹理,对于
MIN\u LOD
值>0.5的纹理,无论
MAX\u LOD
的值如何,我都会得到一个3*3纹理。如果我更改
LOD\U偏差
,它不会影响我的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级别,即2*2,但它选择了第1个mipmap级别4*4。当我将最小lod设置为<0.5时,需要第0级9*9。无论设置为“最大lod”的值是多少,都会发生这种情况

首先是一些参考资料:

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

TEXTURE\u LOD\u BIAS
指定一个固定的偏移值,该值将在纹理采样之前添加到纹理的细节级别参数中。指定的值将添加到着色器提供的偏移值(如果有)中,然后钳制到实现定义的范围-偏移最大偏移最大值,其中偏移最大值是实现定义的常量
GL\u max\u TEXTURE\u LOD\u bias
的值。初始值为0.0

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

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

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

请参阅此处提供的优秀Daniel Rakos的“Mountains demo”。确保下载代码并阅读,你会找到你想要的示例@PiotrWadas是几何LOD,而不是纹理LOD。一篇很好的文章,但完全没有抓住要点。这听起来像是一篇文章。你到底想用这些参数做什么?