【问题标题】:Does GLES mediump float have enough precision for mapping display coordinates?GLES mediump float 是否有足够的精度来映射显示坐标?
【发布时间】:2016-09-26 16:07:50
【问题描述】:

GLES 着色器中的mediump float 对于纹理坐标来说应该足够了,但是对于屏幕坐标来说就足够了吗?

根据this answermediump float有一个很好的范围-从-16384+16384,但是精度只有10位,这意味着高于+1024或低于-1024,如果我理解正确的话,float 变量一次只能增加两个像素,所以你会在屏幕边缘附近的纹理之间出现像素错误和接缝。

随着现代手机的显示分辨率达到3840x2160,看起来mediump 不足以在顶点着色器中指定像素完美的屏幕坐标。

我猜1920x1080 屏幕仍然可以,如果您使用屏幕中间作为零坐标,而不是左上角或左下角,请注意您正在执行的算术运算这些变量永远不会超出其安全的-1024:+1024 范围。

手机制造商也可以将其 GFX 硬件中的浮点精度提高到高于规格,以匹配他们更大的屏幕,但我怀疑他们会这样做。

有人可以确认一下吗?

【问题讨论】:

    标签: shader opengl-es-2.0 vertex-shader


    【解决方案1】:

    大多数 GPU 可能会将 mediump 实现为半精度浮点数。这比 mediump 允许的最小值略好,因为它可以表示 -2048 到 2048 (Source) 范围内的所有整数,而不是您担心的 -1024 到 1024。

    此外,正确焊接的几何图形上不应有可见的接缝,因为光栅化规则会避免这种情况。

    但是您绝对正确,mediump 会在高分辨率屏幕上引起问题,您将无法指定确切的坐标。

    我总是建议将 highp 用于位置坐标和任何对位置进行操作的矩阵。然而,即使你这样做了,在高分辨率屏幕上也存在一个问题,即 gl_FragCoord 可以实现为 mediump (some discussion here)

    【讨论】:

      猜你喜欢
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      相关资源
      最近更新 更多