我正在使用GLUT并开发一款FPS游戏。我需要一种捕捉鼠标的方法,以便摄像机继续移动,因为当鼠标位置超过监视器限制时,无法计算X中的变化或Y中的变化。我怎样才能“捕获”鼠标GLUT?
由于
答案 0 :(得分:2)
我建议使用像OGRE 3D这样的现成引擎,但如果你真的想要重新发明轮子,那么这就是......
在所有情况下我都知道,PC FPS游戏通过注册鼠标动作回调“捕获”指针,注意相对运动,然后将指针扭曲回窗口中心。
这是我写的一些代码,用于在一年或两年前用C ++课程在OpenGL中将鼠标输入添加到示例乒乓表:
void resetPointer() {
glutWarpPointer(TABLE_X/2, TABLE_Y/2);
lastMousePos = TABLE_Y/2;
}
void mouseFunc(int sx, int sy) {
if (!started) { return; }
int vertMotion = lastMousePos - sy;
lastMousePos = sy;
player1.move(vertMotion);
// Keep the pointer from leaving the window.
if (fabs(TABLE_X/2 - sx) > 25 || fabs(TABLE_Y/2 - sy) > 25) {
resetPointer();
}
}
// This goes in with your "start new game" code if you want a menu
resetPointer();
glutSetCursor(GLUT_CURSOR_NONE);
glutPassiveMotionFunc(mouseFunc);
它只跟踪垂直运动,但添加水平是微不足道的。