我正在编写一些 OpenGL/Glut 函数来可视化我的流体动力学代码的结果(全部在 C++ 中)。我的数据存储在声明为全局的矩阵中。
这是伪代码:
class fluid_dynamics{
//...
void set_conditions(); // Here is my opengl init function
void solve(); // This is an iterative loop with stop criteria
void IterateLoop();
}
在solve() 函数上,我有一个循环。
void fluid_dynamics::solve(){
glutDisplayFunc(DisplayMatrix);
IterateLoop( // here I update my data each n-steps
// and I want to update my "scene" every time I do that.
);
glutMainLoop();
我对 OpenGL 很陌生,但据我了解,在 IterateLoop() 函数中使用 glutPostRedisplay() 将不会执行新图像,直到循环完成(因为 glutPostRedisplay() 只设置一个标志并等待空闲状态),所以......有什么想法吗?(1)
可以使用 glutIdleFunc 吗?或 glutTimerFunc 指向 IterateLoop 将循环分成小循环?(在那种情况下,它应该如何从类内部将一个 void 指针传递给一个类成员?:S)
笔记; 我可以重写代码,所以我接受每一个建议,但我认为将我所有的流体动力学操作都放在一个类中很重要。