gluortho2d和glViewport之间的实际差异是什么?

时间:2009-12-17 18:28:11

标签: opengl

我制作了一个800x600的窗口。我打电话了

gluOrtho2D(-400,400,-300,300);
glViewport(400,300,400,300);

我从(-100,-100)(100,100)画了一条线。我想我应该看到从(0,0)(100,100)的一行,但我得到了整行。这是为什么?

2 个答案:

答案 0 :(得分:10)

理论上,glViewport doesn't cause any clipping (see section 10)。通常,所有绘图都会剪切到窗口。由于您已要求OpenGL绘制到窗口的某个区域,因此您还需要告诉OpenGL剪切此视口外的坐标。为此,您需要glScissor。但是,某些实现会将其绘图剪切到视口(有关详细信息,请参阅我的注释)。

另外,你的数学错了。您的投影矩阵是800个单位宽,600个单位高,以(0,0)为中心。然后将其映射到窗口右上角的400像素宽×300像素高的窗口部分。

如果从(-100,-100)到(100,100)绘制一条线,它将仅延伸到观察截头体的一小部分。截头体的大小适合视口。

在图像中,蓝色框是窗口,红色框表示视口。黑线应该是你画的线。

An image describing what the paragraph says. http://img696.imageshack.us/img696/6541/opengl.png

希望有所帮助!

答案 1 :(得分:0)

glViewport描述了由OpenGL绘制的窗口区域。 glOrtho或gluOrtho2D定义了一个单位系统(OpenGL单位),它适合(通过glViewport定义)区域。 因此,您的线将在-100,-100到100,100

的视口内绘制