从一种颜色到另一种颜色的插值
Interpolation from one color to another and back
在我的程序中,我试图从开始颜色->结束颜色->开始颜色,等等
这个问题并不特定于任何语言,尽管我是从我自己的框架代码中编写这个片段。
注:lerp modifies the color
而getLerped returns new value
startProgram(){
ofColor startColor; //set as 152,219,255
ofColor endColor; //set as 132,152,184
ofColor lerpedColor = startColor;
float colorShift = 0.01f;
}
//程序中每帧连续触发的函数内部
if(lerpedColor == endColor){
endColor.set(startColor);
startColor.set(lerpedColor);
lerpedColor.set(startColor);
cout<<"Swapping end color"<<"n";
cout<<"Start Color: "<<ofToString(startColor)<<"n";
cout<<"End Color: "<<ofToString(endColor)<<"n";
cout<<"Lerped Color: "<<ofToString(lerpedColor)<<"n";
}
lerpedColor.lerp(endColor,colorShift);
cout<<"Lerped color"<<ofToString(lerpedColor)<<"n";
我的颜色插值从最初的开始颜色到结束颜色发生得很好,但这不会从结束颜色返回到星号颜色。
lerpedColor == endColor
的if condition
只在我得到以下计数时被触发一次:
startColor: 132152184
endColor: 152219255
lerpedColor: 132152184
哪里出了问题,这里的插值只发生一次,而不是回来?
正确的均匀线性插值可以实现为:
int interp(int src, int dst, float time) {
return src*(1.0-time)+dst*time;
} // where 0.0<=time<=1.0
当同时有3种颜色要插值时,一种可能性是取最大色差:
Color diff = abs(end - start); // diff.x = abs(end.x - start.x) etc.
int steps = max(diff);
int a=0;
lerp(src, end, (float)a/(float)steps);
a++;
if (a==steps) { // swap start/end
}
在这种情况下,最大的色差将减少/增加一个,而其他组件将实际插值
相关文章:
- 文本冒险游戏 - 如何区分一种项目类型与另一种项目类型以及如何构建项目类/子类
- 为什么一种算法在相同的时间复杂度下比另一种算法更快?
- 当 c++ 需要一种数据类型并获取另一种数据类型时会发生什么?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- void* 数组将元素转换为另一种类型
- 在C++中使用另一种语言
- 将 X 坐标从一种分辨率转换为另一种分辨率
- 在 c++ 中将一种结构类型分配给另一种类型
- 如何在一种方法中创建对象并在另一种方法中使用它
- 常量静态成员函数:有另一种方法可用吗?
- 将空基类优化对象强制转换为另一种类型是否会破坏严格的别名?
- 如何将程序从主发送到另一种方法
- 如何使用shared_ptr或推荐另一种方法(unique_ptr)
- 存储多种颜色并从一种颜色切换到另一种颜色
- 如何测试指针类型是否可以安全地转换为另一种指针类型?
- 从一种颜色插值到另一种颜色
- OpenCV将一种颜色转换为另一种颜色
- 如何在顶点缓冲区中以另一种颜色绘制顶点
- 从一种颜色到另一种颜色的插值