【发布时间】:2019-05-15 15:15:11
【问题描述】:
我正在尝试平滑地循环通过 RGB 光谱,但到目前为止,我只能制作平滑地通过 768 色 (256*3) 或通过 16777216 色 (256^3) 的代码离散跳跃。
下面是运行流畅的代码:
void loop() {
setColor(255,0,0);
setColor(255,255,0);
setColor(0,255,0);
setColor(0,255,255);
setColor(0,0,255);
setColor(255,0,255);
}
void setColor(int red, int green, int blue) {
while ( r != red ) {
if ( r < red ) r += 1;
if ( r > red ) r -= 1;
_setColor();
delay(10);
}
while ( g != green){
if ( g < green ) g += 1;
if ( g > green ) g -= 1;
_setColor();
delay(10);
}
while ( b != blue){
if ( b < blue ) b += 1;
if ( b > blue ) b -= 1;
_setColor();
delay(10);
}
}
void _setColor() {
analogWrite(redPin, r);
analogWrite(greenPin, g);
analogWrite(bluePin, b);
}
这是遍历每个 RGB 值的代码:
void loop() {
for (r = 0; r <= 255; r++) {
for (g = 0; g <= 255; g++) {
for (b = 0; b <= 255; ++) {
analogWrite(redPin, r);
analogWrite(greenPin, g);
analogWrite(bluePin, b);
}
}
}
平滑代码永远不会组合颜色的最大值/最小值之间的值,即我从来没有得到像 [128,64,72] 这样的东西,只有像 [255,64,0] 或 [0,0, 72]。
离散代码遍历每个蓝色值,然后增加绿色值,然后从 0 开始返回蓝色,即 [0,0,254] -> [0,0,255] -> [0,1,0] -> [0,1,1] 创建离散跳跃。
我正在尝试获得一个平滑的循环,它会遍历所有可能的 RGB 值,这可能吗?
【问题讨论】:
-
由于色彩空间是三维的,如果您只想查看所有值,例如可以使用希尔伯特曲线。可能看起来不太好。这取决于你为什么要经历所有这些以及如何。
标签: c++ arduino arduino-uno