使用NSBitmapImageRep创建带有alpha的OpenGL纹理



我正在使用:

加载PNG
theImage = [NSBitmapImageRep imageRepWithContentsOfFile:imagePath];

,我可以成功地创建一个gl纹理和渲染正确没有任何透明度。然而,当我使用:

切换混合
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

纹理使用正确的透明背景渲染,但是图像颜色不正确。

我在混合功能中尝试了几个选项,GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_DST_ALPHA等。

我被教导也许我需要重新排序图像数据中的位,也许通道已经混淆了,但我不希望它在混合关闭时正确渲染。

或者,我可以使用libPNG我猜,但我想尝试使用NSBitmapImageRep,如果它是可能的。

提供截图怎么样?


无论如何,你的混合函数对于简单的透明通道混合都是错误的。应该是
  • normal alpha: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

  • 预乘alpha: glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)

相关内容

  • 没有找到相关文章

最新更新