我制作了一个800x600
的窗口。我打电话了
gluOrtho2D(-400,400,-300,300);
glViewport(400,300,400,300);
我从(-100,-100)
到(100,100)
画了一条线。我想我应该看到从(0,0)
到(100,100)
的一行,但我得到了整行。这是为什么?
答案 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
的视口内绘制