我需要逐渐插值或更改一系列颜色,使其从颜色A到颜色B到颜色C到颜色D,然后回到颜色A,这需要基于以毫秒为单位经过的时间,任何帮助都将不胜感激(算法、伪代码将非常有用)。
请注意,我正在使用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();
提前感谢你的帮助。