我正在使用以下方式加载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
。
答案 0 :(得分:4)
提供屏幕截图怎么样?
无论如何,对于简单的透明度通道混合,您的混合功能都是错误的。它应该是
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
或
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)