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