2012-07-19 49 views
1

首先,为避免误解,opengl只适用于三角形。OpenGL ES减去几何形状

我得到了一个矩形(三角形条),是否有可能在该矩形中切出一个圆孔(或多个孔)。 这一切都在2d。

+1

这个答案是相关的吗? http://stackoverflow.com/a/11264120/10468 – DarenW 2012-07-19 20:27:34

+0

@DarenW csg会waayy对我来说太慢,这应该是一个动态壁纸。因为它在2D而不是3D,所以必须有一个简单的解决方案。 – teamalpha5441 2012-07-19 20:30:04

回答

2

opengl不支持真正的几何减法,但它可以很容易伪造深度缓冲区或模板缓冲区。

  1. 面膜你的颜色所以没有被吸引到颜色缓冲器:
    glColorMask(false, false, false, false)
  2. 画出你“孔”到场景上,在沉积值插入任一深度缓冲器(比三角形带值以下)或模板缓冲区。

  3. 禁用颜色蒙版,然后渲染启用了深度或模板测试的三角形条。您之前绘制的区域将被遮盖,所以您会留下一个中间有一个洞的矩形。

0

作为替代Tim的解决方案,你也可以使用自定义的片段着色器,削减孔: 您可以使用掩模纹理或只是(X,Y)坐标 - 和半径定义孔。那么你可以简单地把你的三角形片段discard()放在洞里。 最好的解决方案可能取决于你想要的孔的数量(一个蒙版纹理可能是最简单,最灵活的方法,特别是如果你还想要非圆形的孔,而距离测试可能是好的,你只有几个洞)。

+0

我也有这个想法,但我无法找到如何获得当前碎片坐标以及如何在每个孔的x和y坐标中传递 – teamalpha5441 2012-07-20 10:34:09

+1

正如您现在可能知道的那样,当前碎片坐标存储在' gl_FragCoords'。 – kroneml 2012-07-20 12:36:57

+0

(+1)多数民众赞成我正在寻找,我真的应该开始阅读文件... – teamalpha5441 2012-07-20 13:15:00