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

OpenGL - Left mouse click keeps removing my grid

本文关键字:删除 我的 网格 鼠标 OpenGL      更新时间:2023-10-16

我已经创建了一个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;
    }
}

根据您的代码:

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

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

如果没有更多的代码,就不可能确切地知道发生了什么,但是这些行可能不像您想象的那样工作,这可能会导致一些问题。

这不会做任何事情。

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

:

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

等于:

gridActive = false;

为了告诉发生了什么,虽然,我们需要知道当exit调用不在那里时单击鼠标按钮会发生什么,但是您还没有发布该代码。

还有,我不太明白你说的

是什么意思。

我已经创建了一个全局变量gridActive,没有true或false值,所以它不会每次重置

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