【问题标题】:Texture sampling: Calculation of BIAS value from the LOD value纹理采样:根据 LOD 值计算 BIAS 值
【发布时间】:2013-07-29 05:59:50
【问题描述】:

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

【问题讨论】:

  • 这里的纹理坐标知道什么?因为,一般来说,您。但是,如果您知道纹理坐标将选择什么 LOD,那么您也许可以使其工作。或者,换句话说,有一个原因为什么 ES 2.0 不支持textureLOD;因为它不能
  • 在 Open GL ES 2.0 的规范中,textureLod 仅在顶点着色器中可用。

标签: opengl opengl-es glsl


【解决方案1】:

你想要的都是不可能的。

LOD 偏差正是:偏差。它被添加到由texture2D 自动计算的 LOD。

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

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

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

是的,这是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    相关资源
    最近更新 更多