OPENGL半透明图像产生黑色光环
OPENGL提供了多种多样的混合方法,我们很容易就能实现诸如 叠加、变亮等图像混合。
我们知道一般带透明度的图像是RGBA四个通道来存储,最常的glBlendFunc是
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
大多数的资料会告诉要用这个来处理半透明的图像,因为:
ColorResult = SrcColor * SrcAlpha + DstColor * (1 - SrcAlpha).
这时SrcAlpha就刚好被解析为透明度了。
但是实际中我们可能会发现大多情况下在绘制一张半透明的png图片时,半透的地方都变灰了。
如果你查看你加载的PNG图像数据,会发现原本在ps中显示为:
0xffffffFF, 0xffffff77, 0xffffff00
的像素,加载进来时变成了:
0xffffffFF, 0x77777777, 0x00000000
这便是你在加载图像时使用Premultiplied Alpha所致。Premultiplied Alpha是预先将RGBA中A通道,分配给颜色通道。
如三个RGBA值,实际值为:
(1.0,0.5, 0.0, 1.0)
(1.0,0.5, 0.0, 0.5)
(1.0,0.5, 0.0, 0.0)
经过Premultiplied Alpha处理之后,会表示为:
(1.0,0.5, 0.0, 1.0)
(0.5,0.25, 0.0, 0.5)
(0.0,0.0, 0.0, 0.0)
所有的颜色通道都会乘以alpha因子。实际上Premultiplied Alpha所作的便是 SrcColor1 = SrcColor0 * SrcAlpha操作。
这样一来,半透明混合所要做的操作就应该是:
ColorResult = SrcColor1 + DstColor * (1 - SrcAlpha).
即是:glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
OPENGL半透明图像产生黑色光环的更多相关文章
- 【openGL】画正弦函数图像
#include "stdafx.h" #include <GL/glut.h> #include <stdlib.h> #include <math ...
- Codrops 实验:使用 Vibrant.js 提取图像颜色
Codrops 分享了一个有趣的颜色提取实验.这个想法是创建图像的调色板,既有图像本身的潜移默化的影响,也有一些花哨的颜色延伸.通过使用 Vibrant.js 来提取图像中的颜色,并通过 CSS 过滤 ...
- OpenGL ES学习笔记(三)——纹理
首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <OpenGL ES学习笔记( ...
- OpenGL笔试题
简述FrameBuffer,RenderBuffer,Depth Buffer,Framebuffer attachment,Stencil buffer的关系 简述利用OpenGL执行图像叠加(大P ...
- Android 中建立一个OpenGL ES的开发环境
转自: http://wiki.eoe.cn/page/Building_an_OpenGL_ES_Environment.html 负责人:zhangql原文链接:http://docs.eoean ...
- OpenGL学习之路(一)
1 引子 虽然是计算机科班出身,但从小对几何方面的东西就不太感冒,空间想象能力也较差,所以从本科到研究生,基本没接触过<计算机图形学>.为什么说基本没学过呢?因为好奇(尤其是惊叹于三维游戏 ...
- OpenGL绘制自由落体小球
OpenGL绘制自由落体小球 一. 程序运行的软硬件环境 本次设计在window10系统下进行,运用C++进行编写,在CodeBlocks环境下使用OpenGL进行设计. 所需环境配置分为2部分 ...
- OpenGL ES 详解纹理生成和纹理映射步骤以及函数
通常一个纹理映射的步骤是: 创建纹理对象.就是获得一个新的纹理句柄 ID. 指定纹理.就是将数据赋值给 ID 的纹理对象,在这一步,图像数据正式加载到了 ID 的纹理对象中. 设定过滤器.定义了ope ...
- OpenGL与CUDA互操作方式总结
一.介绍 CUDA是Nvidia推出的一个通用GPU计算平台,对于提升并行任务的效率非常有帮助.本人主管的项目中采用了OpenGL做图像渲染,但是在数据处理方面比较慢,导致帧率一直上不来.于是就尝试把 ...
随机推荐
- Dynamics AX 2012 的工业物联网解决方案
Dynamics AX 2012 的工业物联网解决方案 物联网 物联网的概念在这两年非常火,包括近期很火的共享单车初创公司--摩拜单车,在产品中运用了Azure Iot物联网技术.但是,物联网并不是一 ...
- hadoop-2.6.0-src源码导入Eclipse 转载
转载地址:http://m.blog.csdn.net/blog/le119126/42009281 一.导入 先修改源码 参考 二.改错里面的第3条 1.cd到 hadoop-2.6.0-src/h ...
- 关于yuv格式
首先,内存分布 1:YUV420 (1):I420: YYYYYYYY UU VV =>YUV420P (2): ...
- PHP优化笔记
1.指定display_function内容,用来禁用危险参数 2.指定display_errors = Off 来关闭错误显示 3.这个和上一条有因果关系,关闭了错误前台显示,但是要记录错误信息就必 ...
- [Machine-Learning] 熟悉Matlab
浮点数取整的几个函数 floor: 向下取整 ceil: 向上取整 round: 取最接近的整数 fix: 向0取整 不等于 Matlab 中,使用~=表示不等于. 数组相关操作 使用 [] 命名数组 ...
- jquery 获取元素背景图片backgroungImage的url
$("#").css("backgroundImage").replace('url(','').replace(')','');
- python-正则表达式基础
转载作者:AstralWind 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可 ...
- Python安装时报缺少DLL的解决办法
准备开始学习Python,但是刚准备环境搭建时就遇到了下面的错误: 仔细的看了看,说是缺少DLL. 对于这个问题的解决办法: 方法一: 1. 在安装包上点右键以管理员身份运行2. C:\Users\用 ...
- docker私有库UI和添加私有库到本机能够push和pull
$ docker run -p 8080:8080 -e REG1=http://104.236.246.10:5000/v1/ atcol/docker-registry-ui$ docker ru ...
- dubbo(转载)
1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...