графическое представление гистограммы с накоплением с использованием OpenGL с использованием переполнения стека

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

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();
}

выход:

результат

результат с х, увеличенным на 5, чтобы увидеть, что части расположены

-3

Решение

Если вы хотите расположить столбцы друг над другом, просто увеличивайте y в каждой итерации на 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]