我制作了一个大小为 800x600
的窗口。我打了电话
gluOrtho2D(-400,400,-300,300);
glViewport(400,300,400,300);
我在 (-100,-100)
到 (100,100)
之间画了一条线。我想我应该看到从 (0,0)
到 (100,100)
的一行,但我得到了整行。这是为什么呢?
最佳答案
理论上,glViewport
doesn't cause any clipping (see section 10) .通常,所有绘图都被剪切到窗口中。由于您已要求 OpenGL 绘制到窗口的某个区域,因此您还需要告诉 OpenGL 裁剪此视口(viewport)之外的坐标。为此,您将需要 glScissor
。但是,某些实现确实会将其绘图剪辑到视口(viewport)(有关详细信息,请参阅我的评论)。
另外,你的数学是错误的。您的投影矩阵宽 800 单位,高 600 单位,以 (0, 0) 为中心。然后将其映射到窗口右上角的 400 像素宽 x 300 像素高的窗口部分。
如果您从 (-100, -100) 到 (100, 100) 画一条线,它只会延伸到您的视锥体的一小部分。截锥体的大小适合视口(viewport)。
图中,蓝色框为窗口,红色框为视口(viewport)。黑线应该是你画的线。
An image describing what the paragraph says. http://img696.imageshack.us/img696/6541/opengl.png
希望有帮助!
关于opengl - gluortho2d 和 glViewport 之间的实际区别是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1923658/