私はWebGLのnoobです。このチュートリアルを読むことによってWebGLテクスチャの仕組みを理解しようとしています:WebGL Image Processing Continuedフラグメントシェーダの読み込みと書き込みのテクスチャを設定するにはどうすればよいですか?
別exampleは、入力テクスチャユニット0と明示1の両方にuniform
Sを設定することにより、2つのテクスチャを使用している同じチュートリアルセリエであり:
// set which texture units to render with.
gl.uniform1i(u_image0Location, 0); // texture unit 0
gl.uniform1i(u_image1Location, 1); // texture unit 1
しかし、最初の例では、フラグメントシェーダであります入力テクスチャ用sampler2D u_image
を使用して、私はそこにコードでのようなものでなければなら期待:
gl.uniform1i(gl.getUniformLocation(program, "u_image"), 0);
...しかし、私はそれを見つけることができません。 これはどのように機能しますか?ちょうど推測:テクスチャユニット0は、すべてのWebGLプログラムのすべての2Dサンプラのデフォルトとして使用されていますか?次に、2番目の例ではgl.uniform1i(u_image0Location, 0);
が必要ですか?
EDIT:
これまでのところ、私は上記のチュートリアルから理解して持っているもの - 私が間違っている場合は、単に私を修正:
-
:
- 入力テクスチャ、ここでは から読み取ることができます。フラグメントシェーダに位置(つまり「u_image」)を渡す必要があります
- 出力テクスチャ、ここに書き込むことができます - thisテクスチャが現在
はテクスチャを使用するには少なくとも2つの方法があります
(テクスチャユニット0に、上記のチュートリアルで)バインドされている私は完全にu_image
均一が設定され、しかもコードで「そこにISNされていないため、この例では、どのように動作するかを理解することはできませんよトン任意のgl.activeTexture()
コール
EDIT 2:
Rabbid76のおかげで、私はそのquestionにgmanのコメント(上記のチュートリアルの著者)in this answerのさらなる明確化を発見したと信じて:
フレームバッファが必要です。テクスチャをフレームバッファに添付して をフレームバッファにバインドすると、シェーダは テクスチャに書き込みます。私から読み取ることができる
@ Rabbid76:THX、参照先の例では、描画先のテクスチャは以下のようにバインドされています: 'gl.bindTexture(gl.TEXTURE_2D、texture [ii%2]);'現在のテクスチャユニットは常に0そして決して変更されません、私の疑問は、入力テクスチャがどのように働くかです... – deblocker
@dedblocker "私の疑問は入力テクスチャがどのように動作するのですか"とはどういう意味ですか? – Rabbid76
@ Rabbid76:編集済みの質問 – deblocker