在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中没有的函数dFdxdFdy。所以你不能。

但是请不要感到难过,因为即使您可以,它也不起作用。另一个问题是LOD偏置被限制在特定范围内。请注意,您不会在ES 2.0规范中找到它,但这没关系;您也不会找到有关该偏差如何应用于为mipmapping计算的lambda的任何语言。对真的;继续搜索。最接近的是GLSL ES规范,但是OpenGL ES规范并没有说明对lambda施加偏见。

是的,这是不可能的。

10-06 09:37