2013-05-03 5 views
0

Я знаком с IBO, VBO и VAO, пропуская вершины, uvs и нормали в одном буфере. Хотя бывают случаи, когда их немного сложно комбинировать в одном буфере.OPEN GL: это правильный способ использования VBO IBO и VAO

Поэтому я придумал этот кусок кода:

glGenBuffers(2, &iboID[0]); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iboID[0]); 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, vertInd.size() * sizeof(unsigned int), &vertInd[0], GL_STATIC_DRAW); 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iboID[1]); 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, uvInd.size() * sizeof(unsigned int), &uvInd[0], GL_STATIC_DRAW); 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 

glGenBuffers(2, &vboID[0]); 
glBindBuffer(GL_ARRAY_BUFFER, vboID[0]); 
glBufferData(GL_ARRAY_BUFFER, tempV.size() * sizeof(glm::vec3), &tempV[0], GL_STATIC_DRAW); 

glBindBuffer(GL_ARRAY_BUFFER, vboID[1]); 
glBufferData(GL_ARRAY_BUFFER, tempUV.size() * sizeof(glm::vec2), &tempUV[0], GL_STATIC_DRAW); 

glBindBuffer(GL_ARRAY_BUFFER, 0); 

glGenVertexArrays(1, &vaoID[0]); 
glBindVertexArray(vaoID[0]);  

glBindBuffer(GL_ARRAY_BUFFER, vboID[0]); 
glVertexAttribPointer(_shader->attrib("vert"), 3, GL_FLOAT, GL_FALSE, 0, 0); 
glEnableVertexAttribArray(_shader->attrib("vert")); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iboID[0]); 
outputError(); 
glBindBuffer(GL_ARRAY_BUFFER, vboID[1]); 
glVertexAttribPointer(_shader->attrib("vertTexCoord"), 2, GL_FLOAT, GL_FALSE, 0, 0); 
glEnableVertexAttribArray(_shader->attrib("vertTexCoord")); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iboID[1]); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 
glBindVertexArray(0); 

Так что мой вопрос: Является ли это правильный способ сделать это? (потому что на данный момент я ничего не вижу на экране)

ответ

1

Вы пытаетесь указать различные массивы элементов (в отдельных IBOs), каждый из которых соответствует атрибуту вершины. Это не сработает. Определение отдельных VBO для каждого атрибута является хорошим, но GL может иметь только один массив элементов, индексируя все массивы атрибутов в данный момент.

+0

О, я понял. Спасибо, что разъяснили мне –

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