2009-12-17 29 views
3

我做了一个窗口大小为800x600。我叫gluortho2d和glViewport的实际区别是什么

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

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

回答

10

理论上,glViewportdoesn'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

希望帮助!

+0

雅谢谢你的答复...................我想我越来越它的挂起 – codemax 2009-12-18 13:38:19

+0

是的。这件事起初可能很棘手。最终,你会发现它是第二天性。 – 2009-12-19 04:57:06

+1

我一直在试图证明glViewport不会做任何剪裁,但每次我尝试我看到它的剪辑。例如,从(0,3),(3,-3),( - 3,3)绘制一个三角形。看到一个剪裁的三角形。设置glViewport(windowWidth/4,windowHeight,windowWidth/2,windowHeigth/2);有效地看到显示屏中间的同一个剪辑三角形。如果glViewport没有做任何剪辑,我希望看到更多的三角形,但我不知道。我没有得到什么? – gman 2012-03-13 07:54:36

0

glViewport描述了OpenGL绘制的窗口区域。 glOrtho或gluOrtho2D定义了一个适合(通过glViewport定义的)区域的单位系统(OpenGL单位)。 所以你的线将被绘制在-100,-100到100,100之间的视口

+0

感谢您的回复.........有点得到它 – codemax 2009-12-18 13:38:54

相关问题