Я пытаюсь отобразить UV-карту модели, обрабатывая ее координаты текстуры как массив вершинных позиций. Я установил VAO для модели, которая отлично выглядит, а затем попыталась добавить второй VAO и привязать к нему буфер координат текстуры. К сожалению, это ничего не делает.Может ли VBO быть привязанным к нескольким VAO?
Я написал второй набор вершинных и фрагментарных шейдеров для УФ-карты, которые компилируются просто отлично. Буфер связан так же, как и с набором моделей VAO и набором вершин. Единственное различие, которое я вижу, это не повторное указание данных буфера.
Это мой код для настройки модели ВАО:
// Create model VAO
glGenVertexArrays(1, &modelVAO);
glBindVertexArray(modelVAO);
// Create position buffer
glGenBuffers(1, &positionBuffer);
glBindBuffer(GL_ARRAY_BUFFER, positionBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * vertexCount * 4, positions, GL_STATIC_DRAW);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
// Create normal buffer
glGenBuffers(1, &normalBuffer);
glBindBuffer(GL_ARRAY_BUFFER, normalBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * vertexCount * 3, normals, GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(1);
// Create texture coordinate buffer
glGenBuffers(1, &textureCoordinateBuffer);
glBindBuffer(GL_ARRAY_BUFFER, textureCoordinateBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * vertexCount * 2, textureCoordinates, GL_DYNAMIC_DRAW);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(2);
// Unbind model VAO
glBindVertexArray(0);
Затем я создал UV карту ВАО так:
// Create new UV map VAO
glGenVertexArrays(1, &uvMapVAO);
glBindVertexArray(uvMapVAO);
// Bind texture coordinate buffer
glBindBuffer(GL_ARRAY_BUFFER, textureCoordinateBuffer);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
// Unbind UV map VAO
glBindVertexArray(0);
Можно ли использовать один и тот же VBO с более чем одно ВАО?
Это было мое мышление тоже. Ошибок, возвращаемых из 'glGetError', также не возникает, поэтому проблема должна быть в другом месте. – PeddleSpam