2017-04-01 3 views
-3

J'ai compris comment faire les morceaux de barre mais mon problème est avec le positionnement du bord inférieur de chaque pièce, je ne peux pas comprendre comment les empiler parfaitement les uns sur les autres , la plupart d'entre eux finissent par être au-dessus de l'autre, ce qui donne l'impression que la barre est mauvaise. voici ma fonction:représente un graphique à barres empilées graphiquement avec openGL en utilisant C++

void StackedBar(void) 
{ 
// Clear the Screen 
glClear(GL_COLOR_BUFFER_BIT); 

float colors[6][3] = { { 1,0,0 },{ 1,1,0 },{ 0,1,0 },{ 0,1,1 },{ 1,0,1 },{0,0,1} }; 
float data[6] = { 20,66,42,28,71,23 }; 
float x = 0, y = 0; 
float dy; 

glBegin(GL_QUADS); 
for (int i = 0; i < 6; i++) { 
    glColor3f(colors[i][0], colors[i][1], colors[i][2]); 
    dy = data[i]; 
    glVertex2f(x, y); 
    glVertex2f(x + 5, y); 
    glVertex2f(x + 5, y + dy); 
    glVertex2f(x, y + dy); 
    y = dy; 
    //x +=5; incremented x just to see how the pieces are positioned 
} 
glEnd(); 

// force execution of GL commands 
glFlush(); 
} 

sortie:

result

result with x incremented with 5 just to see the pieces are positioned

Répondre

0

Si vous souhaitez empiler les barres au-dessus de l'autre, incrémenter juste y à chaque itération par dy.

for (int i = 0; i < 6; i++) { 
    glColor3f(colors[i][0], colors[i][1], colors[i][2]); 
    dy = data[i]; 
    glVertex2f(x, y); 
    glVertex2f(x + 5, y); 
    glVertex2f(x + 5, y + dy); 
    glVertex2f(x, y + dy); 
    y += dy; 
} 
+0

omg je me sens si bête hahah merci beaucoup! – narlingz