2012-07-19 72 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