0

OpenGL でさまざまなオブジェクトの複数のテクスチャをレンダリングする方法を理解しようとしています。glActivate が適切なテクスチャを選択するために使用されていることを知っている限り、単純に試してみることにしましたが、期待どおりに機能しません。私のコードでは、2 つのオブジェクトが (順番に) 表示されていますが、テクスチャは同じです。これは、コードのテクスチャ初期化部分です。

bool (some args, unsigned int textureUnit, bool wrap)
{
    // some code

    OpenGL->glActiveTexture (GL_TEXTURE0 + textureUnit);
    glGenTextures (1, &textureID);
    glBindTexture (GL_TEXTURE_2D, textureID);
    glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, targaImage);

    if (wrap) {
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    } 
    else {
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
    }

    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    OpenGL->glGenerateMipmap (GL_TEXTURE_2D);
}

textureUnit は、最初のテクスチャでは 0 で、2 番目のテクスチャでは 1 です。モデル レンダリング コード:

{
    OpenGL->glBindVertexArray (vertexArrayId);
    glDrawElements (GL_TRIANGLES, indexCount, GL_UNSIGNED_INT, 0);
}

その部分の間、またはその部分の前に glActive を配置しても、何も変わりません。私の質問は、複数のテクスチャをレンダリングする方法ですか? glActivate を別の場所に配置する必要がありますか、それとも何か他のものを変更する必要がありますか。

4

1 に答える 1

1

ここには誤解があります。glActiveTexture 呼び出しは、同じオブジェクトを描画するときに複数のテクスチャを管理するためのものです。異なるオブジェクトに対して、異なるテクスチャをバインドするだけです。テクスチャを設定するときに ActiveTexture への呼び出しを削除するだけです (または、描画中は常に 0 になっていることを確認してください)。次に、描画するとき:

{
    OpenGL->glBindVertexArray (vertexArrayId);
    glBindTexture(GL_TEXTURE_2D, textureID);     /* this has to be set somehow */
    glDrawElements (GL_TRIANGLES, indexCount, GL_UNSIGNED_INT, 0);
} 
于 2014-03-22T12:00:49.967 に答える