图片来源 https://www.openprocessing.org/sketch/377231
引言:
我们在openprocessing经常见到类似这样的视觉效果,今天就来解析一份粒子聚合成特定形状的代码,看看类似的效果是怎么实现的。
目标效果:
自由运动小球--(趋近运动)-->图像上的位置
要点拆分:
为小球类建立一个变量储存其在图像上的位置,即目标位置
在setup初始化中,算好每个小球在图像上的目标位置
让小球在图像上的目标位置之间互不重叠,尽量覆盖还原图形
切换聚集成像状态时,小球从当前位置趋向运动到目标位置
目标位置变量
首先在ball_class(小球的类)中新建一个向量数组变量oriPos[],因为我们会在三个图形上切换变化,所以此处用数组,向量数组oriPos[]将存储小球分别在三个图像上的目标位置。
有关class类的基本知识点已经做过讲解(Processing教程 - 类和动态数组)。
--
寻找目标位置及重合检测
因为最终目的是要让小球聚合成data文件夹中图片的形状,所以事先在setup部分做oriPos[]位置的计算。基本思路是,在画面中随机找一个位置,判断该位置对应像素在形状图片上的颜色是否为白色,同时判断该位置是否和前序小球已经找定的目标位置有重合,如果对应像素颜色为白色,并且该位置没有与任何已定目标位置重合,则将其储存为当前小球的目标位置,否则重新随机找一个位置,并继续判断,循环,直到满足条件。
PImage[] heart;//底图图片数组
Ball[] ball;/