我试图在3d中绘制几个三角形,但不能执行glutDisplayFunc()
功能。这是我的代码:
三角形和大小的数组。
int const trsize = (size-1)*(size-1)*2;
Triangle *trarr = new Triangle[trsize];
代码,我尝试调用该函数。
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("Height Map");
Initialize();
glutDisplayFunc(Draw1(trarr, trsize));
glutMainLoop();
Draw1()
功能。
void Draw1(Triangle arr[], int size){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINES);
for(int i=0; i<size; ++i){
glVertex3d((GLdouble)arr[i].p1().x(), (GLdouble)arr[i].p1().y(), (GLdouble)arr[i].p1().z());
glVertex3d((GLdouble)arr[i].p2().x(), (GLdouble)arr[i].p2().y(), (GLdouble)arr[i].p2().z());
glVertex3d((GLdouble)arr[i].p3().x(), (GLdouble)arr[i].p3().y(), (GLdouble)arr[i].p3().z());
}
glEnd();
glFlush();
}
我使用VS2012和IntelliSense写道:argument of type "void" is incompatible with parameter of type "void (*)()"
我不知道为什么DisplayFunc
需要其他类型。使用没有参数的Draw()
函数,它可以正常工作。
答案 0 :(得分:1)
glutDisplayFunc仅允许具有该签名的函数:void func(void)。
所以在你的代码中,你的绘图程序应该是:
void Draw1(void){...}
你应该找到另一种方法(例如全局变量)来传递参数。你的陈述声明将是:
glutDisplayFunc(DRAW1);
答案 1 :(得分:0)
这些参数应该是在设置drawFunc时分配给的全局变量:
Triangle arr[];
int size;
void Draw1(){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINES);
for(int i=0; i<size; ++i){
glVertex3d((GLdouble)arr[i].p1().x(), (GLdouble)arr[i].p1().y(), (GLdouble)arr[i].p1().z());
glVertex3d((GLdouble)arr[i].p2().x(), (GLdouble)arr[i].p2().y(), (GLdouble)arr[i].p2().z());
glVertex3d((GLdouble)arr[i].p3().x(), (GLdouble)arr[i].p3().y(), (GLdouble)arr[i].p3().z());
}
glEnd();
glFlush();
}
Initialize();
arr = trarr; size = trsize;
glutDisplayFunc(Draw1);
glutMainLoop();
它是glut库的一个缺点,你必须使用全局变量来传递回调数据