gpt4 book ai didi

c++ - glutPassiveMotionFunc 问题

转载 作者:行者123 更新时间:2023-11-28 05:11:36 25 4
gpt4 key购买 nike

我对 glut 和 opengl 有点陌生,我正在尝试让相机在鼠标移动时移动,但是当试图在屏幕上获取鼠标位置时,我认为应该只引用您想要将 x 和 y 传递给的方法在 glutPassiveMotionFunc() 参数中。但是在尝试为函数提供 CameraMove 方法时出现错误。我知道我传递的方法有误,但我不确定如何传递。

void helloGl::CameraMove(int x, int y)
{
oldMouseX = mouseX;
oldMouseY = mouseY;

// get mouse coordinates from Windows
mouseX = x;
mouseY = y;

// these lines limit the camera's range
if (mouseY < 60)
mouseY = 60;
if (mouseY > 450)
mouseY = 450;

if ((mouseX - oldMouseX) > 0) // mouse moved to the right
angle += 3.0f;`enter code here`
else if ((mouseX - oldMouseX) < 0) // mouse moved to the left
angle -= 3.0f;
}




void helloGl::mouse(int button, int state, int x, int y)
{
switch (button)
{
// When left button is pressed and released.
case GLUT_LEFT_BUTTON:

if (state == GLUT_DOWN)
{
glutIdleFunc(NULL);

}
else if (state == GLUT_UP)
{
glutIdleFunc(NULL);
}
break;
// When right button is pressed and released.
case GLUT_RIGHT_BUTTON:
if (state == GLUT_DOWN)
{
glutIdleFunc(NULL);
//fltSpeed += 0.1;
}
else if (state == GLUT_UP)
{
glutIdleFunc(NULL);
}
break;
case WM_MOUSEMOVE:

glutPassiveMotionFunc(CameraMove);

break;

default:
break;
}
}

最佳答案

假设 helloGl 是一个类。那么答案是,你不能。函数与方法不同。问题是 glutPassiveMotionFunc() 期望:

void(*func)(int x, int y)

但是你想要给它的是:

void(helloGl::*CameraMove)(int x, int y)

换句话说 thiscall .这不起作用,因为 thiscall 基本上cdecl 相比有一个额外的隐藏参数.总之,您可以将 CameraMove() 想象成:

void CameraMove(helloGl *this, int x, int y)

如您所见,这不一样。因此,解决方案是将 CameraMove() 移出您的 helloGl 类或将方法设为静态。

关于c++ - glutPassiveMotionFunc 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43391891/

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