VEX-矩阵、四元数


矩阵适配到轴向,并绕此轴旋转。

箭以运动方向为轴旋转----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);



悬浮碎块随机转动
将rotate()函数中的angle和axis都随机化,同时给angle * @Time

![在这里插入图片描述](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;
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值