gpt4 book ai didi

c++ - 如何创建一个类来包装 GLUT?

转载 作者:太空狗 更新时间:2023-10-29 20:48:56 25 4
gpt4 key购买 nike

我正在用 OpenGL 为学校编写游戏。因为会有更多类似的任务,所以我想制作一个小框架来在 OpenGL 中做一些常见的事情。我以前做过一些简单的游戏,我通常将其分解为一个 IO 类来处理输入和绘制到屏幕,Game 类用于主要游戏循环/逻辑,以及用于游戏中任何对象的类。

在我使用 SDL 之前,所以我的问题是,这是在 OpenGL 中执行此操作的正确方法吗?我已经遇到了一些麻烦。我希望我的 IO 类处理初始化窗口、绘制场景和鼠标点击。所以构造函数看起来像这样:

IO::IO()
{
currWindowSize[0] = DEF_WIDTH;
currWindowSize[1] = DEF_HEIGHT;

glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA );
glutInitWindowPosition( INIT_WINDOW_POSITION[0], INIT_WINDOW_POSITION[1] );
glutInitWindowSize( currWindowSize[0], currWindowSize[1] );
glutCreateWindow( "TEST" );

setUp();

glutDisplayFunc(drawScene);
glutMainLoop();
}

但是,drawScene 是一个类方法。有没有一种方法可以将类方法传递给 glutDisplayFunc() 而无需将其设为静态?

最佳答案

不幸的是,glutDisplayFunc() 没有采用 void* 指针,因此您可以伪造一个对象上下文。您将必须创建一个静态函数,该函数可以使用静态变量调用正确的 IO 实例。

不过,我发现您的模式也有一些小问题。据我所知, glutMainLoop() 永远不会返回,直到你终止 GLUT 上下文,因此你有一个实际上永远不会返回的构造函数,所以你的程序流程是不合理的。您应该将该调用移动到类中单独的 run() 方法中。

(我个人会使用 GLFW,它避免了 GLUT 的整个回调困惑,尽管您必须编写主循环。)

关于c++ - 如何创建一个类来包装 GLUT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2129388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com