我正在嘗試頂點陣列的東西,但由於某些原因,glDrawElements命令不會爲我繪製任何東西。我可以在兩者之間使用glBegin/glEnd和glDrawElements,但glDrawElements不起作用。這裏有一個代碼片段:OpenGL:glDrawElements不繪製
這些陣列獲取在構造設置:
double points[100];
GLint indices[50];
for (int i=0; i < 50; i++){
points[2*i] = radius * cos(i*2*PI/50);
points[2*i + 1] = radius * sin(i*2*PI/50);
indices[i] = i;
}
工作只用點陣列glArrayElement代碼:
void GLCircle::draw()
{
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_DOUBLE, 0, points);
glBegin(GL_POLYGON);
for (int i=0; i < 50; i++){
glArrayElement(i);
}
glEnd();
}
而且工作代碼,使用點陣列,通過索引數組訪問的特定索引:
void GLCircle::draw()
{
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_DOUBLE, 0, points);
glBegin(GL_POLYGON);
for (int i=0; i < 50; i++){
glArrayElement(indices[i]);
}
glEnd();
}
非工作代碼,試圖使用glDrawElements:
void GLCircle::draw()
{
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_DOUBLE, 0, points);
glDrawElements(GL_POLYGON, 4, GL_INT, indices);
}
有什麼建議嗎?這不是完全必要對我來說,在這一點上使用它,但它是令人不安的是,它不工作...
「第四[指數]參數是一個指向索引的存儲位置。」 NOOOOOO!索引必須存儲在當前綁定到GL_ELEMENT_ARRAY_BUFFER的緩衝區中。第四個參數是indices數組中的偏移指針。 – IceCool 2013-07-22 19:51:37
我在引用官方文檔.. http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml – iKlsR 2013-07-22 19:57:39
哦,是的,對吧。它確實是指向索引存儲位置的指針。但與普通的c指針不同,它不指向系統內存中的數據,而是指向元素緩衝區中的數據(因此0x0是IB中的第一個元素)。 – IceCool 2013-07-24 21:04:00