我已经阅读有关剪辑的文章几个小时了,但我似乎没有找到解决问题的方法。
这是我的场景:
在 OpenGL ES 环境(IOS,Android)中,我有一个由可绘制对象组成的 2D 场景图,形成一棵树。
每个树节点都有自己的空间房间和自己的变换矩阵,每个节点都将其坐标空间继承给其子节点。每个节点都有一个矩形边界框,但这些边界框不是轴对齐的。
此设置非常适合渲染 2D 场景图,遍历树,渲染每个对象,然后是子对象。
现在我的问题来了:我正在寻找一种在节点上启用剪辑的方法。启用裁剪后,节点的子节点在离开父边界框区域时应被裁剪。
例如,我想要一个包含一组文本节点作为子节点的节点,它可以随着它的父边界框上下滚动,并且在离开父边界框区域时应该被剪裁。
由于边界框不是轴对齐的,我不能使用 glScissor,这将是最简单的方法。
我正在考虑使用模板缓冲区并将填充的边界矩形绘制到其中,当启用剪辑时,然后启用模板缓冲区。这可能会奏效,但会导致另一个问题:如果剪辑节点内的子节点再次剪辑会发生什么?- 必须为孩子设置模板掩码,擦除父母的模板掩码。
我正在考虑的另一个解决方案是在软件中进行剪辑。这是可能的,因为在每个节点内,剪裁可以在它自己的局部坐标空间中相对容易地完成。这个解决方案的缺点是必须为每个实现的新节点类型实现裁剪。
这里有人能指出我正确的方向吗?我正在寻找的是类似于 glscissor 的功能,用于裁剪非轴对齐的矩形区域。