2012-10-23 76 views
6

我正在用OpenGL编程我自己的2D GUI库,并且我在容器控件的步骤中可以包含图形元素(如圆角矩形或星形)和其他孩子控件等... 我尝试将子控件和图形元素的渲染剪裁到父控件中。所以如果一个子控件溢出容器边界,它不会被渲染。OpenGL 2D非矩形区域剪辑

我的第一个想法是在搜索网页时发现它后使用“剪刀测试”。 但问题是,我被限制为矩形剪辑,我希望能够剪辑像星形多边形形状的任意区域中的内容。

我有一个想法...

当它绘制控件及其图形元素的那一刻,我看如果我的控制必须剪辑的内容或没有。如果是的话,我在黑色背景上用一种统一的白色将其绘制成非屏幕纹理。然后我将它发送给着色器程序。 所以我渲染每个孩子(控件和图形元素)与我的着色器激活。 在这个片段着色器中,对于每个片段,我认为在先前通过的特殊纹理中查看相同的坐标。如果特殊纹理中的片段是白色的,我可以渲染此片段,因为它位于可见区域中。

你认为它可以工作吗?这是一个好主意还是有更好的主意?

回答

2

根据您的需要,可以通过几种方法完成。渲染纹理或模板缓冲区可能是最好的选择。此链接有更多的信息让你开始:

OpenGL clipping

+1

嗨,谢谢你的回答。我继续阅读并看到这个模板解决方案。我从来没有使用过,但我认为比着色器解决方案更容易实现。 – user1768815