在GL ES 2.0函数中 texture2DLod 在片段Shader中不可用。 我需要移植GLSL Shader。
在GL ES 2.0中,我只能使用 texture2D (sampler2D sampler,vec2 coord,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)
答案 0 :(得分:5)
你想要什么是不可能的。
LOD偏差恰恰是:偏见。它被添加到LOD中,该LOD是从texture2D
自动计算的。
textureLOD
不起作用。它选择特定的 LOD,它不基于任何人自动计算的任何内容。
执行所需操作的唯一方法是自己执行自动LOD计算,然后尝试计算该值与实际需要的LOD之间的偏差,然后将其应用于texture2D
。我会告诉你如何做到这一点,但这需要函数dFdx
和dFdy
,它们不在OpenGL ES 2.0 中。所以你不能。
但是不要感到难过,因为即使你可以,它也行不通。另一个问题是LOD偏差被钳位在特定范围内。请注意,您不会在ES 2.0规范中找到它,但这没关系;你也找不到任何关于偏差如何应用到为mipmapping计算的lambda的语言。对真的;继续搜索它。你得到的最接近的是GLSL ES规范,但是OpenGL ES规范没有说明对lambda应用偏差。
所以是的,这是不可能的。