0

我有这个功能,当我按下时我在和a之间切换。当我运行它开始的程序时,当我按下它时切换到. 但是我希望它在按下时继续在两者之间切换。GL_LINEGL_FILLGL_FILLaGL_LINEa

有人可以告诉我哪里出错了。

void keyPressed (unsigned char key, int x, int y) { 
switch (key){
case 'a':
    bool f = false;
    if(!f){
        glPolygonMode(GL_FRONT,GL_LINE);
        glPolygonMode(GL_BACK, GL_LINE);

    }else{
        //bOutline=false;
        glPolygonMode(GL_FRONT,GL_FILL);
        glPolygonMode(GL_BACK, GL_FILL);
    }
    f=!f;
    break;

}

}
4

4 回答 4

3

我认为您必须在 f 处理的两种状态之间切换,因此您需要在外部范围内定义 f 或将其定义为像这样的静态变量

static bool f = false;
于 2012-10-10T14:13:08.407 回答
2

f每次调用时都在函数内部定义 bool ,因此您应该将其定义为全局变量,我不建议这样做,或者将其定义为静态变量:

static bool f = false;

您还可以使用glGetwith 参数GL_POLYGON_MODE来查找正面和背面的当前模式,例如:

GLint polyMode[2];
//returns front and back modes
glGetIntegerv(GL_POLYGON_MODE, polyMode);

switch(polyMode[0]) { 
    case GL_LINE:
        //add code
        break;
    case GL_FILL:
        //add code
        break;
    case GL_POINTS:
        //add code
        break;
}
于 2012-10-10T14:09:28.857 回答
2

您应该将 f 定义为静态变量,以在函数调用之间保持其值。静态布尔 f = 假;或者只是让它成为一个全局变量

于 2012-10-10T14:13:54.483 回答
1

你真的需要f吗?在我看来,您想要在两个值之间切换,所以为什么不这样:

GLint previous[2];
glGetIntegerv( GL_POLYGON_MODE, previous );
glPolygonMode( GL_FRONT, previous[0] == GL_LINE ? GL_FILL : GL_LINE);
glPolygonMode( GL_BACK, previous[1] == GL_LINE ? GL_FILL : GL_LINE);
于 2012-10-10T14:18:46.093 回答