2017-08-06 1 views
1

私は、異なるイメージデータを持つ3つの異なるテクスチャオブジェクトを持っているとしましょう。これらの3つのテクスチャオブジェクトは、すべてテクスチャユニット0にバインドされています。テクスチャの理解

私のシーンには3つのモデルがあり、それぞれはこれらのテクスチャの1つを使用します。

私のフラグメントシェーダでは、私はsampler2D変数を持っています。また、すべてのモデルでレンダリングに同じシェーダープログラムが使用されます。今

I行う順序で次の操作

  1. バインドテクスチャオブジェクト1
  2. レンダリングモデル1

  3. バインドテクスチャオブジェクト2

  4. レンダリングモデル2

  5. バインドテクスチャオブジェクト3

  6. お願いしたいと思いますされてどのようなモデル3

をレンダリングは、これはあなたが異なるテクスチャと異なるモデルをテクスチャの方法であるとフラグメントシェーダでのサンプラーは、現在バインドされたテクスチャからデータを読み込むん。テクスチャが別のテクスチャユニットにバインドされている場合はどうなりますか?そのためには別のサンプラが必要ですか?

答えて

2

サンプラは、現在設定されているテクスチャユニットのテクスチャユニットから読み込みます。デフォルトのアクティブなテクスチャユニットはユニット0でサンプラのデフォルト値も0なので、サンプラまたはアクティブなテクスチャユニットを変更しない限り、コードは機能するはずです。

テクスチャを別のテクスチャユニットにバインドする場合は、アクティブテクスチャユニット(glActiveTexture)がサンプラ(glUniform1i)に設定されている値と一致していることを確認する必要があります。たとえば、テクスチャをGL_TEXTURE2にバインドする場合は、サンプラをglUniform1i(sampler_location, 2)に設定する必要があります。