35

でテクスチャの例を読みましたOpenGL 2.1。フラグメント シェーダーは次のようになります。

#version 120

uniform sampler2D texture;
varying vec2 texcoord;

void main(void)
{
    gl_FragColor = texture2D(texture, texcoord);
}

texcoord頂点シェーダーから渡されます。

次の C++ レンダリング コードが使用されます。

void render()
{
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texture_id);
    glUniform1i(unf_texture, 0);
}

私はいくつかのことについて混乱しています。質問があります:

  1. フラグメント シェーダーでは、テクスチャにゼロ値が渡されます (によってglUniform1i())。値は本当にゼロですか?値は別のものですか?

  2. glActiveTexture()電話は本当に必要ですか?

  3. にゼロ値を渡すのはなぜglUniform1i()ですか?

4

1 に答える 1

38

テクスチャ ユニットsampler2Dにバインドされます。呼び出しは、それをテクスチャ ユニット ゼロにバインドします。この呼び出しは、複数のテクスチャ ユニットを使用する場合にのみ必要です (いずれにしても がデフォルトであるため)。glUniformglActiveTexture()GL_TEXTURE0

于 2012-06-03T09:12:33.233 に答える