Я хочу, чтобы пользователи могли изменять значения массива prob через консоль и затем отражать эти изменения в окне.Двойная буферизация и отражение переменных переменных в C++/OpenGL
Я знаю, что я должен использовать двойную буферизацию, так что я установить режим отображения в моей основной функции, как
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
Ниже моя функция отображения:
void display() {
// declare some variables that will be used
int point_num = 8000000;
double r, x, y, x1 = 0, y1 = 0;
double prob[4] = {0.01, 0.19, 0.20, 0.60};
// clear the window
glClear (GL_COLOR_BUFFER_BIT);
for (int i = 0; i < point_num; i++) {
r = drand48(); // generate a random number between 0.0 - 1.0
// compare the random number we get to the if statement below and get the appropriate x and y values
if (r < prob[0]) {
x = ((0.2 * x1) + (4.4 * y1) + 7.5)/((0.2 * x1) + (8.8 * y1) + 15.4);
y = ((-0.3 * x1) + (-4.4 * y1) + -10.4)/((0.2 * x1) + (8.8 * y1) + 15.4);
}
else if (r < prob[1]) {
x = ((-32.5 * x1) + (5.81 * y1) + -2.9)/((-128.1 * x1) + (-24.3 * y1) + -5.8);
y = ((122.9 * x1) + (-0.1 * y1) + -19.9)/((-128.1 * x1) + (-24.3 * y1) + -5.8);
}
else if (r < prob[2]) {
x = ((96.5 * x1) + (35.2 * y1) + 5.8)/((134.8 * x1) + (30.7 * y1) + 7.5);
y = ((-131.4 * x1) + (-6.5 * y1) + 19.1)/((134.8 * x1) + (30.7 * y1) + 7.5);
}
else {
x = ((19.05 * x1) + (0.72 * y1) + 1.86)/((5.63 * x1) + (2.01 * y1) + 20.0);
y = ((-0.15 * x1) + (16.9 * y1) + -0.28)/((5.63 * x1) + (2.01 * y1) + 20.0);
}
x1 = x;
y1 = y;
// plot the points
glBegin(GL_POINTS);
glVertex2d(x1, y1);
glEnd();
}
glutSwapBuffers();
}
Я знаю, как взаимодействовать с пользователь через консоль и измените значения переменных, но я просто не понимаю, как отражать эти изменения в окне, пока программа работает с использованием OpenGL. Я попытался использовать цикл while перед циклом for, чтобы пользователи могли изменять значения массива prob, но это не сработало для меня. Любые идеи о том, как я могу достичь того, чего хочу?
* это не сработало для меня. * - почему именно? –