2011-03-14 29 views
2

我要画一个圆,这将有(内​​)与彩虹的颜色三角形风扇(每个三角形将举行6种颜色之一)OpenGL的三角形球迷用不同的颜色

这里是我的代码:

void display() { 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

     glBegin(GL_LINES); //drawing circle 
    int j; 
    for (j = 0; j < 180; j++) 
    { 
    circle.x = r * cos(j); 
    circle.y = r * sin(j); 
    glVertex3f(circle.x ,circle.y ,0); 
    circle.x = r * cos(j + 0.1); 
    circle.y = r * sin(j + 0.1); 
    glVertex3f(circle.x,circle.y,0); 
    } 
    glEnd(); 

     int i,k; 
     int sections = 36; 
     GLfloat radius = 1.0; 
     GLfloat twoPi = 2.0 * 3.14159; 

     glBegin(GL_TRIANGLE_FAN); 

       glVertex2f(0.0, 0.0); //center of triangles 
       int flag=1; 

       for(i = 0; i <= sections;i++) { 

         glVertex2f(radius*cos(i*twoPi/sections), 
           radius*sin(i*twoPi/sections)); 

       if(flag==i+1) 
         glColor3f(1.0f, 0.0f, 0.0f); 

       if (flag==i+2) 
         glColor3f(1.0f, 0.5f, 0.0f); 

       if (flag==i+3) 
         glColor3f(1.0f, 1.0f, 0.0f); 

       if (flag==i+4) 
         glColor3f(0.0f, 1.0f, 0.0f); 

       if (flag==i+5) 
         glColor3f(0.0f, 0.0f, 1.0f); 

       if (flag==i+6) 
         glColor3f(1.0f, 0.0f, 1.0f); 

        flag++; 

       } 

     glEnd(); 
     glutSwapBuffers(); 
} 

我无法使颜色工作。三角形只用最后一种颜色绘制。

回答

2

摆脱标志变量,你想要的是mod运算符'%'。

以下为我工作:

{ 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glBegin(GL_LINES); //drawing circle 
GLfloat x=0.0f, y=0.0f, r=1.0f; 
int j; 
for (j = 0; j < 180; j++) 
{ 
    x = r * cos(j); 
    y = r * sin(j); 
    glVertex3f(x ,y ,0); 
    x = r * cos(j + 0.1); 
    y = r * sin(j + 0.1); 
    glVertex3f(x,y,0); 
} 
glEnd(); 

int i; 
int sections = 36; 
GLfloat radius = 1.0; 
GLfloat twoPi = 2.0 * 3.14159; 

glBegin(GL_TRIANGLE_FAN); 

glVertex2f(0.0, 0.0); //center of triangles 

for(i = 0; i <= sections;i++) { 

    glVertex2f(radius*cos(i*twoPi/sections), 
       radius*sin(i*twoPi/sections)); 

    if(i%6 == 0) 
     glColor3f(1.0f, 0.0f, 0.0f); 

    if (i%6 == 1) 
     glColor3f(1.0f, 0.5f, 0.0f); 

    if (i%6 == 2) 
     glColor3f(1.0f, 1.0f, 0.0f); 

    if (i%6 == 3) 
     glColor3f(0.0f, 1.0f, 0.0f); 

    if (i%6 == 4) 
     glColor3f(0.0f, 0.0f, 1.0f); 

    if (i%6 == 5) 
     glColor3f(1.0f, 0.0f, 1.0f); 
} 

glEnd(); 

glFlush(); 

}

+0

您好,感谢它的工作! – George 2011-03-14 15:06:33

+0

现在你应该弄清楚它的工作原理。 – Mark 2011-03-14 15:14:55

+0

它的工作原理是因为在每一个循环中,这些条件中的一个是正确的。而且,条件也是按照这个顺序。但是我不明白为什么它以前没有工作。 – George 2011-03-14 15:31:41

相关问题