图形学初识--颜色混合

131 阅读1分钟

前言

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

正文

为什么要有颜色混合?

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

在这里插入图片描述

颜色混合常见实现方式?

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

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

已知屏幕中(x,y)(x,y) 位置处的像素颜色RGB分量为dstColor\vec {dstColor} ,它的透明度为 dstAlphadstAlpha ,当我们需要在此位置渲染的像素颜色为srcColor\vec {srcColor},透明度为srcAlphasrcAlpha ,则通过一下公式计算出最终颜色:

blendColor=srcAlphasrcColor+1srcAlphadstColorblendColor = srcAlpha * \vec {srcColor} + (1-srcAlpha) * \vec {dstColor}

此时我们用待渲染像素颜色的alpha值直接表明颜色权重,我们简单举个例子:

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

​ 当绘制全透明物体时,srcAlpha=0srcAlpha = 0​,此时相当于没有画此像素;

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

当然了,这些公式都可以发散,例如写成如下:

blendColor=(1srcAlpha)srcColor+srcAlphadstColorblendColor = (1 - srcAlpha) * \vec {srcColor} + srcAlpha * \vec {dstColor}

根据具体的需要决定!

上述颜色混合注意点

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

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

效果图:

在这里插入图片描述

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

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