2010-03-07 32 views
2

我應該使用什麼glBlendFunc,以確保我的畫的不透明始終是一樣的嗎?當我使用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)和多個圖像被繪製在彼此的頂部上,結果是越來越不透明,直到它的一定數量imgaes的後完全不透明。與glBlendFunc恆定不透明度iPhone

我最近來的是使用glBlendFunc(GL_ONE_MINUS_DST_ALPHA,GL_ONE_MINUS_SRC_ALPHA),它保持一個不變的不透明度,不管有多少圖像在彼此之上,儘管如果圖像相互重疊,在不透明度上會有輕微的變化。

任何其他渲染狀態,我應該考慮嘗試?任何其他想法?我正在爲我的孩子製作一個繪畫應用程序,我不想讓他們畫的圖像(畫筆)來掩蓋背景。

繼承人的最接近我有:
ImageShask http://img43.imageshack.us/img43/5347/img0085f.png

我想擁有它,以便圈的重疊部分是相同的顏色和不透明度爲圓心部分。

我使用了cocos2d iphone訴0.99

回答

0

我落得這樣做:

glAlphaFunc(GL_NOTEQUAL, 0); 
[sprite1.texture setAliasTexParameters]; 
[sprite1 setBlendFunc: (ccBlendFunc) { GL_SRC_ALPHA, GL_ZERO }]; 

然後,當我畫我的CCRenderTexture,啓用alpha測試,請訪問我的刷精靈,然後禁用alpha測試。

2

抽獎(不透明度)爲渲染,然後用得到的圖像作爲紋理上部分透明的四在你的主場景。

下面是預RBO的OpenGL的方法,但不知道,如果你的設備將支持它,您可能需要將其轉換爲使用RBOs。

  • 確保你選擇具有至少一個AUX緩衝
  • glGenTextures分配紋理ID
  • glPushAttrib(GL_COLOR_BUFFER_BIT)
  • glDrawBuffer(AUX0)來直接渲染到屏幕外位圖
  • 顯示格式
  • glReadBuffer(AUX0)
  • glCopyTexSubImage2D把圖像劃分成一個紋理
  • glPopAttrib(GL_COLOR_BUFFER_BIT)至恢復拉伸緩衝器設置
  • glEnable(Texture_2D)
  • glBindTexture
  • 在glBegin(四邊形)
  • glColor(100%RGB,局部阿爾法)
  • glTexCoord(四次)
  • glVertex(四次)
  • glEnd

請注意您可能能夠重用多個幀相同的紋理•不用不必每次都重新渲染它,你也可以做一些旋轉或通過創造性地使用質地的拉伸座標四頂點映射。

+0

的一些代碼的任何機會呢?我不太明白你的意思。 – jjxtra 2010-03-07 21:14:02

+0

不幸的是我沒有發佈源代碼的權限我有這樣做(它使用OpenGL的舊版本,沒有渲染緩衝區對象,但想法是一樣的),但它與雙緩衝區幾乎相同。我會將這些步驟添加到我的答案中。 – 2010-03-07 23:43:09