我正在尝试创建一个从草图开始淡入的色谱。为此,我只需设置colorMode(HSB,255),然后用笔划绘制线条(map(x,0,width,0,255),255,255,5),并且不进行背景清除。 5的alpha建立在自身之上并最终创建一个固体光谱。然而,光谱被分解成颜色块,而不是平滑过渡。我测试了没有alpha的程序,它产生了一个平滑的光谱,所以这是因为alpha值。
为什么会发生这种情况,我该如何解决?
完整代码:
void setup(){
size(500, 500);
colorMode(HSB, 255);
}
void draw(){
for(int x = 0; x < width; x++){
stroke(map(x, 0, width, 0, 255), 255, 255, 5);
line(x,0,x,height);
}
}
答案 0 :(得分:1)
这种情况正在发生,因为您在透明度的基础上在透明度之上绘制透明度。
这不会产生将目标颜色绘制得更暗和更暗的效果。它具有会聚到纯色的效果。我无法解释这一点:透明色是添加,因此多个值会聚合在同一种颜色上。
重点是:不应在透明度上绘制透明度,而应调用background()
函数清除旧颜色,然后使用增加的alpha值重绘颜色。这是一个例子:
void setup() {
size(500, 500);
colorMode(HSB, 255);
}
void draw() {
float alpha = constrain(frameCount, 0, 255);
background(200);
for (int x = 0; x < width; x++) {
stroke(map(x, 0, width, 0, 255), 255, 255, alpha);
line(x, 0, x, height);
}
}