【问题标题】:Draw Polygons with Triangle Fan in OpenGLES在 OpenGLES 中使用三角形扇形绘制多边形
【发布时间】:2013-11-04 07:20:31
【问题描述】:

我想用三角扇画多边形。我将多边形作为一个数据结构,计算边数,后跟坐标数组。我发现它应该像这样工作:

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

【问题讨论】:

    标签: objective-c ios opengl-es


    【解决方案1】:

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

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

    我需要写:

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

    【讨论】:

      【解决方案2】:

      您使用 GL_TRIANGLE_STRIP 绘制正方形和矩形的类型有误。

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

      【讨论】:

        猜你喜欢
        • 2016-03-25
        • 2017-04-17
        • 2011-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-26
        • 1970-01-01
        相关资源
        最近更新 更多