为什么在OpenGL ES 1.1中使用GL_TRIANGLE_STRIP会发生此绘图故障

时间:2009-10-21 04:47:10

标签: iphone opengl-es

所以我开始使用openGL,一直在Jeff LaMarche's blog上学习教程,并且在尝试使用带有glDrawArrays的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);
}

我确定我做错了什么,只是不确定是什么。最终,程序运行一段时间后,故障就会消失。

有什么想法吗?

干杯

1 个答案:

答案 0 :(得分:2)

glDrawArrays(GL_TRIANGLE_STRIP,0,12);

正在绘制12个顶点。你想要4.它询问有多少指数,而不是要看多少价值。它会将索引乘以每个索引的值数。

它疯狂的原因是因为它的绘制垃圾,然后它消失了,因为我认为垃圾填满了0或其他东西,它就会消失。