2010-10-02 85 views
1

我無法弄清楚如何讓glDrawElements不連接它借鑑一切......glDrawElements繪製的所有對象連接

//Draw Reds 
glEnableVertexAttribArray(vLoc); 
glEnableVertexAttribArray(cLoc); 

glBindBuffer(GL_ARRAY_BUFFER,positionBufferRed); 
glVertexAttribPointer(vLoc,3,GL_FLOAT,GL_FALSE,0,0); 

glBindBuffer(GL_ARRAY_BUFFER,redBuffer); 
glVertexAttribPointer(cLoc,3,GL_FLOAT,GL_FALSE,0,0); 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,elementBufferRed); 
glDrawElements(GL_TRIANGLES,nElements*3,GL_UNSIGNED_INT,0); 

glDisableVertexAttribArray(vLoc); 
glDisableVertexAttribArray(cLoc); 


//Draw Blues 
glEnableVertexAttribArray(vLoc); 
glEnableVertexAttribArray(cLoc); 

glBindBuffer(GL_ARRAY_BUFFER,positionBufferBlue); 
glVertexAttribPointer(vLoc,3,GL_FLOAT,GL_FALSE,0,0); 

glBindBuffer(GL_ARRAY_BUFFER,blueBuffer); 
glVertexAttribPointer(cLoc,3,GL_FLOAT,GL_FALSE,0,0); 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,elementBufferBlue); 
glDrawElements(GL_TRIANGLES,nElements*3,GL_UNSIGNED_INT,0); 

glDisableVertexAttribArray(vLoc); 
glDisableVertexAttribArray(cLoc); 

這是什麼結果如下: http://img338.imageshack.us/img338/2440/cows.png

應兩個獨立的奶牛,但他們與黑線連接。任何建議將被認真考慮!

+0

是'nElements'三角形數量或角的數量? – 2010-10-03 16:18:50

回答

0

我的猜測是你試圖繪製的元素數量是錯誤的(太大)。因此GPU會嘗試獲取緩衝區中不存在的三角形,並意外地訪問下一個網格的頂點,但不會訪問顏色(黑色)。

嘗試使用glDrawElements(GL_TRIANGLES,nElements,GL_UNSIGNED_INT,0);

如果不起作用,請嘗試使用手寫的單個三角形。

下面是一個例子:

GLsizei const TonemapperElementCount = 3; 
GLsizeiptr const TonemapperElementSize = TonemapperElementCount * sizeof(glm::uint32); 
glm::uint32 const TonemapperElementData[TonemapperElementCount] = 
{ 
    0, 1, 2, 
}; 

GLsizei const TonemapperVertexCount = 3; 
GLsizeiptr const TonemapperPositionSize = TonemapperVertexCount * sizeof(glm::vec4); 
glm::vec4 const TonemapperPositionData[TonemapperVertexCount] = 
{ // A full-screen triangle in normalized screen space. 
    glm::vec4(-1.0f, -1.0f,0,1), 
    glm::vec4(3.0f, -1.0f ,0,1), 
    glm::vec4(-1.0f, 3.0f ,0,1), 
};