2009-10-21 66 views
0

因此,我開始使用openGL,一直遵循Jeff LaMarche's blog上的教程,並且在嘗試使用GL_TRIANGLE_STRIP模式繪製正方形時遇到了問題與glDrawArrays。爲什麼在OpenGL ES 1.1中使用GL_TRIANGLE_STRIP時會出現此畫圖故障

它的工作,我的意思是我可以畫一個正方形,但我得到這個奇怪的繪圖故障。你可以在這裏看到:

Drawing glitch http://img10.imageshack.us/img10/1631/picture1io.png

我如果您使用了由Jeff提供的Xcode的模板,所以我假設的設置都妥當。我使用的drawView函數功能的代碼如下:

Square2D *square = malloc(sizeof(Square2D)); 
Square2DSet(square, -0.25, -0.25, -20.0, 0.5, 0.5); 

glLoadIdentity(); 
glClearColor(0.7, 0.7, 0.7, 1.0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glEnableClientState(GL_VERTEX_ARRAY); 
glColor4f(1.0, 0.0, 0.0, 1.0); 
glVertexPointer(3, GL_FLOAT, 0, square); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 12); 
glDisableClientState(GL_VERTEX_ARRAY); 

if(square != NULL) 
    free(square); 

這裏是爲Square2d和Square2DSet代碼:我敢肯定,我做錯了什麼,只是不知道

typedef struct { 
    Vertex3D tl; 
    Vertex3D bl; 
    Vertex3D tr; 
    Vertex3D br; 
} Square2D; 

static inline void Square2DSet(Square2D *sq, GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height) 
{ 
    sq->tl = Vertex3DMake(x, y, z); 
    sq->bl = Vertex3DMake(x, y + height, z); 
    sq->tr = Vertex3DMake(x + width, y, z); 
    sq->br = Vertex3DMake(x + width, y + height, z); 
} 

什麼。程序運行一段時間後,最終故障將消失。

任何想法?

乾杯

+0

如果將after改爲另外一種,會發生什麼? [例如:是否有另一種意外畫出的形狀?] – 2009-10-21 04:51:18

+0

Err,...將*顏色*更改爲... – 2009-10-21 04:52:00

回答

2

(4,8 GL_TRIANGLE_STRIP,0,12);

正在繪製12個頂點。你想要4.它詢問多少指數,而不是看多少值。它會將索引乘以每個索引值的數量。

它發瘋的原因是因爲它的繪畫垃圾,然後它消失,因爲我認爲垃圾被0填充或什麼東西,它就會消失。

+0

bahh !!!我需要RTFM。感謝kidnamedlox。 – Meroon 2009-10-21 04:58:22

相關問題