首页 > 解决方案 > OpenGL - 使 Z 面朝上

问题描述

(见底部图片)

大多数 OpenGL 教程使用第一人称视角,并且 Y 面向上。

但是,我试图让相机聚焦在一个特定的点上并让 z 面朝上(如 CAD 软件)

为此,我尝试交换 Y 和 Z 来计算位置:

pos.x = cos(m_Yaw) * cos(m_Pitch);
pos.y = sin(m_Yaw) * cos(m_Pitch); // This was Z
pos.z = sin(m_Pitch);              // This was Y

m_Position = (m_Zoom * pos) + m_Centre;

然后计算向上向量:

m_WorldUp = glm::vec3(0.0f, 0.0f, 1.0f);

m_Front = glm::normalize(pos);
m_Right = glm::normalize(glm::cross(m_Front, m_WorldUp));
m_Up = glm::normalize(glm::cross(m_Right, m_Front));

视图矩阵计算如下:

m_ViewMatrix = glm::lookAt(m_Position, m_Centre, m_Up);

投影矩阵是用(虽然我不认为这是相关的)计算的:

m_ProjMatrix = glm::perspective(m_FOV, m_ScreenW / m_ScreenH, m_Near, m_Far);

当 m_Centre 不在原点时,它会在某些角度看起来扭曲: 参见图片

如果你把你的头旋转 90 度,这看起来是正确的......

我能做些什么不同的事情?

标签: c++openglcameraglm-mathperspective

解决方案


推荐阅读