在游戏打开GL中更改场景

Change scenes in game openGL

本文关键字:GL 游戏      更新时间:2023-10-16

我继续与OpenGL和C ++进行对话,现在我想制作"场景",这将相互改变。 例如,带有"下一步"按钮的屏幕,我按下按钮,然后开始游戏。为此,在 c++ 中使用 openGL 的最佳方法是什么?主要问题是 glut 初始化命令是什么,例如:

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(screenWidth, screenHeight);
glutInitWindowPosition(0,0);
glutCreateWindow("Puzzle quest!");
// Registration
glutDisplayFunc(Draw);
glutIdleFunc(Draw);

我是否需要在两个类中实现此方法,还是仅在一个类中实现此方法,然后仅"显示开始按钮/隐藏游戏功能,隐藏开始按钮/显示游戏功能+启动计时器"?

在场景/模式更改期间,我不会弄乱屏幕设置。屏幕设置在调整 OpenGL 窗口大小时更改,而不是在某些按钮事件上更改...

您必须根据某些变量编写可视化和UI逻辑内容,例如:

enum _game_screens_enum
 {
 _game_screen_main_menu=0,
 _game_screen_game,
 _game_screen_game_over,
 _game_screen_help,
 _game_screen_intro,
 _game_screen_redefine_keys,
 _game_screen_high_score,
 _game_screen_exit,
 };
int screen=_game_screen_main_menu;

现在在绘制,更新和UI处理函数中,只需添加适当的ifs,例如:

void draw()
 {
 if (screen==_game_screen_main_menu)
  {
  // draw main menu ...
  }
 else if (screen==_game_screen_game)
  {
  // draw in game screen stuff...
  }
 else ...
 }

就是这样...

您是否正在寻找淡入淡出效果或某种混合它们的过渡?如果使用阿尔法通道,淡入淡出效果应该很容易...启用混合...在所有内容前面绘制黑色四边形,因为它的 alpha 值在您希望淡入淡出的任何时间范围内从 0 增加到 1。淡入将是相反的。不确定混合场景效果...如果可以更改 Alpha 值,则可能是累积缓冲区,或者读取像素然后绘制像素。

否则,glutDisplayFunc 是在场景/绘图函数之间切换的正确方法。尝试淡入淡出效果,这可能会有很大帮助。

你应该只初始化一次 glut。

通常,显示和空闲回调会根据您所处的状态执行不同的操作。

在高层次上:

void idle()
{
   if (showingMenu)
      menu.idle();
   else
      currentScene.idle();
}

您可以通过切换函数来做到这一点,但我认为这使得调试更加困难。

(不过,您可能不应该使用相同的函数进行绘制和空闲。