2012-10-23 139 views
6

我正在用OpenGL編程我自己的2D GUI庫,並且我在容器控件的步驟中可以包含圖形元素(如圓角矩形或星形)和其他孩子控件等... 我嘗試將子控件和圖形元素的渲染剪裁到父控件中。所以如果一個子控件溢出容器邊界,它不會被渲染。OpenGL 2D非矩形區域剪輯

我的第一個想法是在搜索網頁時發現它後使用「剪刀測試」。 但問題是,我被限制爲矩形剪輯,我希望能夠剪輯像星形多邊形形狀的任意區域中的內容。

我有一個想法...

當它繪製控件及其圖形元素的那一刻,我看如果我的控制必須剪輯的內容或沒有。如果是的話,我在黑色背景上用一種統一的白色將其繪製成非屏幕紋理。然後我將它發送給着色器程序。 所以我渲染每個孩子(控件和圖形元素)與我的着色器激活。 在這個片段着色器中,對於每個片段,我認爲在先前通過的特殊紋理中查看相同的座標。如果特殊紋理中的片段是白色的,我可以渲染此片段,因爲它位於可見區域中。

你認爲它可以工作嗎?這是一個好主意還是有更好的主意?

回答

2

根據您的需要,可以通過幾種方法完成。渲染紋理或模板緩衝區可能是最好的選擇。此鏈接有更多的信息讓你開始:

OpenGL clipping

+1

嗨,謝謝你的回答。我繼續閱讀並看到這個模板解決方案。我從來沒有使用過,但我認爲比着色器解決方案更容易實現。 – user1768815