2011-09-16 114 views
1

我想繪製帶有三角形風扇的多邊形。我將多邊形看作一個數據結構,並計算邊數,然後是一系列座標。我想通了,它應該工作是這樣的:在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]; 

回答

2

的這個問題的答案其實很簡單。 glDrawArrays想知道頂點的數量,而不是交給它的值的數量。因此,而不是寫的:

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

我需要寫:

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

你認錯類型繪製正方形和矩形,你需要用戶GL_TRIANGLE_STRIP。

對於GL_TRIANGLE_FAN,第一個頂點是您的中心,所有三角形將與中心和最後插入的頂點以及您的實際頂點一起生成。