我做了一个窗口大小为800x600
。我叫gluortho2d和glViewport的实际区别是什么
gluOrtho2D(-400,400,-300,300);
glViewport(400,300,400,300);
,我画了一条线从(-100,-100)
到(100,100)
。我想我应该看到从(0,0)
到(100,100)
的一行,但我已经看到了整条线。为什么是这样?
我做了一个窗口大小为800x600
。我叫gluortho2d和glViewport的实际区别是什么
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剪切该视口之外的坐标。为此,您将需要glScissor
。但是,有些实现会将他们的图形剪辑到视口中(请参阅我的评论以获取详细信息)。
此外,你的数学是错误的。您的投影矩阵800个单位宽,600个单位高,以(0,0)为中心。然后将其映射到窗口右上角的400像素宽×300像素高的窗口部分。
如果你画一条从(-100,-100)到(100,100)的直线,它只会延伸到你的观看区域的一小部分。该frustrum大小适合在视口。
在图像中,蓝色框是窗口,红色框表示视口。黑线应该是你画的线。
An image describing what the paragraph says. http://img696.imageshack.us/img696/6541/opengl.png
希望帮助!
glViewport描述了OpenGL绘制的窗口区域。 glOrtho或gluOrtho2D定义了一个适合(通过glViewport定义的)区域的单位系统(OpenGL单位)。 所以你的线将被绘制在-100,-100到100,100之间的视口
感谢您的回复.........有点得到它 – codemax 2009-12-18 13:38:54
雅谢谢你的答复...................我想我越来越它的挂起 – codemax 2009-12-18 13:38:19
是的。这件事起初可能很棘手。最终,你会发现它是第二天性。 – 2009-12-19 04:57:06
我一直在试图证明glViewport不会做任何剪裁,但每次我尝试我看到它的剪辑。例如,从(0,3),(3,-3),( - 3,3)绘制一个三角形。看到一个剪裁的三角形。设置glViewport(windowWidth/4,windowHeight,windowWidth/2,windowHeigth/2);有效地看到显示屏中间的同一个剪辑三角形。如果glViewport没有做任何剪辑,我希望看到更多的三角形,但我不知道。我没有得到什么? – gman 2012-03-13 07:54:36