我正在研究iOS上的手寫應用程序。我從OpenGL ES實現的iOS文檔中找到了示例項目「GLPaint」,並對其進行了修改。如何使用OpenGL避免透明度重疊?
我跟蹤觸摸點並計算點之間的曲線,並單獨繪製粒子圖像的曲線,使其看起來像手指經過的位置。
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, 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, 0, vertexBuffer);
glDrawArrays(GL_POINTS, 0, vertexCount);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
我得到的是一條實線,看起來相當不錯。但現在我想繪製半透明的高光而不是實線。所以我用50%的透明度替換了粒子圖像而不更改代碼。
Result of 50% transparency particle image
也有一些是錯誤的交融。
我繪製使用半透明度顆粒圖像的三個點,並且交叉區域應保持50%的透明度。
解決方案是什麼?
問題是你需要消除透支,這對於一般情況來說是不可能的,只是「混合」。您可以使用深度緩衝區(使用alpha測試),但不能正確反鋸齒。如果你希望這樣做能夠得到正確的反對意見,那麼正確的做法並不是微不足道的,至少在一般情況下是這樣。您需要首先渲染到額外的幀緩衝區,然後在第二遍渲染。 – Damon
感謝您的回覆。我是OpenGL的新手,但我仍然不清楚OpenGL中的大多數概念。我認爲antialias不是問題。您能否詳細說明代碼? –