4
我試圖通過將紋理座標視爲頂點位置數組來渲染模型的UV貼圖。我爲完美呈現的模型設置了VAO,然後嘗試添加第二個VAO並將紋理座標緩衝區綁定到它。不幸的是它沒有渲染任何東西。VBO可以綁定到多個VAO嗎?
我已經寫了第二套頂點和片段着色器的紫外線地圖編譯得很好。緩衝區的綁定方式與模型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貼圖VAO是這樣的:
// 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更多比這樣的一個VAO?
這也是我的想法。 'glGetError'也沒有返回任何錯誤,所以它一定是其他地方的問題。 – PeddleSpam 2013-03-15 18:29:22