Mar*_*nix 8 c++ opengl callback freeglut
我正在使用MSVC++和freeglut来使用openGL.现在,我有一个叫做的类Camera,它非常简单,但它也保存了重塑窗口的功能.
我的问题是:如何glutReshapeFunc(void (*callback)(int,int))在相机中设置我的功能?
我有以下代码,由于编译器错误,它将无法工作:
int main(int argc, char **argv)
{
Camera *camera = new Camera();
glutReshapeFunc(camera->ReshapeCamera);
}
Run Code Online (Sandbox Code Playgroud)
我的Camera类在Camera.h中看起来像这样:
class Camera
{
public:
Camera(void);
~Camera(void);
void ReshapeCamera(int width, int height);
};
Run Code Online (Sandbox Code Playgroud)
也许这只是一个更普遍的回调问题,但我在互联网上找到的唯一一件事就是围绕回调创建一些包装类.但它看起来不应该这么难.提前致谢.
Tho*_*mas 10
没有干净的方法来做到这一点.C不知道对象,因此指向成员的指针不起作用.C不做模板,所以仿函数不起作用.API甚至不允许您将任意传递void *userData给回调,因此您也无法以这种方式传递对象.
因此,实际上,您必须创建一个不是成员函数的包装函数,并且您必须Camera通过静态和/或全局变量以某种方式为其提供对对象实例的访问.
如果可以有多个对象侦听此事件,则可以创建一个允许您注册任意侦听器的单例类.
| 归档时间: |
|
| 查看次数: |
3268 次 |
| 最近记录: |