3

在 GL ES 2.0 函数中, texture2DLod在片段着色器中不可用。我需要移植 GLSL 着色器。

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

1 回答 1

5

你想要的是不可能的。

LOD 偏差就是这样:一个偏差。它被添加到自动计算的 LOD 中texture2D

textureLOD不能那样工作。它选择一个特定的LOD,它不基于任何人自动计算的任何内容。

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

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

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

于 2013-07-29T06:30:34.810 回答