因此,在我的程序中,颜色定义如下
//R, G, B, A
float red[4] = { 1, 0, 0, 1 };
float green[4] = { 0, 1, 0, 0.5 };//green[3] = 0.5; this mean opacity is at 50%
float blue[4] = { 0, 0, 1, 0.2 };blue[3] = 0.2; this mean opacity is at 20%我的问题是,如何才能使颜色平滑地跳动/闪烁?我对实现我想要的东西所涉及的数学感到非常困惑。
例如,如果我想淡入淡出一种颜色,我会这样做
float color[4] = { 1, 0, 0, 1 };
void fadeColorInAndOut(float * Colorin)
{
for(float i = 1; i > 0; i-= 0.01f)
{
Colorin[3] = i;
sleep(10);//10 milliseconds
}
for(float i = 0; i < 1; i+= 0.01f)
{
Colorin[3] = i;
sleep(10);//10 milliseconds
}
}但是,当涉及到实际的脉动/闪烁的颜色时,我真的不知道从哪里开始。
希望能帮助你理解更多,这就是我想要的效果。这是我找到的一个GIF,它几乎完美地展示了我想要的效果

发布于 2017-03-05 18:01:52
有更多的方法可以做到这一点:
在两个预定义的颜色表之间使用连续函数进行插值使用连续函数( colors
)
这里是#3的简单C++示例:
void iterate(float *col,float t)
{
col[0]=cos(0.5*t); // the coefficients gives you frequency of change
col[1]=cos(0.3*t); // different numbers between bands will give you colors
col[2]=cos(0.1*t);
}
void main()
{
float t=0.0;
float col[4]={0.0,0.0,0.0,1.0};
for (;;)
{
iterate(col,t);
// here render your colored stuff
Sleep(10); t+=0.01; // speed of pulsation [rad/10ms]
// here test end of program condition and break if needed...
}
}所有的方法都是在时间上计算函数值(基于随机值、点表、数学函数)。在每个迭代步骤之后,将每个色带作为单独的函数和步长进行处理。
如果你知道你想要实现的颜色模式,那么创建一个它们的表格,并在它们之间进行插值。这里有几个可以帮助你的链接:
https://stackoverflow.com/questions/42606063
复制相似问题