glutdisplayfunc中的参数

问题描述

我有画月食的功能

void drawEclipse(GLfloat x,GLfloat y,GLfloat xrad,GLfloat yrad)

致电glutdisplayFunc(drawEclipse(10,10,3,3));

它具有编译错误

error: invalid use of void expression

如何在glutdisplayFunc内部传递参数以实现功能

通过鼠标单击可以动态调用此蚀图绘制功能

我更新的代码


void mouseClicks(int button,int state,int x,int y) {
    if(button == gluT_LEFT_BUTTON && state == gluT_DOWN) {
        printf("%s -- %d -- %d\n","clicked",x,y);

        //Way 1
        glutdisplayFunc[&]() { drawEclipse(x,y,5,5); };

        //Way 2
        auto display = [x,y]() { return drawFilledelipse(x,3); };
        glutdisplayFunc(display);
   }
}
...
int main(){
...

    glutMouseFunc(mouseClicks);
...

解决方法

我将引用Passing capturing lambda as function pointer的答案:

lambda只能从draft C++11 standard第5.1.2节[...]

转换为函数指针,如果不能捕获

您必须选择

glutDisplayFunc的参数是一个函数指针。 您必须实现一个绘制椭圆的函数,并将函数指针传递给glutDisplayFunc

void display()
{
    drawEclipse(10,10,3,3);

    // [...]
}

glutDisplayFunc(drawEclipse(10,3));

glutDisplayFunc(display);

或者,您可以使用Lambda expression而不使用任何捕获参数:

glutDisplayFunc([]()
{
    drawEclipse(10,3);

    // [...]
});