我试图了解如何在OpenGL中为不同的对象渲染多个纹理。我决定尝试一下,只要我知道glActivate用于选择正确的纹理,但它并没有像我预期的那样工作。在我的代码中,显示了两个对象(轮流),但它们具有相同的纹理。这是代码的纹理初始化部分:
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,第二个纹理为1。模型渲染代码:
{
OpenGL->glBindVertexArray (vertexArrayId);
glDrawElements (GL_TRIANGLES, indexCount, GL_UNSIGNED_INT, 0);
}
在该部分之间,或在该部分之前没有改变一件事之前。所以我的问题是,如何渲染多个纹理?我应该把glActivate放在其他地方还是我需要改变别的东西。
答案 0 :(得分:2)
这里存在一些误解,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);
}