C++ OpenGL-鼠标左键单击可继续删除我的网格
我创建了一个C++ OpenGL-鼠标左键单击可继续删除我的网格,c++,opengl,visual-c++,glut,C++,Opengl,Visual C++,Glut,我创建了一个drawGrid()函数,可以沿X轴和Y轴绘制一个正方形网格,效果很好。然后,我创建了一个menu()函数(在main()中调用),用于打开和关闭网格,下面是代码: void menu(int item) { switch (item) { case MENU_SWITCH_OFF_GRID: { if (gridActive == true) { grid
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
的全局变量,没有true
或false
值,所以它不会每次重置,这样就可以在我的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)
{
gridActive = true;
}
这:
同:
gridActive = false;
但是,为了告诉我们发生了什么,我们需要知道当退出调用不存在,但您尚未发布该代码时,单击鼠标按钮会发生什么
另外,我不太明白你所说的:
我创建了一个名为gridActive的全局变量,它没有真值或假值,因此不会每次重置
但听起来好像您创建了一个未初始化的全局变量,并期望它有一些特定的含义,因为它是未初始化的?基于您的代码:
if (gridActive != true)
{
drawGrid();
gridActive = true;
}
只有当gridActive
为false时,才能绘制网格。但是,每次绘制之后,您都会设置gridActive=true
,这样就可以停止绘制它。if语句是正确的,所以我删除了它们,运行了代码,并获得了相同的预期输出。此外,当我删除退出调用时,网格会消失。@BenTanos当删除exit
调用时,单击鼠标按钮时运行的代码是什么?之前,当我给全局变量一个true或false值时,它会一直重置回该值,我不应该这样做吗?在你有一行的函数中发布代码:case GLUT\u LEFT\u button尽管不确定这与按下按钮有什么关系,除非你只在按下按钮时绘制。
if (gridActive != true)
{
drawGrid();
gridActive = true;
}