簡體   English   中英

片段着色器似乎不精確地落在floor()上

[英]Fragment shader seems to floor() imprecisely

我正在嘗試在片段着色器中插入坐標。 不幸的是,如果接近上邊緣,則fVertexInteger的插值似乎是四舍五入的,而不是fVertexInteger 這發生在大約fVertexInteger >= x.97

例:

  • floor(64.7)返回64.0 >正確

  • floor(64.98)返回65.0 >錯誤

x.0以上的天花板收盤處x.0發生同樣的情況,其中ceil(65.02)返回65.0而不是66.0

問:有什么想法如何解決?

注意:

  • 帶有GLSL 1.0的GL ES 2.0
  • 我的硬件上的片段着色器不支持highp float
  • 平面變化不是一個解決方案,因為我正在繪制TRIANGLE_STRIP並且無法重新聲明令人發指的頂點(僅OpenGL 3.2+)

片段着色器:

varying float fVertexInteger;
varying float fVertexFraction;
void main() {

    // Fix vertex integer
    fixedVertexInteger = floor(fVertexInteger);

    // Fragment color
    gl_FragColor = vec4(
        fixedVertexInteger / 65025.0,
        fract(fixedVertexInteger / 255.0),
        fVertexFraction,
        1.0 );

}

我不完全知道什么是精度mediump float實際上是在OpenGL ES在Android,但最有可能的解釋是,該文本(或實際代碼的變化值) 64.98已四舍五入為65 (使用圓最接近的位置),甚至還沒有放到floor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM