所以在我的程序中,颜色的定义就像这样,例如
//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,它非常完美地展示了我想要的效果
答案 0 :(得分:1)
有更多方法可以做到这一点:
这里是#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...
}
}
所有方法都只是及时计算函数值(基于随机值,点表,数学函数)。将每个色带处理为单独的功能和每个迭代步骤后的步进时间。
如果您知道要实现的颜色模式,则创建一个表格并在它们之间进行插值。这里有一些链接可以帮到你: