【发布时间】:2012-12-18 17:56:38
【问题描述】:
我正在开发 iOS 上的手写应用程序。我从 iOS 文档中找到了由 OpenGL ES 实现的示例项目“GLPaint”,并对其进行了一些修改。
我跟踪触摸点并计算点之间的曲线并单独绘制粒子图像曲线使其看起来像手指经过的地方。
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 测试),但这不会正确抗锯齿。如果您希望对此进行适当的抗锯齿处理,那么要做到这一点并非易事,至少在一般情况下并非如此。您需要先渲染到额外的帧缓冲区,然后在第二遍中进行合成。
-
感谢您的回复。我是 OpenGL 的新手,我仍然不清楚 OpenGL 中的大多数概念。我认为抗锯齿不是问题。能否请您更详细地说明代码?
标签: ios opengl-es transparency alpha overlap