0

我正在使用以下方法加载 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,但如果可能的话,我想尝试使用 a NSBitmapImageRep

4

1 回答 1

4

提供截图怎么样?


无论如何,对于简单的透明度通道混合,您的混合功能都是错误的。它应该是

  • 正常阿尔法:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

或者

  • 预乘阿尔法:glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
于 2011-08-03T10:14:32.257 回答