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

cod*_*max 3 opengl

我做了一个窗户大小800x600.我打了电话

gluOrtho2D(-400,400,-300,300);
glViewport(400,300,400,300);
Run Code Online (Sandbox Code Playgroud)

我画了一条线,从(-100,-100)(100,100).我想我应该会看到一个从线(0,0)(100,100),但我得到了整条生产线.为什么是这样?

Dan*_*sky 10

从理论上讲,glViewport 不会造成任何削波(见第10节).通常,所有绘图都会剪切到窗口.由于您已要求OpenGL绘制到窗口的某个区域,因此您还需要告诉OpenGL剪切此视口外的坐标.为此,你需要glScissor.但是,某些实现会将其绘图剪切到视口(有关详细信息,请参阅我的注释).

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

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

在图像中,蓝色框是窗口,红色框表示视口.黑线应该是您绘制的线.

描述段落所说内容的图像.http://img696.imageshack.us/img696/6541/opengl.png

希望有所帮助!