首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >鼠标移动口吃相机

鼠标移动口吃相机
EN

Game Development用户
提问于 2020-08-29 15:38:23
回答 1查看 441关注 0票数 0

我正在实现一个框架独立的FPS相机,我有一个问题,在干相机。如果我翻译它或者让它以固定的速度旋转,相机是平滑的,但是当我开始用鼠标移动它时,它就开始结巴了。

这是主循环中代码的一部分,它跟踪时间并计算围绕y轴的旋转:

代码语言:javascript
运行
AI代码解释
复制
std::chrono::high_resolution_clock::time_point newTime = std::chrono::high_resolution_clock::now();
uint32_t frameTime = static_cast<uint32_t>(std::chrono::duration_cast<std::chrono::microseconds>(newTime - oldTime).count());

oldTime = newTime;

double mouseXInput;
double mouseYInput;

glfwGetCursorPos(window, &mouseXInput, &mouseYInput);
glfwSetCursorPos(window, 0, 0);

float mouseX = static_cast<float>(mouseXInput);
float mouseY = static_cast<float>(mouseYInput);

float rotateSpeedModifier = 0.0000005f;

// Fixed rotation rate
camera.rotation.x += frameTime * 0.0000006f;

// or mouse controled rotation rate (pick just one of the two lines)
camera.rotation.x += frameTime * rotateSpeedModifier * mouseX);

// Overflow and underflow control
if (camera.rotation.x > 2.0f * PI) {
    camera.rotation.x -= 2.0f * PI;
} else if (camera.rotation.x < 0.0f) {
    camera.rotation.x += 2.0f * PI;
}

请注意,我禁用了光标,并在程序开始时启用了原始鼠标运动(支持它)。我还以它为中心:

代码语言:javascript
运行
AI代码解释
复制
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
glfwSetInputMode(window, GLFW_RAW_MOUSE_MOTION, GLFW_TRUE);
glfwSetCursorPos(window, 0, 0);

由于口吃只出现在我移动鼠标时,我猜这是某种精度问题。变量frameTime在400到5000之间。我认为使用毫秒是不够精确的。变量mouseX和mouseY通常在-10、10中,如果我对鼠标不太好斗的话,而且它们总是一个整数,这对我来说是很奇怪的。我不认为把它抛到浮子上也不是问题所在。

在这里我能做些什么来提高鼠标的跟踪精度?这就是问题所在吗?我该怎么解决这个问题?

EN

回答 1

Game Development用户

发布于 2020-08-29 17:07:12

旋转不应完全取决于帧时间,而应仅取决于鼠标增量。如果我把帧时间从等式中取出来,它就会像预期的那样工作。

票数 2
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/185455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档