2010-03-28 49 views
2

我做了以下內容:損壞的圖像,如果變量不是靜態的

static GLfloat vertices[3][3] = 
{  
    {0.0, 1.0, 0.0}, 
    {1.0, 0.0, 0.0}, 
    {-1.0, 0.0, 0.0} 
}; 

glColor4ub(255, 0, 0, 255); 
glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
glDrawArrays(GL_TRIANGLES, 0, 9); 
glDisableClientState(GL_VERTEX_ARRAY); 

該工程確定:

http://dl.dropbox.com/u/41764/posts/Screen%20shot%202010-03-28%20at%2020.04.56.png

但是,如果我從頂點刪除static,因此重新創建在每個渲染上的堆棧上的數據,我得到以下內容:

http://dl.dropbox.com/u/41764/posts/Screen%20shot%202010-03-28%20at%2020.06.38.png

這在模擬器和設備上都會發生。

我打電話給glDrawArrays後應該保持變量嗎?

回答

3

你看到奇怪的結果的原因是因爲你沒有繪製你的想法。

glDrawArrays(GL_TRIANGLES, 0, 9); 

這意味着繪製9個頂點,因此繪製3個三角形。你只有3個頂點在你的數組中聲明,所以其他兩個三角形最終會成爲別人的猜測。你可以在第二張圖中看到你確實有超過1個三角形......它最終使用的數據是當時堆棧中的任何其他數據。

glDrawArrays確實轉移了通話,而我認真懷疑iPhone不會符合這一點。這是真正的基本GL,(我相信)已經通過了一致性測試。

+0

當然,你是對的。不明白這一點的道歉。如果可以的話,我會刪除我的答案(但它仍然是公認的答案)。 – 2010-03-28 20:04:18

+0

Gah!什麼是紅鯡魚。謝謝。 – 2010-03-28 20:20:17

1

您正在渲染未初始化的數據均爲個案。它恰好在static的情況下看起來正確。

的第三個參數glDrawArrays頂點(這應該是你的情況3因爲你想畫一個三角形)的數量。

您已經告訴GL您指定每個頂點3 GLfloatglVertexPointer的第一個參數)。因此GL可以計算預期的GLfloat總數。

這應該工作:

GLfloat vertices[3][3] = 
{  
    {0.0, 1.0, 0.0}, 
    {1.0, 0.0, 0.0}, 
    {-1.0, 0.0, 0.0} 
}; 

glColor4ub(255, 0, 0, 255); 
glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
glDrawArrays(GL_TRIANGLES, 0, 3); 
glDisableClientState(GL_VERTEX_ARRAY);