Обновление графика с помощью C++ и GLUT



Я написал программу на языке c++ в Xcode для реализации символьной регрессии и генетического программирования. Я хотел бы создать окно для визуализации справочных данных (массив 2d точек) и лучшей функции, которую программа генерирует каждое поколение.



Проще говоря, я хотел бы, чтобы окно показывало 2 графика и обновлялось циклом for. Насколько я понимаю, GLUT кажется хорошим фреймворком, и я написал функцию для отображения справочных данных (std:: vector is how Я сохраняю переменную" referenceDataSet"):



void renderScene(){
// The min/max variables are just for scaling & centering the graph
double minX, maxX, minY, maxY;
minX = referenceDataSet[0].first;
maxX = referenceDataSet[0].first;
minY = referenceDataSet[0].second;
maxY = referenceDataSet[0].second;
for (int i = 0; i < referenceDataSet.size(); i++) {
minX = min(minX, referenceDataSet[i].first);
maxX = max(maxX, referenceDataSet[i].first);
minY = min(minY, referenceDataSet[i].second);
maxY = max(maxY, referenceDataSet[i].second);
}
glLoadIdentity ();
glClear(GL_COLOR_BUFFER_BIT);
glBegin( GL_LINE_STRIP );
glColor4f( 1.0, 0.0, 0.0, 1.0);
for (int i = 0; i < referenceDataSet.size(); i++) {
glVertex2f((referenceDataSet[i].first-minX)/(maxX-minX)-0.5, (referenceDataSet[i].second-minY)/(maxY-minY)-0.5);
}
glEnd();
glFlush();
}

void renderInit(int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(600, 600);
glutCreateWindow("");
glutDisplayFunc(renderScene);
glutCheckLoop();
}


Проблема в том, что я не знаю, как мне следует обновить окно или нарисовать второй график, который постоянно меняется.



Кроме того, это мой первый вопрос о переполнении стека, поэтому я прошу прощения, если я не делаю что-то правильно здесь, или если что-то из этого трудно понять. Я искала, как могла, ответ, но не могла найти ничего подходящего.

541   1  

1 ответ:

В glut или OpenGL, glutIdleFunc(void (*func)(void)) используется для обновления сцены. Функция бездействия будет вызывать glutDisplayFunc каждый раз, когда сцена обновляется.

Ссылка здесь http://www.opengl.org/resources/libraries/glut/spec3/node63.html

Я думаю, что renderScene() - это ваш glutDisplayFunc. И вам нужно зарегистрировать простаивающую функцию, используя glutIdleFunc. В функции idle можно изменить параметры для второго графика, который постоянно изменяется, и renderScene() будет вызван снова после изменения функции idle. сделано.

Comments

    Ничего не найдено.