我在研究如何在两个颜色 vector 之间淡入淡出时遇到问题。
两种颜色:
Tinker::Vect3d<float> startCol(255,0,0);
Tinker::Vect3d<float> endCol(0,0,255);
我还有一个从 0-100“t1”的传入值。
还有我的一个尝试:
for(int i=0;i<nLEDs;i++){
const float fade = (255 / 100) * (t1 * sensitivity);
Tinker::Vect3d<float> finalColour(startCol*a + endCol*(1-a));
FTLEDColour col = { finalColour[0] , finalColour[1] , finalColour[2] };
}
连续循环运行。我试图根据传入值从红色开始并面向绿色,因此 0 是红色,100 是绿色。
最佳答案
首先,我想如果你定义一个浮点 vector 来定义颜色,我猜它的限制在 0 .. 1 之间,而不是 0 .. 255 之间。即:
Tinker::Vect3d<float> startCol(1.0,0,0);
Tinker::Vect3d<float> endCol(0,0,1.0);
对于淡入淡出因子,您可以这样做:
const float fade = (t1 * sensitivity)/100;
考虑到 t1 在 0..100 之间变化,灵敏度为 0<= 灵敏度 <= 1
现在,您可以将渐变应用于您的颜色:
Tinker::Vect3d<float> finalColour(startCol*(1-fade) + endCol*(fade));
当然,假设 vector 类可以完成这些基本操作
附言如果灵敏度为 1,您只会得到完全淡入淡出,我想这对于这个等式来说不是必需的。
关于c++ - 如何按值在两个 vector 之间淡入淡出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20482642/