使用NSBitmapImageRep使用alpha创建OpenGL纹理

时间:2011-08-03 09:31:13

标签: opengl transparency alpha nsbitmapimagerep glblendfunc

我正在使用以下方式加载PNG:

theImage = [NSBitmapImageRep imageRepWithContentsOfFile:imagePath];

我可以成功地创建一个gl纹理并正确渲染而没有任何透明度。但是,当我使用以下方式切换混合时:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

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

我在混合函数中尝试了几个选项,GL_SRC_ALPHAGL_ONE_MINUS_SRC_ALPHAGL_ONEGL_DST_ALPHA等。

我被教过,也许我需要对图像数据中的位进行重新排序,可能是通道已经混淆了,但在这种情况下,当混合关闭时,我不希望它能正确渲染。

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

1 个答案:

答案 0 :(得分:4)

提供屏幕截图怎么样?


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

  • 普通alpha:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

  • 预乘alpha:glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)