gpt4 book ai didi

c++ - GLUT鼠标位置不更新

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

我根据鼠标位置旋转相机。但是我只希望在按下鼠标左键或右键时才激活它。这段代码的问题是我必须松开并再次按下才能让程序注意到我移动了鼠标。

当使用键盘键并移动鼠标时,它起作用了。

尝试使用 glutPostRedisplay,但我不确定它是否是我需要的或如何使用它。

void processMouse(int button, int state, int x, int y) {


if (state == GLUT_DOWN) {

if (button == GLUT_LEFT_BUTTON) {mouseM=true;} if (button == GLUT_RIGHT_BUTTON) {mouseN=true;}
} if (state == GLUT_UP){ if (button == GLUT_LEFT_BUTTON){mouseM=false;} if (button == GLUT_RIGHT_BUTTON) {mouseN=false;} }

}


void mouseMove(int x, int y){
if (x < 0) angleX = 0.0; else if (x > w) angleX = 180.0; else //angleX = 5.0 * ((float) x)/w; angleX = (x-320)/50; angleZ = angleX; angleY= (y-240)/50;
}

最佳答案

你可以结合glutMouseFuncglutMotionFuncglutPassiveMotionFunc来实现。

(1)glutMotionFunc 仅在按下鼠标按钮时随时告诉您光标的 (x, y)。另一方面,glutPassiveMotionFunc 会在没有按下任何按钮时告诉您(x, y)。 (查看 glut specification 了解更多详情)。

(2) 结合这些功能

首先,准备onLeftButton(int x, int y)onRightButton(int x, int y)来处理左键按下和右键按下事件分别是这样的:

void onLeftButton(int x, int y){
//change variables for your glRotatef function for example
//(x, y) is the current coordinate and
//(preMouseX, preMouseY) is the previous coordinate of your cursor.
//and axisX is the degree for rotation along x axis. Similar as axisY.
axisX += (y - preMouseY);
axisY += (x - preMouseX);
...
}

void onRightButton(int x, int y){
//do something you want...
}

其次,为glutMouseFunc准备一个函数,比如onMouse,例如:

glutMouseFunc(onMouse);

onMouse 函数中,它将是这样的:

void onMouse(int button, int state, int x, int y)
{
if(state == GLUT_DOWN){
if(button == GLUT_RIGHT_BUTTON)
glutMotionFunc(onRightButton);
else if(button == GLUT_LEFT_BUTTON)
glutMotionFunc(onLeftButton);
}
}

完成这些操作后,只要按住左/右按钮,您就可以随时获取光标的(x, y)

有关如何组合这些功能的更多信息,您可以在 this site 查看 3.030 部分。

关于c++ - GLUT鼠标位置不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4521656/

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