ios – 如何使用OpenGL避免透明度重叠?

ios – 如何使用OpenGL避免透明度重叠?,第1张

概述我正在研究iOS上的手写应用程序.我从iOS文档中找到了由OpenGL ES实现的示例项目“GLPaint”,并对其进行了一些修改. 我跟踪触摸点并计算点之间的曲线并单独绘制粒子图像曲线,使其看起来像手指经过的位置. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexImage2D(GL_TEXTURE_2 我正在研究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避免透明度重叠?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1113991.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存