OpenGL でテクスチャ配列を使う

OpenGLでもテクスチャ配列が使用可能になっています。以前DirectX10のテクスチャ配列を使うには、という項目で記事を書いたのですが、あれっきりOpenGLではどうやるのかを放置してしまいました。今回は OpenGL でテクスチャ配列を使うコードを説明したいと思います。

結果

4つの2Dテクスチャをテクスチャ配列としてセットして、UV値によって参照先を変更しています。

gl_texture_array

説明(GLSL)

GLSLのシェーダーはこのようなものを使用しています。texture2D( tex, uv ) で参照していた箇所が、どのテクスチャから参照するかを指定するため、3次元目にそのインデックスを格納したパラメータでサンプルするようになっています。

説明(C++)

C++側では、従来の GL_TEXTURE_2D を指定した部分が GL_TEXTURE_2D_ARRAY を設定するようになりました。
またサンプラーオブジェクトも併用可能です。1つ違う点は2Dのテクスチャ配列は、データの転送時には glTexImage3D 関数を用いる必要があるというところです。配列になった分、1次元上のデータ転送関数が必要っぽいです。
 当然ながら、配列間での画像イメージでの補間はできないようです。やりたければシェーダーで個別にサンプルしてブレンドすることが必要となります。(このような補間をしたい場合には3Dテクスチャを使えってことでしょう)

最初のサンプル画像では4つの画像イメージを GL_TEXTURE_2D_ARRAY の1つのオブジェクト内にいれてみました。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする