2009-12-17 33 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

相關問題