在上一篇曲线力场中,是将曲线转成体积并设置与切线方向的速度。https://blog.csdn.net/weixin_44517539/article/details/116240033
而这篇的思路是通过点云去搜索曲线上最近点,读取点的切线方向,设置到动力学对象的速度上。可以理解为让动力学粒子读取曲线上的方向进行运动。
资产准备
这里准备的资产是一条曲线,一块平面上生成的粒子
我们要让粒子跟随曲线方向运动
求曲线方向
这里通过polyframe求切线方向
这里把切线方向设为法线(N)
动力学准备
创建了一个动力学网络dopnetwork
加载粒子,使用popobject 读取平面粒子作为初始对象(Initial Geometry)
创建popvop作基础连接
测试,给了一个向上速度,观察下运行是否正确
开始读取曲线切线方向
通过pointCloudOpen读取曲线上最近点
这里点云对象连接到的是Opinput2,所以我们需要在popvop上设置下Opinput2对象为曲线
现在我们应该捕获到了曲线上最近的点,接下来过滤出法线N(在前面我们将切线方向设为N)
将得到的法线方向给到速度
受影响的粒子范围可以通过设置点云搜索半径
到这里,已经实现了主要的需求效果,根据曲线方向运动
补充效果 ,往曲线靠近
这需要获取最近曲线的位置,减去粒子当前位置
这里会有一个问题,远离曲线的粒子根据搜索半径设置获取不到最近曲线,所以获取的最近点位置结果为0。这会导致减去粒子当前位置后是一个朝向世界中心的方向
这里如果不想扩大搜索半径改变影响范围,可以通过判断是否在搜索半径影响范围内。
这个判断我的方法是在曲线对象上添加一个属性,值为1.
通过点云搜索这个属性,如果值为1就是在影响范围内
两股力相加,得到既向曲线切线方向运动又向曲线靠近的力
补充效果 ,绕曲线旋转
通过上面两步,我们求得了曲线切线方向和指向曲线方向。
通过这两个向量进行叉乘,得到的会是绕曲线运动方向
整合
最后,我们对三个力进行功能整合
除了基础的力的相加外,可以把力的方向和大小拆分控制,比如通过两位置向减得到的朝向曲线的力,距离越远得到的力越大,往曲线运动的越快。
通过Normalized可以将求出来的力标准化为长度为1的方向向量
通过lenge可以得出力的大小。
两者再次相乘,得到的结果同样是之前大小不一的力,但是这样拆分开,可以方便我们对力的大小自定义控制。
链接:https://pan.baidu.com/s/1vFTcs6G4Ek6TW85iqx7F0w
提取码:wway