更改游戏openGL中的场景

时间:2013-12-19 08:47:40

标签: c++ opengl glut scene

我继续使用openGL和c ++进行对话,现在我想创建“场景”,这将会互相改变。例如屏幕按钮“go next”,我按下按钮然后开始游戏。 在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);

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

3 个答案:

答案 0 :(得分:1)

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

否则,glutDisplayFunc是在场景/绘图功能之间切换的正确方法。 试着褪色效果,它可能会有很大的帮助。

答案 1 :(得分:1)

你应该只初始化过剩一次。

通常情况下,显示和空闲回调会根据你所处的状态做不同的事情。

高层次:

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

你可以通过切换功能来实现,但我认为这会使调试变得更加困难。

(但你可能不应该使用相同的功能进行绘画和空转。)

答案 2 :(得分:1)

在场景/模式更改期间,我不会弄乱屏幕设置。屏幕设置在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 ...
 }

就是这样......