我不久前开始使用 OpenGL,使用 GLUT。您不能将成员函数传递给 GLUT 函数。 (或者就此而言指向成员的指针,尽管我并没有真正探索该选项)。
我想知道是否有一个“体面”的方式来解决这个问题,或者“最体面”的方式是什么?我知道您可以使用静态成员函数,但是没有更好的方法吗?
我知道还有其他库,例如 SFML,它们是用 C++ 编写的并提供基于 C++ 类的接口(interface),但我想知道关于 GLUT(确切地说是 freeglut)的可能性是什么。
最佳答案
首先,GLUT 不适用于严肃的应用程序工作。它用于简单的图形演示。为此目的,这很好。如果您发现自己尝试在 GLUT 中认真工作,您会发现自己花费大量时间来解决它的局限性。此限制只是您最终会遇到的众多限制之一。 GLFW,虽然仍然有这个限制(虽然下一个版本不会),但通常更适合严肃的应用程序工作。
其次,解决这个问题的“最体面”的方法取决于你在做什么。如果您只有一个窗口,那么正确的解决方案只是一个简单的静态函数,它可以将全局指针(或返回全局指针的函数)指向您感兴趣的任何类。
如果您有多个窗口,那么您需要的是一个全局 std::map
,它将 GLUT 的窗口标识符映射到指向某个对象的指针。然后,您可以获得从哪个窗口调用特定函数,并使用映射将该调用转发到代表该窗口的特定对象。
关于c++ - GLUT 和 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7211422/