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

时间:2013-07-29 05:59:51

标签: opengl opengl-es glsl

在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)

1 个答案:

答案 0 :(得分:5)

你想要什么是不可能的。

LOD偏差恰恰是:偏见。它被添加到LOD中,该LOD是从texture2D自动计算的。

textureLOD不起作用。它选择特定的 LOD,它不基于任何人自动计算的任何内容。

执行所需操作的唯一方法是自己执行自动LOD计算,然后尝试计算该值与实际需要的LOD之间的偏差,然后将其应用于texture2D。我会告诉你如何做到这一点,但这需要函数dFdxdFdy,它们不在OpenGL ES 2.0 中。所以你不能。

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

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

相关问题