0

32 ビットの float データをシェーダーに送信しようとしていますが、結果が不安定です。完全な白 (1,1,1,1) でテストすると、値はすべてゼロになります。これはテクスチャを作成するための私のコードです:

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 テクスチャから読み取る正しい方法ですか、それとも何か不足していますか?

4

1 に答える 1

0

あなたがしたことについて多くの情報を提供していません<ただし、表示するコードは正しいです。

私が考えることができるいくつかのことは間違っているかもしれません:

  • あなたdataには正しいデータがありません(そこにフロートがありますか?)
  • テクスチャが適切にフィルタリングされていません (ミップ レベルが 1 つしかないため、ミップマッピングを無効にする必要があります)
  • テクスチャはサンプラーのテクスチャ ユニットにバインドされていませu_tex1ん (そのため、そこからフェッチしていない可能性があります)。
  • あなたのテクスチャ座標は、あなたが思っているものではありません (そして、クランプ/ラッピング モードによっては、テクセルが白ではない可能性があります。使用するGL_CLAMP_TO_EDGEGL_REPEAT、テクスチャ境界と相互作用しないでください) 。

テクスチャリングが機能しない方法はたくさんあります。このリストで正しい方法を見つけられることを願っています!

于 2009-12-22T13:21:52.783 に答える