其实颜色混合用到的场合很多,比如多张图片的合成,动画游戏中的一些画面特效等都可以通过颜色混合进行实现。最常用的混合方式就是实现物体与背 景的半透明效果。另外,在制作2D游戏时颜色混合可以用来通过制作目标物体的蒙板实现移动。通过蒙板来消除旧位置的物体对象可以不必重绘当前整帧内容,而 仅仅是发生变化的那些物体。
为了各位从事iPhone开发的考虑。后面的代码例子对OpenGL API的使用都会用OpenGL2.1与OpenGL ES1.1相互兼容的接口。
首先介绍一下OpenGL对源对象和目标对象进行颜色混合的实现。
这里,源对象是指你将要绘制的对 象;目标对象是指已在帧缓存中的颜色。比如调用glClear(GL_COLOR_BUFFER_BIT);后留在帧缓存中的颜色。
在进行计算 时,源和目标的混合都是在绘制源对象时进行计算的,在绘制对象以外的帧缓存像素不会受任何影响。
为了方便颜色混合,我们往往采用RGBA 这种颜色模式。其中RGB表示色彩分量,而A就是混合因子(blend factor)。A,我们在图形、图像处理中常常表示为:alpha,它在图像处理中常用作为透明系数。
我们指定了源和目标的混合因子 后,OpenGL会对绘制对象的最终颜色做如下计算:
设:源对象的某个顶点的颜色为(Rs, Gs, Bs, As)
目的对象对应此源对象顶点的颜色为(Rd, Gd, Bd, Ad)
源混合因子为:(Sr, Sg, Sb, Sa)
目 的混合因子为:(Dr, Dg, Db, Da)
那么,该顶点最终目标颜色为:
(Rs * Sr <op> Rd * Dr, Gs * Sg <op> Gd * Dg, Bs * Sb <op> Bd * Db, As * Sa <op> Ad * Da)
其中,<op>可以是加法(+),减法(-), 逆向减法,最小值,最大值或按位逻辑操作,并且其优先级小于乘法(*)。
下面,我们介绍相关的OpenGL接口。
首先是开启混 合,使用glEnable(GL_BLEND);即可。
然后我们使用glBlendEquation()来指定混合操作,参数可以 是:GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT, GL_MIN, GL_MAX。
但这里要注意的是,OpenGL ES1.1没有glBlendEquation接口,因此只能做加法操作。
glBlendFunc() 接口用于指定源混合因子与目标混合因子。
参数请参考红宝石书中文版的第140页,表6-1。
OPENGL android 不同颜色 opengl颜色混合
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java for循环延时执行
前言在开发中经常会遇到延时任务的需求,例如在12306购买车票,若生成订单30分钟未支付则自动取消;还有在线商城完成订单后48小时不评价 ,自动5星好评。像这类在某事件触发后一段时间内执行的需求任务我们称之为 延时任务。那么如何实现延迟任务呢?第一反应是利用cron方案来实现: 启动一个cron定时任务,每隔一段时间执行一次,比如30分钟,找到那些超时的数据
java for循环延时执行 for循环延时 rocketmq 重复消费 通过for循环来延时 JAVA -
yarn add exceljs 指定版本
快速、可靠、安全的依赖管理工具 Nodejs 嫡系包管理工具 随着前端工程化体系的不断完善和"大前端"概念的丰富和发展,仅前端开发用到 Nodejs 的地方也越来越多,各大前端团队基于 Nodejs 的工具链建设也不断推动着前端开发走向新的高度;说到 Nodejs,自然离不开其官方的包管理工具 npm;目前,npm 已经成为世界上最大的包管理器,在其仓库中托管着超过 100
mac 安装yarn mac安装yarn npm 安装 yarn npm 安装yarn npm安装yarn