【发布时间】:2016-05-01 15:24:35
【问题描述】:
我目前正在开发 OpenGL 框架/引擎,就 OpenGL 部分而言,我对我的结果非常满意。 另一方面,我在让相机工作时遇到了一个严重的问题。 沿 Z 轴移动效果很好,但是一旦我开始扫射(沿 X 轴移动),整个场景就搞砸了。 您可以在下图中看到扫射的结果。 左边部分显示实际场景,右边部分显示由扫射运动产生的场景。
我的代码如下。 在构造函数中:
//Info is a Struct with Default values
m_projectionMatrix = glm::perspective(
info.fieldOfView, width / height, //info.fov = 90
info.nearPlane, info.farPlane // info.near = 0.1f, info.far = 1000
);
//m_pos = glm::vec3(0.0f,0.0f,0.0f), info.target = glm::vec3(0.0f, 0.0f, -1.0f)
m_viewMatrix = glm::lookAt(m_pos, m_pos + info.target, Camera::UP);
//combine projection and view
m_vpMatrix = m_projectionMatrix * m_viewMatrix;
在“更新”方法中,我目前正在执行以下操作:
glm::mat4x4 Camera::GetVPMatrix()
{
m_vpMatrix = glm::translate(m_vpMatrix, m_deltaPos);
return m_vpMatrix;
}
据我所知: 投影矩阵实现了实际的透视图。最初,视图矩阵平移和旋转整个场景,它是居中的吗? 那么为什么用任何 Z 值转换 VP-Matrix 都可以,但用 X 值却不行呢?
我想实现这样的相机行为: 初始凸轮位置是(0,0,0),“中心”是例如(0,0,-1)。 然后 X = 5 平移后:Cam Pos 为 (5,0,0),Center 为 (5,0,-1)。
编辑:附加问题。 为什么VP-Transformation会影响Z坐标?
感谢您的帮助! 最好的问候,克里斯托夫。
【问题讨论】:
标签: c++ opengl matrix camera transformation