【问题标题】:switch statement C++ and glutswitch 语句 C++ 和 glut
【发布时间】:2012-10-01 01:00:47
【问题描述】:

我有这个功能,当我按下a 时,我在GL_LINEGL_FILL 之间切换。当我运行程序时,它以GL_FILL 开头,当我按下a 时,它切换到GL_LINE。但是我希望它在按下a 时继续在两者之间切换。

谁能告诉我哪里出错了。

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;

}

}

【问题讨论】:

  • 我以为你不能在switch 语句中定义变量。
  • @Derek 如果您使用大括号将范围引入案例{},您可以
  • @acraig5075 啊,我明白了。谢谢!

标签: c++ switch-statement keypress glut


【解决方案1】:

你在每次调用它时在函数内部定义布尔f,所以你应该将它定义为全局变量,我不建议这样做,或者作为静态变量:

static bool f = false;

您还可以使用glGetGL_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;
}

【讨论】:

  • @aserwin 实际上,在函数之外或作为静态变量。
【解决方案2】:

你真的需要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);

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      static bool f = false;
      

      【讨论】:

        猜你喜欢
        • 2017-12-13
        • 1970-01-01
        • 2021-07-24
        • 2016-03-02
        • 2018-01-11
        • 2012-10-25
        • 1970-01-01
        • 2010-12-20
        • 2011-11-27
        相关资源
        最近更新 更多