基于OpenGL四元数的FPS相机抖动
OpenGL Quaternion based FPS Camera jiggling
我试图在我最近的项目中实现一个正确工作的fps类相机,并决定使用Quaternions,因为这是我的核心引擎处理旋转的方式。
所以一切都很好。我处理我的输入和相机相应移动,但特别是当围绕全局y轴(上轴)旋转时,当我在屏幕x轴上移动鼠标时,我试图将相机转向同一方向(向左/向右扫射),我正在看的对象(一个简单的立方体)开始来回跳跃。
我真的不知道这是关于我的SDL配置的问题还是我的相机代码混乱。
下面是camera-behaviour的代码:glm::vec2 dm;
if (firstTimeFPS)
{
dm = glm::vec2();
firstTimeFPS = false;
}
else
dm = pEngine::input->getDeltaMouse();
glm::vec3 translation;
float rotY = dm.x*pEngine::time->deltaTime*0.5;
float rotX = dm.y*pEngine::time->deltaTime*0.5;
m_camera.m_transform.rotate(rotY, glm::vec3(0, 1, 0), true);
m_camera.m_transform.rotate(-rotX, glm::vec3(1, 0, 0), false);
if (pEngine::input->isKeyDown(SDLK_w))
translation += m_camera.m_transform.getForward();
if (pEngine::input->isKeyDown(SDLK_s))
translation -= m_camera.m_transform.getForward();
if (pEngine::input->isKeyDown(SDLK_a))
translation += m_camera.m_transform.getLeft();
if (pEngine::input->isKeyDown(SDLK_d))
translation -= m_camera.m_transform.getLeft();
glm::normalize(translation);
translation *= pEngine::time->deltaTime * 20;
m_camera.m_transform.translate(translation);
这是计算viewMatrix的函数:
void Camera::recalculateViewMatrix()
{
m_viewMatrix = glm::lookAt(m_transform.position, m_transform.position + m_transform.getForward(), m_transform.getUp());
}
我的变换类由glm::vec3(表示位置和比例)和一个四元数(表示旋转)组成。第一个代码块中的rotation方法有一个bool参数,用于检查它是绕全局轴(=true)还是局部轴旋转。
感谢您花了一些时间,如果需要更多的代码或某些东西是不清楚的,请让我知道!
听起来你的转换代码搞砸了。
但是看看你的视图矩阵,让我觉得你没有正确地应用它。
假设你像下面这样分离你的向量,你的视图矩阵应该是这样计算的。
pos = glm::vec3(1.0f, 1.0f, 1.0f);
dir = glm::vec3(0.0f, 0.0f, -1.0f);
up = glm::vec3(0.0f, 1.0f, 0.0f);
rot = glm::angleAxis(0.0f, dir);
viewMatrix = glm::mat4_cast(rot) * glm::lookAt(pos, pos + dir, up);
相关文章:
- 了解 GLM- openGL 中的相机转换
- OpenGL相机和相机空间转型的困惑
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 通过 API 控制 DJI 相机
- 将相机数据从服务器实时流式传输到客户端
- 带有框架的 QGraphicsTextItem 的 QPropertyAnimation 会使文本抖动
- 在C++中去抖动
- 来自逆 vp 矩阵和相机位置的光线方向不正确
- OpenCV - Python 断言错误:SAD 算法 - 立体相机视差图计算
- Qt 和 Android - 如何使用 Qandroidjniobject 启动相机
- 在Windows(C++)中使用USB相机拍摄高分辨率照片
- 如何在相机类中添加胶卷
- 强制Qt相机视频格式
- 操纵安卓相机的深度图导致应用程序崩溃
- 深度值没有意义 R200 相机
- Qt QML相机在部署后显示白屏
- Opencv 如何从相机读取单帧
- 相机抖动未激活虚幻C++
- OpenGL3SFML2.0rc FPS风格的相机-抖动的鼠标移动
- 基于OpenGL四元数的FPS相机抖动