web-dev-qa-db-ja.com

OpenGLのglActiveTextureとGL_TEXTURE0の機能は何ですか?

glActiveTextureが必要な理由を理解する方法を見つけています。私は以下のコードを持っています:

glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);

GL_TEXTURE_2Dが壁に掛かっている写真のフレームであり、textureIdが実際の写真であると想像すると、glBindTextureは実際の写真をフレームに割り当てるための唯一のコマンドです。では、GL_TEXTURE0glActiveTextureとは何ですか?

以下のコードは正常に機能しますか?

glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);

glActiveTexture(GL_TEXTURE1);
glTexImage2D(GL_TEXTURE_2D, .....)
glTexParameteri(GL_TEXTURE_2D, ...)

私は現在OpenGL2.1を使用しています。

23
Bình Nguyên

GL_TEXTURE_2Dが壁に掛かっている画像のフレームであり、textureIdが実際の画像であると想像すると、

実際には非常に良い例えです:)

では、GL_TEXTURE0とglActiveTextureは何ですか?

複数の額縁があり、最初のフレームにはGL_TEXTURE0、2番目のフレームにはGL_TEXTURE1というラベルが付いている壁について考えてみます。

28
datenwolf

OpenGLは、ある時点でマルチテクスチャリングを導入しました(これは基本的に1つのジオメトリパスで複数のテクスチャを使用);古いコードを機能させ続けるために、すべての関数にパラメーターを追加するだけでは不十分でした。そのため、アドレス指定するテクスチャユニットを明示的に指定する必要があります。

17