Нарисуйте полигоны с треугольным веером в OpenGLES - PullRequest
1 голос
/ 17 сентября 2011

Я хочу нарисовать полигоны с треугольным веером.Я получаю полигоны в виде структуры данных со счетчиком количества ребер, за которым следует массив координат.Я понял, что это должно работать примерно так:

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

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Ответ на этот вопрос на самом деле очень прост. glDrawArrays хочет знать количество вершин, а не количество переданных ему значений. Поэтому вместо того, чтобы писать:

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

Мне нужно написать:

glDrawArrays(GL_TRIANGLE_FAN, 0, count); // count = 3 for a triangle
0 голосов
/ 04 ноября 2013

У вас неправильный тип для рисования квадратов и прямоугольников, который вам нужен для пользователя GL_TRIANGLE_STRIP.

С GL_TRIANGLE_FAN первая вершина будет вашим центром, и все треугольники будут сгенерированы с центром, последней вставленной вершиной и вашей фактическойвершина.

...