我有一个在世界坐标中定义的对象,就是以(2,3)为中心的半径为4的圆.如果我想让圆不被扭曲,在视口中完全可见,并且在视口内尽可能大,如何制定一个gluOrtho2D命令来创建一个基于上述规范的世界窗口:
glViewport(20,30,1000,500)?
我对整个视口vs世界vs屏幕等坐标感到困惑.有人可以走过我吗?我真的想得到这个的悬念.
解决方法
在您的示例中,视口是1000像素,高达500像素.因此,您需要指定具有相同宽高比(2:1)的glOrtho坐标.
你的圆圈半径是4个单位,所以你需要一个8单位高8单位宽度的视图.考虑到2:1宽高比,让16个单位宽8个单位.
中心在(2,3).所以将这些16 x 8围绕着你应该得到:
glOrtho2D (2 - 8,2 + 8,3 - 4,3 + 4);
那是:
glOrtho2D (-6,10,-1,7);
这有效地将-6的X坐标映射到视口的左边缘.然后,glViewport映射将其映射到屏幕上的实际位置.随着屏幕尺寸的变化,您必须调整glOrtho2D坐标以补偿宽高比,但只要视口为2:1,这些glOrtho2D调用就不需要更改.