使用 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。
I am loading a PNG using:
theImage = [NSBitmapImageRep imageRepWithContentsOfFile:imagePath];
from which I can successfully create a gl texture and render correctly without any transparency. However, when I switch blending on using:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
The texture renders with the correct transparent background, but the image colours are incorrect.
I have tried several options in the blend function, GL_SRC_ALPHA
, GL_ONE_MINUS_SRC_ALPHA
, GL_ONE
, GL_DST_ALPHA
, etc.
I was taught maybe I need to reorder the bits in the image data, maybe the channels have been mixed up, but I would not expect it to render correctly when blending is off in that case.
Alternatively, I could use libPNG I guess, but I would like to try using a NSBitmapImageRep
if it is possible.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
提供一下截图怎么样?
不管怎样,对于简单的透明通道混合来说,你的混合函数都是错误的。它应该是
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
或
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
How about supplying a screenshot?
Anyway, your blending function is wrong either way for simple transparency channel blending. It should be either
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
or
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)