我想用三角形扇形绘制多边形。我将多边形作为一个数据结构,其中边数的数量后跟一个坐标数组。我发现它应该是这样的:
-(void) fillarea:(int16_t) count vertices:(int16_t*) pxyarray {
int valueCount = count*2;
GLfloat vertexBuffer[valueCount];
for (int i=0; i<valueCount; i++) {
vertexBuffer[i] = pxyarray[i];
}
glVertexPointer(2, GL_FLOAT, 0, vertexBuffer);
glDrawArrays(GL_TRIANGLE_FAN, 0, valueCount);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
它似乎与三角形完美配合,但是一旦我使用具有更多边(正方形,五边形......)的多边形,它们都会在0,0处向原点绘制另一个三角形。有人可以向我解释这里发生了什么。
如果它有助于我定义的多边形的一些例子用这种方法绘制:
int16_t verticesTriangle[6] = {50,50,100,50,100,100};
[self fillarea:3 vertices:verticesTriangle];
int16_t verticesSquare[8] = {100,100,150,100,150,150,100,150};
[self fillarea:4 vertices:verticesSquare];
int16_t vertices5[10] = {150,50,175,25,200,50,200,100,150,100};
[self fillarea:5 vertices:vertices5];
int16_t vertices6[12] = {250,50,275,25,300,50,300,75,275,100,250,75};
[self fillarea:6 vertices:vertices6];
答案 0 :(得分:2)
问题的答案实际上非常简单。 glDrawArrays想要知道顶点的数量而不是移交给它的值的数量。所以不要写:
glDrawArrays(GL_TRIANGLE_FAN, 0, valueCount); // valueCount = 6 for a triangle
我需要写:
glDrawArrays(GL_TRIANGLE_FAN, 0, count); // count = 3 for a triangle
答案 1 :(得分:0)
你得到错误的类型绘制正方形和矩形你需要使用GL_TRIANGLE_STRIP。
使用GL_TRIANGLE_FAN时,第一个Vertex是您的中心,所有三角形都将生成中心和最后插入的顶点以及您的实际顶点。