【发布时间】:2010-01-20 05:20:00
【问题描述】:
我有一个在世界坐标中定义的对象,例如一个以 (2,3) 为中心、半径为 4 的圆。如果我希望圆不变形,则在视口中完全可见并尽可能大在视口中,如何根据上述规范制定 gluOrtho2D 命令来创建世界窗口:
glViewport(20, 30, 1000, 500)?
我对整个视口、世界、屏幕等坐标感到困惑。有人可以带我过去吗?我真的很想掌握这个。
【问题讨论】:
我有一个在世界坐标中定义的对象,例如一个以 (2,3) 为中心、半径为 4 的圆。如果我希望圆不变形,则在视口中完全可见并尽可能大在视口中,如何根据上述规范制定 gluOrtho2D 命令来创建世界窗口:
glViewport(20, 30, 1000, 500)?
我对整个视口、世界、屏幕等坐标感到困惑。有人可以带我过去吗?我真的很想掌握这个。
【问题讨论】:
在您的示例中,视口的宽度为 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 调用就不需要更改。
【讨论】:
gluOrtho2D()(参见 glu):opengl.org/sdk/docs/man2/xhtml/gluOrtho2D.xml,或 @ 987654326@:opengl.org/sdk/docs/man2/xhtml/glOrtho.xml