不久前我开始使用 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/

10-12 16:14