0

私はGLSLでテクスチャを扱っています。GLSL で 2 つのテクスチャを処理するにはどうすればよいですか? ある人は、GLSL で 2 つの samplers2D を実行するように勧めてくれました...しかし、GLSL はどの samplers2D を使用する必要があるかをどのように知ることができますか? (テクスチャの混合について話しているわけではありません...)

glBindTexture を使うべきだと聞きました。これどうやってするの?glBindTextureで?誰にもこの例がありますか?

OpenGL 3.3


編集:

私はこれを持っています:

uniform Sampler2D texture1;
uniform Sampler2D texture2;

テクスチャを使用して 2 つのオブジェクトを描画する必要があるため、GLSL は、描画するオブジェクトに応じて texture1 または texture2 を使用する必要があるかどうかをどのように知ることができますか。それが私の質問です。

4

1 に答える 1

2

各テクスチャを異なるテクスチャ ユニットにバインドしてから、マルチテクスチャ 座標を使用する必要があります。次のようになります (既にテクスチャがあると仮定します)。

glActiveTexture (GL_TEXTURE0);  // First texture is going into texture unit 0
glBindTexture (GL_TEXTURE_2D, tex0);
glEnable (GL_TEXTURE_2D);

glActiveTexture (GL_TEXTURE1);  // Second texture is going into texture unit 1
glBindTexture (GL_TEXTURE2D, tex1);
glEnable (GL_TEXTURE_2D);

glUseProgram (yourGLSLProgramID);
glUniform1i (sampler1Location, 0); // tell glsl that sampler 1 is sampling the texture in texture unit 0
glUniform1i (sampler2Location, 1); // tell glsl that sampler 2 is sampling the texture in texture unit 1
///... set the rest of your uniforms...

glBegin (GL_QUADS);
    glMultiTexCoord2f(GL_TEXTURE0, 0.0, 0.0);
    glMultiTexCoord2f(GL_TEXTURE1, 0.0, 0.0);
    glVertexCoord2f(0.0, 0.0);

    glMultiTexCoord2f(GL_TEXTURE0, 1.0, 0.0);
    glMultiTexCoord2f(GL_TEXTURE1, 1.0, 0.0);
    glVertexCoord2f(width, 0.0);

    glMultiTexCoord2f(GL_TEXTURE0, 1.0, 1.0);
    glMultiTexCoord2f(GL_TEXTURE1, 1.0, 1.0);
    glVertexCoord2f(width, height);

    glMultiTexCoord2f(GL_TEXTURE0, 0.0, 1.0);
    glMultiTexCoord2f(GL_TEXTURE1, 0.0, 1.0);
    glVertexCoord2f(0.0, height);
glEnd();
于 2012-12-01T16:24:41.200 に答える