欢迎光临散文网 会员登陆 & 注册

【MCx几何】在MC中绘制Catmull-Rom平滑曲线【粒子特效基础】

2023-08-05 18:35 作者:On_craft  | 我要投稿

前言

众所周知,mc已经被大佬们开发出了许多酷炫的粒子线条,尤其是soma3.0曲线,可以给红石音乐带来非常不错的视觉效果,但弊端是soma3.0缺乏灵活度,只能在平面上进行绘制,这让它在红石音乐以外的领域较难得到应用。这篇专栏就简单讲下更灵活的Catmull-Rom曲线的MC内绘制方法

本专栏只讲怎么写代码,不讲原理! 想知道原理和公式推导请自行搜索

编程语言使用Java 18,其他语言也差不多 基本上都是数学计算

粒子生成使用ColorBlock模组,原版一样的

(小学生都能看懂!)

准备工作

1.坐标的表示: x-y-z 分别表示mc的三条坐标轴;P.x表示点P的x轴坐标,yz也一样

2.方程:

    算法矩阵式:

P(t)%3D%5Cbegin%7Bpmatrix%7Dt%5E3%26t%5E2%26t%261%5Cend%7Bpmatrix%7D%5Cbegin%7Bpmatrix%7D-%5Calpha%262-%5Calpha%26%5Calpha-2%20%26%5Calpha%5C%5C2%5Calpha%26%5Calpha-3%263-2%5Calpha%26-%5Calpha%5C%5C-%5Calpha%260%26%5Calpha%260%5C%5C0%261%260%260%20%5Cend%7Bpmatrix%7D%5Cbegin%7Bpmatrix%7DP_0%5C%5CP_1%5C%5CP_2%5C%5CP_3%5Cend%7Bpmatrix%7D

    写成小学生都能看懂的形式就是:

%5Cbegin%7Bcases%7DP_x(t)%3Dt%5E3*%5B-%5Calpha*P_0.x%2B(2-%5Calpha)*P_1.x%2B(%5Calpha-2)*P_2.x%2B%5Calpha*P_3.x%5D%2B%5C%5C%20%5Cqquad%20t%5E2*%5B2%5Calpha*P_0.x%2B(%5Calpha-3)*P_1.x%2B(3-2%5Calpha)*P_2.x-%5Calpha*P_3.x%5D%2B%5C%5C%20%5Cqquad%20t*(-%5Calpha*P_0.x%2B%5Calpha*P_2.x)%2BP_3.x%5C%5CP_y(t)%3Dt%5E3*%5B-%5Calpha*P_0.y%2B(2-%5Calpha)*P_1.y%2B(%5Calpha-2)*P_2.y%2B%5Calpha*P_3.y%5D%2B%5C%5C%20%5Cqquad%20t%5E2*%5B2%5Calpha*P_0.y%2B(%5Calpha-3)*P_1.y%2B(3-2%5Calpha)*P_2.y-%5Calpha*P_3.y%5D%2B%5C%5C%20%5Cqquad%20t*(-%5Calpha*P_0.y%2B%5Calpha*P_2.y)%2BP_3.y%5C%5CP_z(t)%3Dt%5E3*%5B-%5Calpha*P_0.z%2B(2-%5Calpha)*P_1.z%2B(%5Calpha-2)*P_2.z%2B%5Calpha*P_3.z%5D%2B%5C%5C%20%5Cqquad%20t%5E2*%5B2%5Calpha*P_0.z%2B(%5Calpha-3)*P_1.z%2B(3-2%5Calpha)*P_2.z-%5Calpha*P_3.z%5D%2B%5C%5C%20%5Cqquad%20t*(-%5Calpha*P_0.z%2B%5Calpha*P_2.z)%2BP_3.z%5Cend%7Bcases%7D

    *α为曲线的扭曲程度,一般取0.5;P0与P3为控制点,catmull-rom算法连接两个点需要在两端点再加两个控制点来控制曲线的形状,所以绘制一条catmull-rom曲线需要4个点,实际只有P1和P2被连接

连接P1和P2,蓝色部分为实际线段,P0和P3的位置决定蓝色部分的形状

代码

要求:输入待连接的两个点P1和P2与两端点的控制点P0和P3,以每个方块长度(mc中的1m)lambda个点的密度作catmull-rom曲线,返回曲线上的点

Point类和PointSequence类可以看我的上一篇专栏:https://www.bilibili.com/read/cv25446970

然后就是如何用这个方法连接一组点了

其实很简单,在开头和结尾分别人为添加一个控制点,中间的片段连接第i和i+1个点的时候控制点取第i-1和第i+2个点就行了

人为在两端点添加控制点

代码要求:输入一组点(点序列)与两个控制点ctrl1和ctrl2,将这组点顺序连接,以每个方块长度lambda个点的密度作连贯的catmull-rom曲线,返回曲线上的点

效果


【MCx几何】在MC中绘制Catmull-Rom平滑曲线【粒子特效基础】的评论 (共 条)

分享到微博请遵守国家法律