0

GL_MAX_TEXTURE_IMAGE_UNITSプログラムにテクスチャ ユニットが存在する可能性があることは知っていOpenGLます。しかし、私が1つだけを使用しているとしましょう。5 つの 2D テクスチャがあるとします。それらを単一のテクスチャ ユニット (TEXTURE0) に「マップ」して、すべてをレンダリングできますか。私はこれを行うことを意味します:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex1);
//specify tex data and tex params for tex1

glBindTexture(GL_TEXTURE_2D, tex2);
//specify tex data and tex params for tex1

.. 5 つのテクスチャすべてについて

レンダリング ループ:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex1);
//draw

glBindTexture(GL_TEXTURE_2D, tex2);
//draw

..5 つのテクスチャすべてについて

フラグメント シェーダーでは、ゼロに初期化された sampler2d 変数を 1 つだけ使用しています (テクスチャ ユニット 0 の場合)。

これが正しく機能しない場合は、5 つの異なるテクスチャ ユニット( TEXTURE0, TEXTURE0+1, ....TEXTURE0+5)を使用し、各テクスチャを異なるテクスチャ ユニットに「マップ」する必要があります。

最も重要な質問: 私の最初のアプローチが正しければ、いくつの 2D テクスチャ (ここでは 2D テクスチャについてのみ話しましょう) をテクスチャ ユニットに「マッピング」できますか?

4

2 に答える 2

5

1 つのジオメトリに複数のテクスチャを同時に使用したくない限り、これは完全に可能です。マルチテクスチャリングとテクスチャ ユニットの目的は、オブジェクトごとに異なるテクスチャを保持することではなく、同じオブジェクトで使用されるテクスチャの異なるレイヤーを保持することであるため、実際にはこれが通常のことです。

テクスチャ ユニットは、Photoshop のレイヤーのようなものと考えてください。

于 2013-07-04T08:57:20.287 に答える
2

まあ、OpenGL テクスチャ ユニットを理解しているように:

テキスト ユニットは、シェーダーがサンプリングのためにテクスチャをポイントする方法です。シェーダが複数のテクスチャにアクセスする必要がある場合は、それらを異なるテクスチャ ユニットに分離する必要があります。

あなたの場合、同時に必要なテクスチャは 1 つだけのように見えるため、glActiveTexture は役に立ちません。Opengl でデフォルトの GL_TEXTURE0 をすべて使用しましょう。

はい、レンダー ループは正しいです。

テクスチャ ユニットの制限はいくつですか? 48歳以上で十分!

注: OpenGL はステート マシンであるため、複数のテクスチャを同時に機能するように構成するには、それらを選択する方法が必要です。これは glActiveTexture が行うこととまったく同じです。

お役に立てば幸いです。

于 2013-07-04T08:27:25.923 に答える