2014-09-05 129 views
0

我有一個IBO的VBO,我想渲染例如第二個三角形,然後在下一個渲染步驟中,我想渲染第三個三角形。OpenGL渲染只是VBO的一部分

我想呈現第二個三角形IST正確的方法來調用

glDrawArrays(GL_TRIANGLES, 
      3, // indexArray[3] is start 
      3); // take 3 indices (from index 3..5 --> second triangle) 

它正常工作與第一個三角形。但是當我想渲染另一個三角形時,VBO的參數將被錯誤地解釋。

我VAO的定義是這樣的

glGenVertexArrays(1, out VAO); 
glBindVertexArray(VAO); 
glBindBuffer(GL_ARRAY_BUFFER, VBO.V_ID); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, VBO.E_ID); 

glEnableVertexAttribArray(0); 
glVertexAttribPointer(0, 2, GL_FLOAT, false, 12 * sizeof(float), 0); 
glBindAttribLocation(shaderID, 0, "InUV"); 
glEnableVertexAttribArray(1); 
glVertexAttribPointer(1, 4, GL_FLOAT, true, 12 * sizeof(float), 2 * sizeof(float)); 
glBindAttribLocation(shaderID, 1, "InColor"); 
glEnableVertexAttribArray(2); 
glVertexAttribPointer(2, 3, GL_FLOAT, true, 12 * sizeof(float), 6 * sizeof(float)); 
glBindAttribLocation(shaderID, 2, "InNormal"); 
glEnableVertexAttribArray(3); 
glVertexAttribPointer(3, 3, GL_FLOAT, false, 12 * sizeof(float), 9 * sizeof(float)); 
glBindAttribLocation(shaderID, 3, "InVertex"); 

glBindVertexArray(0); 

當我打電話

glDrawElements(GL_TRIANGLES, VBO.length, GL_UNSIGNED_INT, 0); 

對象將正確呈現。

我用錯誤的方式使用glDrawArrays還是有另一種方法來渲染一個VBO的特殊三角形?

回答

3

glDrawElementsglDrawArrays是不同的,glDrawArrays會忽略索引緩衝區

,而不是你應該做的:

usigned int *NULLptr=0; 
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, (void*)(NULLptr+3)); 

注意指定的偏移量,你也可以用做替代(void*)(3*sizeof(unsigned int))