1

フラグメント シェーダーで座標を補間しようとしています。残念なことに、上端に近い場合、補間された値は、fVertexInteger床に置かれるのではなく、切り上げられるように見えます。これは約 の上で起こりますfVertexInteger >= x.97

例:

  • floor(64.7)戻ります64.0--> 正しい

  • floor(64.98)戻ります65.0--> 正しくありません

同じことが、の代わりに を返すx.0、の上の天井の近くで起こります。ceil(65.02)65.066.0

Q:これを解決する方法はありますか?

ノート:

  • 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 );

}
4

1 に答える 1