Я пытаюсь понять, как визуализировать несколько текстур для разных объектов в 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);
}
Помещение glActive между этой частью или до этой части ничего не меняет. Итак, мой вопрос, как сделать несколько текстур? Должен ли я поставить glActivate в другом месте или мне нужно изменить что-то еще.
Здесь есть некоторое недопонимание, вызовы 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);
}
Других решений пока нет …