gpt4 book ai didi

c++ - 如何插入颜色序列?

转载 作者:太空狗 更新时间:2023-10-29 23:22:55 27 4
gpt4 key购买 nike

我需要逐渐插入或改变一系列颜色,所以它从 colorA 到 colorB 到 colorC 到 colorD 然后又回到 colorA,这需要基于以毫秒为单位的时间,任何帮助将不胜感激(算法,伪代码会很棒)。

请注意,我使用的是 RGB,它可能是 0-255 或 0.0-1.0 范围。

这是我目前所拥有的,我需要在每个“timePeriod”上更改颜色,我计算耗时的百分比并更改颜色,这段代码的问题是它运行时会跳转从A到B到B再到C等等

int millisNow = ofGetElapsedTimeMillis();
int millisSinceLastCheck = millisNow - lastTimeCheck;
if ( millisSinceLastCheck > timePeriod ) {
lastTimeCheck = millisNow;
millisSinceLastCheck = 0;
colorsIndex++;
if ( colorsIndex == colors.size()-1 ) colorsIndex = 0;
cout << "color indes: " << colorsIndex << endl;
cout << "color indes: " << colorsIndex + 1 << endl;
}
timeFraction = (float)(millisSinceLastCheck) / (float)(timePeriod);
float p = timeFraction;
colorT.r = colors[colorsIndex].r * p + ( colors[colorsIndex+1].r * ( 1.0 - p ) );
colorT.g = colors[colorsIndex].g * p + ( colors[colorsIndex+1].g * ( 1.0 - p ) );
colorT.b = colors[colorsIndex].b * p + ( colors[colorsIndex+1].b * ( 1.0 - p ) );
colorT.normalize();

提前致谢

最佳答案

您的代码大部分是正确的,但您正在向后进行插值:即您正在插值 B->A,然后是 C->B,然后是 D->C,等等。这会导致切换颜色时不连续。

你应该替换这个:

colorT.r = colors[colorsIndex].r * p + ( colors[colorsIndex+1].r * ( 1.0 - p ) );

与:

colorT.r = colors[colorsIndex].r * (1.0 - p) + ( colors[colorsIndex+1].r * p );

其他线路也一样。

此外,正如其他人所说,使用与 RGB 不同的颜色空间可以提供更好看的结果。

关于c++ - 如何插入颜色序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5860100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com