14

我有一个在世界坐标中定义的对象,比如一个以 (2,3) 为中心、半径为 4 的圆。如果我希望圆不变形,则在视口中完全可见并在视口中尽可能大,我如何制定一个 gluOrtho2D 命令来根据上述规范创建一个世界窗口,因为:

glViewport(20, 30, 1000, 500)?

我对整个视口与世界与屏幕等坐标感到困惑。有人可以带我过去吗?我真的很想掌握这个。

4

1 回答 1

28

在您的示例中,视口为 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 调用就不需要更改。

于 2010-01-20T06:07:39.973 回答