在GL ES 2.0函数中,片段着色器中不提供 texture2DLod 。
我需要移植GLSL着色器。
在GL ES 2.0中,我只能使用 texture2D (sampler2D采样器,vec2坐标,float bias )
告诉我如何计算等于已知值 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)
最佳答案
您想要的是不可能的。
LOD偏差恰恰是:偏差。它被添加到从texture2D
自动计算的LOD中。textureLOD
不能那样工作。它选择一个特定的LOD,它不基于任何人自动计算的任何东西。
进行所需操作的唯一方法是自己执行自动LOD计算,然后尝试计算该值与实际所需LOD之间的偏差,然后使用texture2D
进行应用。我将告诉您如何执行此操作,但这需要OpenGL ES 2.0中没有的函数dFdx
和dFdy
。所以你不能。
但是请不要感到难过,因为即使您可以,它也不起作用。另一个问题是LOD偏置被限制在特定范围内。请注意,您不会在ES 2.0规范中找到它,但这没关系;您也不会找到有关该偏差如何应用于为mipmapping计算的lambda的任何语言。对真的;继续搜索。最接近的是GLSL ES规范,但是OpenGL ES规范并没有说明对lambda施加偏见。
是的,这是不可能的。