我正在研究iOS上得手寫應用程序.我從iOS文檔中找到了由OpenGL ES實現得示例項目“GLPaint”,并對其進行了一些修改.
我跟蹤觸摸點并計算點之間得曲線并單獨繪制粒子圖像曲線,使其看起來像手指經過得位置.
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexImage2D(GL_TEXTURE_2D,GL_RGBA,width,height,GL_UNSIGNED_BYTE,brushData); // burshData is from CGImage,it is // vertexBuffer is generated based on the calculated points,it's just a sequence of point where need to draw image.glVertexPointer(2,GL_FLOAT,vertexBuffer); glDrawArrays(GL_POINTS,vertexCount);glBindRenderbufferOES(GL_RENDERBUFFER_OES,viewRenderbuffer);[context presentRenderbuffer:GL_RENDERBUFFER_OES];
我得到得是一條看起來相當不錯得實線.但現在我想繪制半透明高光而不是實線.因此,我使用50%透明度替換粒子圖像而不更改代碼.
Result of 50% transparency particle image
混合有問題.
What I need
我使用半透明度粒子圖像繪制三個點,交叉區域應保持50%得透明度.
解決方案是什么?
解決方法
我可能在兩年后回答了這個問題,但我希望它能幫助那些來這里尋找解決方案得人,比如發生在我身上.
您將需要為每個cirle分配不同得z值.無論這個差異有多大或多小,我們只需要他們不要嚴格平等.
首先,禁用在顏色緩沖區中寫入glColorMask(false,false,false),然后正常繪制圓圈. Z緩沖區將根據需要進行更新,但不會繪制任何圓圈.
然后,啟用在顏色緩沖區中寫入(glColorMask(true,true,true))并將depthFunc設置為LEQUAL(glDepthFunc(GL_LEQUAL)).只有最近得圓形像素才會通過深度測試(將其設置為LEQUAL而不是EQUAL會處理一些罕見但可能得浮點近似誤差).啟用混合并再次繪制它們將生成所需得圖像,沒有透明度重疊.
以上是來客網為你收集整理得ios – 如何使用OpenGL避免透明度重疊?全部內容,希望內容能夠幫你解決ios – 如何使用OpenGL避免透明度重疊?所遇到得程序開發問題。
如果覺得來客網網站內容還不錯,歡迎將來客網網站推薦給程序員好友。
聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。