2010-05-18 120 views
5

如何在OpenGL中剪裁渲染(簡單的矩形區域)? 請發佈一個C++示例。如何在OpenGL中剪裁渲染(C++)

+1

這可能更好地描述你試過的東西,如果有的話,而不是簡單地要求示例代碼。這裏有一個OpenGL Red Book的鏈接,它可以免費在線,並且可能有關於你在找什麼的信息。 http://www.glprogramming.com/red/ – Feanor 2010-05-18 22:06:00

+0

謝謝你的鏈接。我已經玩過glFrustum,預測等等,但是很久以前。我想接受一個很好的簡單剪裁示例。 – 2010-05-18 22:15:45

回答

2

如果你只想顯示特定矩形,你需要像glFrustrumglViewPort沿glOrtho的東西的組合。它實際上是glViewPort,它設置剪輯矩形。 glFrustrum,glOrthogluPerspective等),然後將一些真實座標映射到那個矩形。通常情況下,您幾乎不會注意到glViewPort,因爲它通常設置爲您正在使用的任何窗口的整個區域,並且您更改的是映射以在窗口中獲取不同的視圖。

如果您自己調整glFrustum(例如),屏幕上的顯示區域將保持不變,您只需更改映射,以便仍然可以填充整個窗口區域,並且基本上只是移動虛擬相機,所以你放大或縮小(等)顯示的「世界」。相反,如果您只調整glViewPort,則會顯示完全相同的數據,但顯示爲較小的矩形。

要將數據「剪輯」到較小的矩形中,您需要一次調整兩個方向,或多或少地調整「相反」方向,以便視角端口矩形變小,您可以放大視角以補償視角。

7

你可能需要的是OpenGL的scissor機制。

剪輯渲染不屬於由xywidthheight參數定義的矩形像素。

請注意,此OpenGL狀態啓用時,通過限制清除的區域影響glClear命令。

+0

如何防止所有將來呈現的場景對象被剪切矩形剪切?換句話說,如果您只想爲GUI元素的子元素應用該剪切矩形,但是想要渲染場景中的其他對象,您將如何防止所有其他對象被該矩形剪裁? – BigSauce 2012-07-28 16:00:40

+0

我並不確切地知道你的意思,但通常的做法是通過使用FBO和通行證將GUI渲染與3D渲染分開。 – Stringer 2012-07-29 20:02:08