用三角形扇形在OpenGLES中绘制多边形



我想用三角形扇形绘制多边形。我得到多边形作为一个数据结构,边的数量跟着一个坐标数组。我发现它应该是这样工作的:

-(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];

这个问题的答案其实很简单。glDrawArrays想要知道顶点的数量,而不是传递给它的值的数量。所以我们不写

glDrawArrays(GL_TRIANGLE_FAN, 0, valueCount); // valueCount = 6 for a triangle

我需要写:

glDrawArrays(GL_TRIANGLE_FAN, 0, count); // count = 3 for a triangle

你得到了错误的类型来绘制正方形和矩形,你需要使用GL_TRIANGLE_STRIP。

使用GL_TRIANGLE_FAN,第一个顶点是您的中心,所有三角形将以中心和最后插入的顶点以及您的实际顶点生成。

最新更新