c++ - 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 度,这看起来是正确的......
我能做些什么不同的事情?
解决方案
推荐阅读
- arrays - 如何使用 Fortran 90 将一维数组的数据写入文件的下一列?
- react-native - NodeJS 是 React Native 应用程序背后的唯一服务器吗?
- android - 在onCreate中使用getActivity时如何让onCreate在onCreateView之前加载?
- php - Woocommerce 自定义订单状态更改日期
- google-bigquery - BigQuery上比特币交易的最大时间戳?
- javascript - 使用 JavaScript 检测文件系统上的页面何时发生更改
- javascript - 从 Controller 获取数据到 Javascript 并将其传递到 Modal Codeigniter
- function - 为什么我的 Scheme Cube-Root 程序中出现此错误?
- r - 使用 R 从网站中提取表格数据
- python - 使用 scipy 时找不到模块