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

发布于 2024-11-27 13:06:56 字数 539 浏览 2 评论 0原文

我正在使用以下方式加载 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。

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

提笔落墨 2024-12-04 13:06:56

提供一下截图怎么样?


不管怎样,对于简单的透明通道混合来说,你的混合函数都是错误的。它应该是

  • 普通 alpha:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

  • 预乘 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

  • normal alpha: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

or

  • premultiplied alpha: glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文