GLSL での 32 ビット RGBA float 値の読み取り
-
20-09-2019 - |
質問
32 ビット浮動データをシェーダーに送信しようとしていますが、結果は不安定です。完全な白 (1,1,1,1) でテストすると、値はすべて 0 になります。これはテクスチャを作成するためのコードです。
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA32F_ARB, 512, 512, 0, GL.GL_RGBA, GL.GL_FLOAT, data);
そしてGLSLでそれを読み取る:
uniform sampler2D u_tex1;
varying vec2 v_uv;
void main()
{
gl_FragColor = texture2D(u_tex1, v_uv);
}
テクスチャをランダムな値に設定すると、何かが表示されますが、それは正しくありません。これは RGBA32F テクスチャから読み取る正しい方法ですか、それとも何かが足りないのでしょうか?
解決
あなたが行ったことについて多くの情報を提供していません<ただし、表示されたコードは正しいです。
間違っている可能性があると私が考えることができるいくつかのことは次のとおりです。
- あなたの
data
には正しいデータがありません (そこに浮動小数点数はありますか?) - テクスチャが適切にフィルタリングされていません (ミップ レベルが 1 つしか提供されていないため、 必要 ミップマッピングを無効にします)
- テクスチャはサンプラーのテクスチャ ユニットにバインドされていません
u_tex1
(したがって、そこからフェッチしない可能性があります)。 - テクスチャ座標はあなたが思っているものと異なります (そして、クランプ/ラッピング モードによっては、これによりテクセルが白ではなくなる可能性があります)。使用
GL_CLAMP_TO_EDGE
またはGL_REPEAT
テクスチャ境界線と相互作用しないようにするため)
テクスチャリングを機能させない方法はたくさんあります。このリストで正しい方法が見つかることを願っています。
所属していません StackOverflow