我正在使用OpenGL编写自己的2D GUI库,并且在步骤中我有一个容器控件,该容器控件可以包含图形元素(如圆角矩形或星形)和其他子控件...等等...
我尝试将子控件和图形元素的呈现剪切到父控件中。因此,如果子控件溢出容器边界,则不会呈现该控件。

我的第一个想法是在搜索网络时发现“剪刀测试”。
但是问题是我受制于矩形裁剪,并且希望能够在任意区域(如星形多边形)中裁剪内容。

我有个主意...

是时候绘制控件及其图形元素了,我看看我的控件是否必须裁剪其内容。如果是,我在屏幕外纹理的黑色背景上用均匀的白色绘制它。然后,我将其发送到着色器程序。
因此,我在激活着色器的情况下渲染了每个 child (控件和图形元素)。
在此片段着色器中,对于每个片段,我认为在先前通过的特殊纹理中查看相同的坐标。如果特殊纹理中的片段为白色,则可以渲染该片段,因为它位于可见区域中。

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

最佳答案

可以根据您的需要通过多种方式完成。渲染到纹理或模板缓冲区可能是最好的选择。该链接包含更多信息,可帮助您入门:

OpenGL clipping

关于OpenGL 2D不是矩形区域裁剪,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13034638/

10-15 22:21