opengl-es - 如何在 OpenGL 中使两个平滑的形状相交?

标签 opengl-es opengl-es-2.0 alpha masking blending

我已经成功地在 OpenGL 中绘制了两个平滑的形状,使用一个生成三角形 strip 的例程,其最外边线的所有顶点都在 alpha 0 处。 .现在我想将它们相交,但我似乎总是失去一个形状的平滑边缘。这是我正在使用的代码:

// Draw: smooth black shape as normal

glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
// Draw: smooth black shape into alpha channel

glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glBlendFunc(GL_DST_ALPHA, GL_SRC_ALPHA);
// Draw: Yellow overlay shape with black shape's alpha

// Reset blending modes for rest of program
Combined Shapes

这是结果(底部)——黄色形状失去了其平滑的右侧边缘,因为这些像素中的 alpha 现在为 1。我怎样才能获得平滑的相交形状?

最佳答案

你需要这样的片段:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation(GL_FUNC_ADD);
glEnable(GL_BLEND);

我认为一个关键元素是 glEnable(GL_BLEND)。

关于opengl-es - 如何在 OpenGL 中使两个平滑的形状相交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15414808/

相关文章:

c++ - segmentation 后如何查看生成的边?

ios - iPhone 6s/RoboVM (?) GLTexImage2D 渲染问题

c# - 如何在 .Net 中使用 32 位 alpha 混合 BMP

opengl-es - 在一个着色器中为不同的属性使用不同的 GL_ELEMENT_ARRAY_BUFFER?

iphone - GLSL:iPhone应用程序无法访问内置属性?

opengl-es - 是否有工具可以获取 GLSL 着色器的预处理输出?

ios - 调整 UIColor 的 alpha

python - 带 OpenGL 的 Alpha 蒙版

ios - iPad 缺少 OpenGL 扩展字符串 GL_APPLE_texture_2D_limited_npot

java - Android OpenGL ES 2.0 3D 透视