图形学初识--颜色混合

前言

本章节补充一下颜色混合的内容,主要包含:为什么要有颜色混合?颜色混合常实现方式?

正文

为什么要有颜色混合?

当需要渲染透明或半透明物体时,需要引入颜色混合,同时它也是颜色RGBA的alpha的体现!

在这里插入图片描述

颜色混合常见实现方式?

每个像素的颜色由RGBA构成,其中第四分量我们通常叫做alpha,也叫做透明度,一般取值范围 [ 0 , 1 ] [0,1] [0,1]​ 。

接下来举个最简单的颜色混合表达形式:

已知屏幕中 ( x , y ) (x,y) (x,y) 位置处的像素颜色RGB分量为 d s t C o l o r ⃗ \vec {dstColor} dstColor ,它的透明度为 d s t A l p h a dstAlpha dstAlpha ,当我们需要在此位置渲染的像素颜色为 s r c C o l o r ⃗ \vec {srcColor} srcColor ,透明度为 s r c A l p h a srcAlpha srcAlpha ,则通过一下公式计算出最终颜色:
b l e n d C o l o r = s r c A l p h a ∗ s r c C o l o r ⃗ + ( 1 − s r c A l p h a ) ∗ d s t C o l o r ⃗ blendColor = srcAlpha * \vec {srcColor} + (1-srcAlpha) * \vec {dstColor} blendColor=srcAlphasrcColor +1srcAlphadstColor
此时我们用待渲染像素颜色的alpha值直接表明颜色权重,我们简单举个例子:

​ 当绘制不透明物体时, s r c A l p h a = 1 srcAlpha = 1 srcAlpha=1,此时原本屏幕的像素颜色就相当于被忽略了;

​ 当绘制全透明物体时, s r c A l p h a = 0 srcAlpha = 0 srcAlpha=0​,此时相当于没有画此像素;

​ 当绘制透明物体时, s r c A l p h a = ( 0 , 1 ) srcAlpha = (0,1) srcAlpha=0,1,此时相当于将底色和目标色进行线性插值,从而得到一种混合的效果;

当然了,这些公式都可以发散,例如写成如下:
b l e n d C o l o r = ( 1 − s r c A l p h a ) ∗ s r c C o l o r ⃗ + s r c A l p h a ∗ d s t C o l o r ⃗ blendColor = (1 - srcAlpha) * \vec {srcColor} + srcAlpha * \vec {dstColor} blendColor=(1srcAlpha)srcColor +srcAlphadstColor

根据具体的需要决定!

上述颜色混合注意点

上述的实现方式,属于最简单的方式。细心的朋友很容易想到,某个像素的绘制受到底色的制约。也就是说,假如需要绘制透明物体,必须将不透明物体先绘制上去,然后才能达到混合的效果,所以咱们需要注意混合的绘制次序,如下:

  • 先绘制不透明物体,保证底色正确
  • 有远及近绘制半透明物体,保证近距离透明物体不会遮挡远距离透明物体(按摄像机距离排序)

效果图:

在这里插入图片描述

结尾:喜欢的小伙伴点点关注+赞哦!

你们的点赞就是我创作的最大动力!希望对各位小伙伴能够有所帮助哦,永远在学习的道路上伴你而行, 我是航火火,火一般的男人!

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值