所以我开始使用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);
}
我确定我做错了什么,只是不确定是什么。最终,程序运行一段时间后,故障就会消失。
有什么想法吗?
干杯
答案 0 :(得分:2)
glDrawArrays(GL_TRIANGLE_STRIP,0,12);
正在绘制12个顶点。你想要4.它询问有多少指数,而不是要看多少价值。它会将索引乘以每个索引的值数。
它疯狂的原因是因为它的绘制垃圾,然后它消失了,因为我认为垃圾填满了0或其他东西,它就会消失。