我正在尝试将数组形式的数据传递给由glutDisplayFunc调用的函数。请告诉我这是否可行或如何实现相同目标的简单替代方案。最终我想要将大量值传递给绘图函数。谢谢!
#include "stdafx.h"
#include <ostream>
#include <iostream>
#include <Windows.h>
#include <ctime>
#include <vector>
using namespace std;
#include <glut.h>
void Draw(int passedArray[]) { // This is probably wrong but just to give you the idea
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_POINTS);
glVertex3f(passedArray[1], passedArray[2], 0.0); // A point is plotted based on passed data
glEnd();
glFlush();
}
void Initialize() {
glClearColor(0.0, 0.0, 0.0, 0.0); // Background color
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
int main(int iArgc, char** cppArgv) {
cout << "Start Main" << endl;
glutInit(&iArgc, cppArgv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(250, 250); // Control window size
glutInitWindowPosition(200, 200);
glutCreateWindow("GA");
Initialize();
int passedArray[2] = {10, 20}; // create array
glutDisplayFunc(Draw(passedArray)); // This is not how you do this, just to try to convey what I want
glutMainLoop();
return 0;
}
答案 0 :(得分:0)
主要要点是,只有全局变量才对glut有意义。
为什么?
没有必要使用局部变量,因为过剩本身就是全局的。 每个应用程序只能调用一次 glutInit 。依此类推。
构建
对于C ++ 11和更高版本。 传递lambda而不是函数指针。 下面的示例演示如何将lambda传递到循环主体中。通过将lambda作为显示功能,您可以使用捕获部分传递您喜欢的任何内容。
// Include GLUT headers here as well
#include <functional>
typedef std::function<void()> loop_function_t;
struct GlutArgs {
loop_function_t loopFunction;
};
GlutArgs& getGlutArgs() {
static GlutArgs glutArgs;
return glutArgs;
}
void display() {
getGlutArgs().loopFunction();
}
void init(int argc, char** argv) {
// glutInit and friends goes here
glutDisplayFunc (display);
}
void loop(loop_function_t f) {
getGlutArgs().loopFunction = f;
glutMainLoop();
}
int main(int argc, char** argv) {
init(argc, argv);
int myVar = 1;
loop([myVar](){
glClear(...);
doSomething(myVar);
});
}
对于旧的C ++标准,除了lambda以外,其他所有操作都相同,只是用变量而不是lambda填充GlutArgs内容,然后直接从 display 函数使用它们。