C++ 如何在平行视图中保持良好的纵横比
我目前正在开发一个STL文件查看器,它提供两种类型的视图 透视图(工作正常): 平行视图(光线计算在这一点上有问题,但不是主题): 如您所见,平行视图已变形。以下是计算视图矩阵的方法:C++ 如何在平行视图中保持良好的纵横比,c++,opengl,glm-math,C++,Opengl,Glm Math,我目前正在开发一个STL文件查看器,它提供两种类型的视图 透视图(工作正常): 平行视图(光线计算在这一点上有问题,但不是主题): 如您所见,平行视图已变形。以下是计算视图矩阵的方法: float distance = glm::distance(focus,transform.GetPosition())* (ScreenSize.cx/ScreenSize.cy); float distanceY = glm::distance(focus,transform.GetPosition()
float distance = glm::distance(focus,transform.GetPosition())* (ScreenSize.cx/ScreenSize.cy);
float distanceY = glm::distance(focus,transform.GetPosition())* (ScreenSize.cy/ScreenSize.cx);
return glm::ortho(-distance ,distance ,-distanceY ,distanceY, 0.00001f, 10000.0f);
我必须解释一下这个代码:
- 焦点是我正在查看的模型的中心点(0)
- transform.GetPosition()返回相机的实际位置
- glm::distance(…)返回两个矢量之间的长度(相机矢量可以缩放或缩小到焦点)
如何防止我的3D模型在平行视图上的屏幕大小发生扭曲?删除一个屏幕大小位?现在,如果你的窗户是宽的3/4高,那么你的高度是3/4高(到目前为止还不错),但宽度也是4/3宽。你需要做一个或另一个,但不是两个都做 大多数电脑游戏似乎保持高度不变-因此垂直视距始终为1(例如)-并调整宽度:
float distance = glm::distance(focus,transform.GetPosition())*(ScreenSize.cx/ScreenSize.cy);
// delete this part vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
float distanceY = glm::distance(focus,transform.GetPosition())*(ScreenSize.cy/ScreenSize.cx);