Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es 在OpenGLes 1.1中设置边界形状?_Opengl Es_3d_Geometry - Fatal编程技术网

Opengl es 在OpenGLes 1.1中设置边界形状?

Opengl es 在OpenGLes 1.1中设置边界形状?,opengl-es,3d,geometry,Opengl Es,3d,Geometry,基本上,我试图用OpenGL制作一个分层系统,它必须支持层层次结构(层可以有子层等等)。当图层具有父图层时,绘制时必须将其剪裁到其父图层。当所有层都是矩形时,它是相当直接的,我可以计算出交叉点并裁剪出超出边界的位。然而,每一层也可以有一个变换矩阵,如果我们在另一层中变换一层,它将不再是矩形,这意味着我不能计算出交点 下图显示了问题(父项为粉红色,子项为浅绿色): 对于上面的示例,一个glScissor调用足以设置一个矩形边界框,但这不起作用,因为父层也可以变换(因此不再是矩形)。此外,如果父层

基本上,我试图用OpenGL制作一个分层系统,它必须支持层层次结构(层可以有子层等等)。当图层具有父图层时,绘制时必须将其剪裁到其父图层。当所有层都是矩形时,它是相当直接的,我可以计算出交叉点并裁剪出超出边界的位。然而,每一层也可以有一个变换矩阵,如果我们在另一层中变换一层,它将不再是矩形,这意味着我不能计算出交点

下图显示了问题(父项为粉红色,子项为浅绿色):

对于上面的示例,一个
glScissor
调用足以设置一个矩形边界框,但这不起作用,因为父层也可以变换(因此不再是矩形)。此外,如果父层被变换,则在渲染子层之前,子层的变换矩阵将乘以父层的变换矩阵,因此即使在变换时,也会产生子层位于父层内部的错觉。

一些建议:

  • 自己剪裁子层的几何图形(快速,但需要进行数学运算)
  • 将每个层渲染为纹理(灵活但对于许多层来说速度较慢)
  • 使用模具缓冲区(多层填充率密集型)

是的,我曾考虑使用#2,但速度相当慢。是否有任何代码片段或示例可以告诉我,当两个层都可以使用4x4矩阵进行变换时,如何计算剪裁几何体?“将每个层渲染为纹理”,就像使用FBO+绑定纹理一样?根据我的经验,那应该很快。。无论如何,正如rasmus所说,您可以使用模具缓冲区,因为您可以使用任何矩阵使用原语绘制模具缓冲区。虽然我不能说它会比FBO方法更快..变换构成两层角的点。你得到的基本上是两个凸多边形,你需要找到它们之间的交点。这有一些算法。快速搜索显示:。虽然FBO可以被认为是快速的,但它比这种方法慢得多。