美文网首页
OpenGL 贴带透明度的纹理碰到的问题

OpenGL 贴带透明度的纹理碰到的问题

作者: 奔跑的蜗牛说 | 来源:发表于2017-01-10 23:00 被阅读0次

使用OpenGL贴纹理时,图片是一张周边带有渐变透明度的图,显示出来后图片透明度的地方显示是灰黑色。采用的颜色混合方法是:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)。因为用这个来处理半透明的图像,则ColorResult = SrcColor * SrcAlpha + DstColor * (1 - SrcAlpha),这时SrcAlpha就刚好被解析为透明度了。

但是实际中在绘制一张半透明的png图片时,半透的地方都变灰了。查到的原因是在加载图像时使用Premultiplied Alpha所致。

Premultiplied Alpha是预先将RGBA中A通道,分配给颜色通道。经过Premultiplied Alpha处理之后,所有的颜色通道都会乘以alpha因子。实际上Premultiplied Alpha所作的便是 SrcColor1 = SrcColor0 * SrcAlpha操作。这样一来,半透明混合所要做的操作就应该是:ColorResult = SrcColor1 + DstColor * (1 - SrcAlpha).

即颜色混合方式是:glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)


但是加载进来的图片是啥时候被Premultiplied Alpha?

相关文章

  • OpenGL 贴带透明度的纹理碰到的问题

    使用OpenGL贴纹理时,图片是一张周边带有渐变透明度的图,显示出来后图片透明度的地方显示是灰黑色。采用的颜色混合...

  • OPenGL ES纹理翻转解决方案

    纹理翻转 在使用OpenGL函数加载纹理到图形时,经常遇到纹理上下颠倒的问题。原因是因为OpenGL要求纹理坐标原...

  • OpenGL 纹理翻转策略

    Open GL纹理翻转 在使用OpenGL函数加载纹理到图形时,经常遇到纹理上下颠倒的问题。原因是因为OpenGL...

  • OpenGL ES之旅(三)-- OpenGL ES 纹理翻转解

    纹理翻转概述 在使用OpenGL ES函数加载纹理到图形时,经常遇到纹理上下颠倒的问题。原因是因为OpenGL E...

  • GLKit常用API解析

    GLKTextureInfo 创建OpenGL纹理信息 name: OpenGL上下文中纹理名称 target: ...

  • OpenGL ES GLKit 􏰼􏰜常用API解析

    GLKTextureInfo创建OpenGL纹理信息 name : OpenGL上下文中纹理名称 target :...

  • OpenGL纹理内容

    纹理可以理解为一张图片,OpenGL渲染图片会将图片的像素保存在纹理缓存中。 OpenGL常用纹理函数 载入纹理 ...

  • 从0开始的OpenGL学习(五)-纹理

    本文主要解决一个问题: 在OpenGL中如何使用纹理? 一、什么是纹理? 纹理,英文是texture,中文可以翻译...

  • OpenGL纹理

    纹理可以理解为一张图片,OpenGL渲染图片会将图片的像素保存在纹理缓存中。OpenGL常用纹理函数 载入纹理 纹...

  • OpenGL之纹理及应用案例

    纹理介绍 OpenGL使用的图片数据(纹理)都是tga格式的,而iOS/OpenGL ES使用PNG/JPEG格式...

网友评论

      本文标题:OpenGL 贴带透明度的纹理碰到的问题

      本文链接:https://www.haomeiwen.com/subject/wlulbttx.html