OpenGL - 鼠标左键单击不断删除我的网格

时间:2016-10-20 11:08:11

标签: c++ opengl visual-c++ glut

我创建了一个drawGrid()函数,它沿X轴和Y轴绘制一个平方网格,效果很好。然后我创建了一个menu()函数(在main()中调用),可以打开和关闭网格,这里是代码:

void menu(int item)
{
    switch (item)
    {
        case MENU_SWITCH_OFF_GRID:
        {
            if (gridActive == true)
            {
                gridActive = true;
            }
        }
        break;
        case MENU_SWITCH_ON_GRID:
        {
            if (gridActive == true)
            {
                gridActive = false;
            }
        }
        break;
        default:
            {       /* Nothing */       }
        break;
        }

        glutPostRedisplay();

        return;
    }
}

菜单开关工作正常,因为我创建了一个名为gridActive 的全局变量,没有 truefalse值,所以它不会重置每个时间,这样就可以在我的display()函数中访问它,如下所示:

if (gridActive != true)
{
    drawGrid();
    gridActive = true;  
}

所有这一切都很好。

我的问题是什么?

我的问题是,每当我点击鼠标左键时,我的网格就会消失,这是我不想要的。所以我做了mouse()这样的函数:

case GLUT_LEFT_BUTTON:  if (state == GLUT_DOWN)
                        {
                            exit(0);  // this has been added to see if 
                                          // my program will exit!
                        }
                        break;

要测试单击鼠标左键时我的程序是否退出,它是否会退出。

所以不要使用exit(0);我可以放在这里的代码,这样当我点击鼠标左键时我的网格不会消失?或者问题超出了吗?

更新

这是鼠标功能:

void mouse(int button, int state, int x, int y)
{
    // these have simply been set-up for me to use
    // in the future
    switch (button)
    {
        case GLUT_LEFT_BUTTON:  if (state == GLUT_DOWN)
                                {

                                }
                                break;

        case GLUT_RIGHT_BUTTON: if (state == GLUT_DOWN)
                                { 

                                }
                                break;
        default: break;

    }
}

2 个答案:

答案 0 :(得分:2)

根据您的代码:

if (gridActive != true)
{
    drawGrid();
    gridActive = true;  
}

您只在gridActive为false时绘制网格。但是,每次绘制之后,都会设置gridActive=true,然后停止绘制它。

答案 1 :(得分:0)

如果没有更多的代码,就不可能确切地说出正在发生的事情,但这些行可能没有按照您的想法行事,这可能会导致一些问题。

这从来没有做过任何事情。

 if (gridActive == true)
            {
                gridActive = true;
            }

此:

  if (gridActive == true)
            {
                gridActive = false;
            }

与:

相同
gridActive = false;

为了说明发生了什么,我们需要知道当exit来电时你点击鼠标按钮会发生什么,但你没有'发布该代码。

另外,我不太清楚你的意思:

  

我创建了一个名为gridActive的全局变量,没有true或false值,因此每次都不会重置

但听起来你做了一个未初始化的全局变量,并期望它有一些特定的含义,因为它未初始化?