从透视到正投影
From perspective to orthographic projections
我正在尝试将相机投影从透视更改为正交。目前,我的代码在透视投影方面工作正常
m_prespective = glm::perspective(70.0f, (float)DISPLAY_WIDTH / (float)DISPLAY_HEIGHT, 0.01f, 1000.0f);
m_position = glm::vec3(mesh.centre.x, mesh.centre.y, -mesh.radius);
m_forward = centre;
m_up = glm::vec3(0.0f, 1.0f, 0.0f);
return m_prespective * glm::lookAt(m_position, m_forward, m_up);
但是一旦我将其更改为正交投影,我就再也看不到我的网格了。
m_ortho = glm::ortho(0.0f, (float)DISPLAY_WIDTH, (float)DISPLAY_HEIGHT,5.0f, 0.01f, 1000.0f);
m_position = glm::vec3(mesh.centre.x, mesh.centre.y, -mesh.radius);
m_forward = centre;
m_up = glm::vec3(0.0f, 1.0f, 0.0f);
return m_ortho * glm::lookAt(m_position, m_forward, m_up);
我不明白我做错了什么。
在透视投影中,术语(float)DISPLAY_WIDTH / (float)DISPLAY_HEIGHT
是评估图像纵横比。这个数字将接近1。透视投影的近平面处的左右裁剪平面距离为 aspect * near_distance
。更有趣的是在观看距离上左右的广阔,在您的情况下是abs(m_position.z)= abs(mesh.radius)
.
将其转移到正交投影中,左、右、上和下裁剪平面距离应具有相同的数量级,因此给定坡向接近 1,则左、右、下和顶部的值应接近 abs(mesh.radius)
的值。除了纵横比外,以像素为单位的显示器分辨率完全无关紧要。
此外,使用透视投影时,应选择尽可能大的near
值,以便所有所需的几何图形都可见。否则将浪费宝贵的深度缓冲区分辨率。
float const view_distance = mesh.radius + 1;
float const aspect = (float)DISPLAY_WIDTH / (float)DISPLAY_HEIGHT;
switch( typeof_projection ){
case perspective:
m_projection = glm::perspective(70.0f, aspect, 1.f, 1000.0f);
break;
case ortho:
m_projection = glm::ortho(
-aspect * view_distance,
aspect * view_distance,
view_distance,
view_distance,
-1000, 1000 );
break;
}
m_position = glm::vec3(mesh.centre.x, mesh.centre.y, -view_distance);
m_forward = centre;
m_up = glm::vec3(0.0f, 1.0f, 0.0f);
return m_projection * glm::lookAt(m_position, m_forward, m_up);
相关文章:
- 在 OpenGL 中使用透视与正交投影时的光线投射(鼠标拾取)
- 透视视图的任何解决方案 openGL qt.
- 从固定函数迁移到 GLSL OpenGL:我应该如何修改我的视图(lookAt)矩阵和透视矩阵?
- 禁用对透视的焦点
- OpenGL 透视投影裁剪多边形与顶点在视锥体之外 = 错误的纹理映射?
- 如何在透视视图中绘制文本
- OpenCV 透视编辑和裁剪
- 从正交投影平滑过渡到透视投影
- 部分透视/高斯消除 - 交换列而不是产生错误输出的行
- 现代Opengl:同时正投影和透视投影
- 食人魔:模拟透视视图缩放对象
- 是胶质项目缺少透视划分的文档
- 绕Y轴旋转二维正方形,并使用DirectX或openGL以透视投影方式显示
- 透视投影 OPENGL 和计算着色器
- Frustum和透视矩阵
- 透视矩阵的旋转角度
- C++快速排序透视优化
- 透视到世界空间逆投影
- 在C++中的OpenGL中将坐标从三维透视投影映射到二维正投影
- 从透视到正投影