gluOrtho2D和glViewport

Ale*_*lex 13 opengl viewport viewing

我有一个以世界坐标定义的对象,比如一个以(2,3)为中心的半径为4的圆.如果我希望圆不被扭曲,在视口中完全可见并且在视口内尽可能大,我如何根据前面提到的规格制定一个gluOrtho2D命令来创建一个世界窗口:

glViewport(20, 30, 1000, 500)?
Run Code Online (Sandbox Code Playgroud)

我对整个视口与世界vs屏幕等坐标感到困惑.有人可以带我走过吗?我真的想要了解这一点.

Tar*_*don 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);
Run Code Online (Sandbox Code Playgroud)

那是:

glOrtho2D (-6, 10, -1, 7);
Run Code Online (Sandbox Code Playgroud)

这有效地将-6的X坐标映射到视口的左边缘.然后glViewport映射将其映射到屏幕上的实际位置.随着屏幕尺寸的变化,您必须调整glOrtho2D坐标以补偿纵横比,但只要视口为2:1,这些glOrtho2D调用就不需要更改.

  • @Alex:它并没有真正影响glOrtho2D将会是什么.我们说:将模型坐标中-6的X坐标映射到视口的左边缘(已经映射到窗口中的像素20). (4认同)
  • 请注意:这不是glOrtho2D,这是**`gluOrtho2D()`**(参见**glu**):http://www.opengl.org/sdk/docs/man2/xhtml/gluOrtho2D.xml ,或者``glOrtho()`**:http://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml (2认同)