2013-03-15 2 views
4

Я пытаюсь отобразить 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 с более чем одно ВАО?

ответ

6

Yes. VAO просто хранят ссылки на VBOs с соответствующими данными для формата, смещения и т. Д., Как указано glVertexAttribPointer. Index VBOs имеют немного другую семантику.

+0

Это было мое мышление тоже. Ошибок, возвращаемых из 'glGetError', также не возникает, поэтому проблема должна быть в другом месте. – PeddleSpam

Смежные вопросы