【发布时间】:2019-12-07 11:26:18
【问题描述】:
我正在尝试实现“行星”世界。因此,在我的旧相机类表面上的任何一点上,我都得到了这样的结果: 相机类更新代码为:
void cCamera::ProcessMouseMovement(GLdouble dt, glm::vec2 curOffset)
{
curOffset.x *= static_cast<GLfloat>(dt * m_MouseSensitivity);
curOffset.y *= static_cast<GLfloat>(dt * m_MouseSensitivity);
m_fPitch += curOffset.x;
m_fYaw += curOffset.y;
if (m_fYaw > 89.0f)
m_fYaw = 89.0f;
if (m_fYaw < -89.0f)
m_fYaw = -89.0f;
UpdateCameraVectors();
}
void cCamera::UpdateCameraVectors(void)
{
float fYawRad = glm::radians(m_fYaw);
float fPitchRad = glm::radians(m_fPitch);
float fYawCos = cos(fYawRad);
glm::vec3 front { cos(fPitchRad) * fYawCos,
sin(fYawRad),
sin(fPitchRad) * fYawCos };
*m_pCameraFront = glm::normalize(front);
m_Right = glm::normalize(glm::cross(*m_pCameraFront, m_WorldUp));
m_Up = glm::normalize(glm::cross(m_Right, front));
*m_pViewMatrix = glm::lookAt(glm::vec3(0.f), glm::vec3(0.f) + *m_pCameraFront, m_Up);
}
由于 (0,0,0) 是行星中心,我假设我应该这样计算 m_WorldUp 向量:
m_WorldUp = glm::normalize(*m_pPos);
确实,结果很好:相机转向正确的方向,但它的旋转被破坏了。偏航和俯仰仍然依赖于旧世界。我想,我应该用新的 m_WorldUp 更新前向量,但不知道怎么做。
【问题讨论】:
标签: c++ math opengl camera glm-math