OpenGL 2D非矩形区域裁剪

6
我正在使用OpenGL编写自己的2D GUI库,目前我已经实现了一个容器控件,可以包含图形元素(如圆角矩形或星形)和其他子控件等等。我尝试将子控件和图形元素的渲染限制在父控件内部,这样如果子控件超出容器边界,就不会被渲染。
我的第一个想法是使用"裁剪测试",在搜索网页时发现了它。但问题是,我只能使用矩形裁剪,而我希望能够在任意区域(如星形多边形)内进行裁剪。
我有一个想法...
当绘制控件及其图形元素时,我查看该控件是否需要裁剪其内容。如果是,我将其以统一的白色颜色绘制在黑色背景的离屏纹理中。然后我将其发送到着色器程序中。因此,我使用激活的着色器程序渲染每个子控件(包括控件和图形元素)。在片段着色器中,对于每个片段,我会查看之前传递的特殊纹理中相同坐标的像素。如果特殊纹理中的像素为白色,则可以渲染此片段,因为它在可见区域内。
你认为这个方法可行吗?这是一个好主意还是有更好的方法?
1个回答

2

根据您的需求,可以通过渲染到纹理或模板缓冲区来完成。这个链接提供了更多信息,帮助您入门:

OpenGL裁剪


1
嗨,谢谢你的回答。我继续阅读并看到了这个模板方案。我以前从未使用过它,但我认为它比着色器方案更容易实现。 - user1768815

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接