箭以运动方向为轴旋转----rotate()函数中给angle添加rand和@Time来制作箭雨效果中箭的随机自转
应用函数
dihedral
radians
rotate
quaternion
@orient
思路:
1.创建空矩阵并适配到轴向
2.矩阵旋转控制(对矩阵的旋转角度,轴向的控制如随机、动画,都在这一步实现)
3.将“受控制状态下的”矩阵转换为四元数赋值给orient属性
4.copy物体应用orient属性
制作步骤:
- 创建一个grid网格并给point 添加@N属性(案例完成后可以转转角度来测试结果)
- wrangle写入:
#创建空矩阵m并适配到轴向@N
matrix3 m = dihedral({0,1,0},@N);
#定义变量angle (提前定义,为了下面语句观看简洁)
float angle = radians(chf("rotate"));
# 旋转矩阵 rotat(矩阵,弧度值,轴向)。radians转化弧度值
# 在rotate()函数中对角度angle和轴向@N进行各种状态控制,如随机性,动画等
rotate (m,angle,@N);
#quaternion将矩阵转化成四元数(orient是四元数类型)
@orient = quaternion(m);
应用函数
dihedral
radians
eulertoquaternion
qmultiply
@orient
#自定义向量并旋转适配到@N,转换为四元数o
vector4 o = dihedral({0,1,0},@N);
#自定义可在自身三个轴向上旋转的欧拉角并转换为四元素m
float rotx = radians(chf("rotX"));
float roty = radians(chf("rotY"));
float rotz = radians(chf("rotZ"));
vector angle = set(rotx,roty,rotz);
vector4 m = eulertoquaternion(angle,0);
#四元数相乘。 注意相乘顺序,欧拉角转的四元数放后面。
@orient = qmultiply(o,m);
随机化rotate()函数中的angle值,使矩阵以一个轴转动角度值随机。
应用函数
dihedral
rotate
quaternion
思路:
1.创建矩阵适配到轴向
2.rotate()函数中的角度angle值随机化来随机矩阵角度
//创建矩阵m并适配到@N
matrix3 m = dihedral({0,1,0},@N);
float noise = rand(@ptnum+chf("seed"));
float angle = radians(chf("rot_angle"));
//以@N为轴随机化矩阵角度
rotate (m , noise * angle , @N);
@orient = quaternion(m);
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/72c3dc090bed4e2b9eb488e7c72c7f04.png#pic_left =50%x )
先给粒子点创建轴向axis,并扰乱。
float noiseA = fit01(rand(@ptnum),0.5,1.5);
float angle = ch("angle");
p@orient = quaternion(angle * noiseA , normalize(v@aixs));
randP
粒子在小范围内变化位置(模拟陨石碎块悬浮不定的效果)
@P.y += sin(@Time*1*rand(@ptnum*666)+rand(@ptnum*400)*2PI)*0.1;
@P.x += sin(@Time*1*rand(@ptnum*333)+rand(@ptnum*999)*2PI)*0.1;
@P.z += sin(@Time*1*rand(@ptnum*555)+rand(@ptnum*200)*2PI)*0.1;