gpt4 book ai didi

opengl - 有人可以解释一下我如何使用四元数来使用鼠标像 FPS 一样环顾四周吗?

转载 作者:行者123 更新时间:2023-12-02 05:57:00 25 4
gpt4 key购买 nike

昨天我问:How could simply calling Pitch and Yaw cause the camera to roll?

基本上,我发现因为“Gimbal Lock”,如果你俯仰+偏航,你将不可避免地产生滚动效果。有关更多信息,您可以阅读该问题。

我正在努力阻止这种情况发生。当您在普通的 FPS 射击游戏中环顾四周时,您的相机不会到处滚动!

这是我当前的被动鼠标功能:

int windowWidth = 640;
int windowHeight = 480;

int oldMouseX = -1;
int oldMouseY = -1;

void mousePassiveHandler(int x, int y)
{
int snapThreshold = 50;

if (oldMouseX != -1 && oldMouseY != -1)
{
cam.yaw((x - oldMouseX)/10.0);
cam.pitch((y - oldMouseY)/10.0);


oldMouseX = x;
oldMouseY = y;

if ((fabs(x - (windowWidth / 2)) > snapThreshold) || (fabs(y - (windowHeight / 2)) > snapThreshold))
{
oldMouseX = windowWidth / 2;
oldMouseY = windowHeight / 2;
glutWarpPointer(windowWidth / 2, windowHeight / 2);
}
}
else
{
oldMouseX = windowWidth / 2;
oldMouseY = windowHeight / 2;
glutWarpPointer(windowWidth / 2, windowHeight / 2);
}


glutPostRedisplay();

}

这会导致相机根据鼠标移动进行俯仰/偏航(同时将光标保持在中心)。我还发布了我原来的相机类here .

该线程中的有人建议我使用四元数来防止这种效果发生,但在阅读 wikipedia page 后我根本不理解它们。

如何在我的 OpenGL/Glut 应用程序中创建一个四元数,以便我可以正确地让我的“相机”环顾四周,而不会出现不必要的滚动?

最佳答案

一个简单的基于四元数的相机,设计用于与 gluLookAt 一起使用。

http://www.gamedev.net/reference/articles/article1997.asp

关于opengl - 有人可以解释一下我如何使用四元数来使用鼠标像 FPS 一样环顾四周吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/788226/

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