2012-08-30 67 views
1

基本上,我试图用OpenGL | es来制作分层系统,它必须支持图层层次结构(图层可以有子图层等)。当一个图层有一个父图层时,它在绘制时必须剪切到其父图层。当所有图层都是矩形的时候,它是非常直接的,我可以制定交叉点并且突出显示边界位。但是,每个图层也可以有一个变换矩阵,如果我们在另一个图层内部转换一个图层,它将不再是矩形,这意味着我不能只计算交点。在OpenGLes 1.1中设置边界形状?

下图显示了该问题(母体是粉红色,而孩子在淡绿色):

Issue

对于上面的例子,一个glScissor呼叫就足够了设置矩形边界框,但这不会做,因为父层也可以被转换(所以它将不再是矩形)。另外,如果父图层被转换,那么在子图像被渲染之前,子图像的变换矩阵会乘以父图像的变换矩阵,因此即使在变换后,也会在父图像内创建子图像。

回答

0

几点建议:

  • 夹的子层自己的几何形状(快,但你需要做数学题)。
  • 将每个图层渲染为纹理(灵活但很多层都很慢)。
  • 使用模板缓冲区(填充多个图层的速度)。
+0

是的,我正在考虑使用#2,但它相当缓慢。是否有任何代码片段或示例可以告诉我如何在使用4x4矩阵转换两个图层时如何计算剪切几何体? –

+0

“使用FBO +绑定纹理将每个图层渲染为纹理”?根据我的经验,这应该相当快。无论如何,rasmus说你可以使用模板缓冲区,因为你可以使用任何矩阵来绘制模板缓冲区。虽然我不能说它会更快,然后FBO的方法.. –

+0

变换组成两个角落的点。你得到的基本上是两个凸多边形,你需要找到它们之间的交集。有这个算法。快速搜索显示:[链接](http://oai.dtic.mil/oai/oai?verb=getRecord&metadataPrefix=html&identifier=ADA274722)。虽然FBO可以被认为是快速的,但比这种方法要慢得多。 – rasmus