基本上,我想知道当视口/窗口大小改变时如何消除渲染图像的变形或拉伸。
下图举例说明了我正在谈论的变形/拉伸:
原始图像(方形窗口)
变形/拉伸图像(矩形窗口)
理想情况下,第二个图像应在不进行水平拉伸的情况下显示球体,并向用户显示更多场景,以说明更大的窗口大小。
如何才能做到这一点?
我正在使用OpenGL渲染图像,并且通过调用使用了透视投影:
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60, window.width/window.height, 0.01f, 100.0f)
纵横比width/height
与我遇到的所有文档/教程一致,因此我并不认为它是错误的。但是,我怀疑它正在影响拉伸问题。
经过思考
老实说,随着我对这个问题的思考越来越多,我相信解决方案涉及到弯曲(y方向上的视场)角度与纵横比之间的直接比例关系。
使用上面的图像作为参考,如果宽度增大(导致水平拉伸),则必须增加fovy角度以引起垂直拉伸,从而“固定”渲染图像的比例,这似乎是很合理的。
同样,宽度的减小要求减小凹角。
更新:
因此,在进一步研究之后,我决定更改设置视锥的方法,如下所示:
gluPerspective(60 * (float)window.width/window.height, (float)window.width/window.height, 0.01f, 100.0f)
我的期望是正确的,这解决了比例问题。但是,它没有达到我想要的结果。当窗口宽度增加时,渲染的图像变小(但球体确实是圆形的)。相反,球体根本不应该改变大小。仅显示的场景量应更改。