我对c++和图形相关的东西是个初学者。
我想为我的graphicsview制作一个动态背景,类似于这样:
这张图片代表了物体上空气流动的湍流现象。颜色必须基于一个数值矩阵。
我只能找到如何使用QT进行单向渐变的方法。
我该如何设置?如何获得双向渐变?
/*编辑 很好地指出了技术上讲这不是一个渐变,而是在2D节点数组上进行的颜色插值。 */
我对c++和图形相关的东西是个初学者。
我想为我的graphicsview制作一个动态背景,类似于这样:
这张图片代表了物体上空气流动的湍流现象。颜色必须基于一个数值矩阵。
我只能找到如何使用QT进行单向渐变的方法。
我该如何设置?如何获得双向渐变?
/*编辑 很好地指出了技术上讲这不是一个渐变,而是在2D节点数组上进行的颜色插值。 */
好的,由于您没有提供输入数据,因此没有人知道您实际想要实现什么!
如果你有流线轨迹和质量,那么可以使用一些粒子系统和重度模糊/平滑滤波来实现。对于沿轨迹的任何已知点,绘制一个带有颜色的抖动圆圈,颜色取决于质量/温度/速度...和颜色比例尺。它应该在中间是实心的,在边缘是透明的。渲染后只需多次模糊/平滑图像即可。使用的点越少,圆圈就必须越大才能很好地覆盖区域,也可以分多个步骤进行,并随机更改点的坐标以提高图像的随机性...其中:
c00,c01,c10,c11
是角落颜色c(x,y)
是正方形内 x,y
位置上的颜色x,y
范围为 <0,1>
,为了简单起见(但可以使用适当的等式缩放任何范围)双线性插值 是 3 倍线性插值:
c0=c(x,0)=c00+((c01-c00)*x)
c1=c(x,1)=c10+((c11-c10)*x)
c(x,y) =c0 +((c1 -c0 )*y)
Qt 中有一个关于渐变的教程:http://qt-project.org/doc/qt-4.8/demos-gradients.html,以及一个类:http://harmattan-dev.nokia.com/docs/library/html/qt4/qgradient.html。我从未使用过除线性渐变之外的其他渐变类型,根据文档,Qt 中似乎只有三种基本类型的渐变可用:线性、径向和圆锥形。如果您无法使用这三种类型组合出所需的渐变,则恐怕需要自己编写图像像素程序。不要忘记,探索一下 OpenGL 是否能够提供帮助也许是值得的。Qt 有一些使用 OpenGL 的类,但我不熟悉它们,无法提供更多建议。