纹理采样:根据LOD值计算BIAS值

Mix*_*xer 3 opengl opengl-es glsl

在GL ES 2.0函数中,texture2DLod在片段Shader中不可用.我需要移植GLSL Shader.

在GL ES 2.0中,我只能使用texture2D(sampler2D采样器,vec2坐标,浮动偏置)

告诉我如何计算相当于已知值LOD(细节水平)的偏差值?

//Example GLSL:
float lod=u_lod;
textureLod(sampler, (uInverseViewMatrix * vec4(r, 0.0)).xy, lod);

//I need GL ES 2.0:
float lod=u_lod;
float bias=?  <-----calc bias from lod
texture2D(sampler,(uInverseViewMatrix * vec4(r, 0.0)).xy,bias)
Run Code Online (Sandbox Code Playgroud)

Nic*_*las 5

你想要的是不可能的.

LOD偏差恰恰是:偏见.它被添加到自动计算的LOD中texture2D.

textureLOD不这样做.它选择一个特定的 LOD,它不是基于任何人自动计算的任何东西.

做你想做的事的唯一方法是自己执行自动LOD计算,然后尝试计算该值与你实际想要的LOD之间的偏差,然后应用它texture2D.我会告诉你如何做到这一点,但这需要的功能dFdxdFdy,这是不是在OpenGL ES 2.0的.所以你不能.

但是不要感到难过,因为即使你可以,它也行不通.另一个问题则存在LOD偏置钳位在特定范围内.请注意,您不会在ES 2.0规范中找到它,但这没关系; 您也找不到任何关于如何将偏差应用于为mipmapping计算的lambda的语言.对真的; 继续搜索它.你得到的最接近的是GLSL ES规范,但OpenGL ES规范没有说明对lambda应用偏差.

所以,是的,这是不可能的.