我有一个以世界坐标定义的对象,比如一个以(2,3)为中心的半径为4的圆。如果我希望圆不被扭曲,在视口中完全可见并且尽可能大在视口中,如何根据前面提到的规格制定gluOrtho2D命令来创建世界窗口:
glViewport(20, 30, 1000, 500)?
我对整个视口与世界vs屏幕等坐标感到困惑。有人可以带我走过吗?我真的想要了解这一点。
答案 0 :(得分:27)
在您的示例中,视口为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调用就不需要更改。