Как сделать несколько текстур?

Я пытаюсь понять, как визуализировать несколько текстур для разных объектов в 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 в другом месте или мне нужно изменить что-то еще.

0

Решение

Здесь есть некоторое недопонимание, вызовы 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);
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]