iPhone opengl es alpha 混合。我的边缘是黑色的

标签 iphone opengl-es alphablending

我正在开发 iPhone 游戏。我有下面的源图像将其绘制到背景。源图像的 alpha 值为 0x00,边缘周围有渐变,背景的 alpha 值为 0xff。当我将源图像绘制到背景时,我有黑色,就像您可以看到结果图像一样。我正在使用 OpenGL ES glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 方法。我已经改变了每一个可能的论点,但每次都是不为所动。

为什么源图像的边缘是黑色?问题是什么? iPhone上的游戏不是都使用渐变吗?

我需要制作没有渐变的源图像吗?

有人知道解决办法吗?

源图像:

alt text

结果图像:

alt text

最佳答案

您的图像有预乘 Alpha 吗?那么你应该使用

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

Here是对其含义的一些解释。

注意:我在做了一些研究后重写了答案。提到的文章rotoglup对正在发生的事情有一些见解,它比我原来的公式更有意义。我还尝试查看其他人在他们的代码中使用的公式,看起来这个公式是最常用的公式。令人惊奇的是,像 alpha 混合这样的 3D 图形中的基本功能竟然会引起如此大的争议,而且每个人似乎都在重新发明轮子并提出自己的解决方案。

关于iPhone opengl es alpha 混合。我的边缘是黑色的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4771224/

相关文章:

iphone - "cellForRowAtIndexPath:"中 indexPath.section 的奇怪行为

iphone - 我可以重新编码循环 UIImageView 以获得更短的代码吗?

iphone - AudioFileWriteBytes 失败,错误代码为 -40

opengl-es - OpenGL 固定函数着色器实现

alphablending - DirectX 11 Alpha 混合不起作用

iphone - 从 iPhone 上的 sleep 事件中唤醒?

iphone - 在 iOS 上使用 OpenGL ES 模拟多边形点画

java - glDrawElements() 会导致 Lollipop 崩溃,但在 KitKat 上正常

c++ - OpenGL 中的淡入淡出场景

python - 在 Python 中流式传输 FHD 视频的图像上覆盖热图