环绕曲线周围的螺旋状粒子

float $scaleOffset = 0.2 ;

float $pos[] = `pointOnCurve - pr(particleShape1.age) - p curve1`;

float $tan[] = `pointOnCurve - pr(particleShape1.age) - nt curve1`;

float $norm[] = `pointOnCurve - pr(particleShape1.age) - nn curve1`;

vector $posvec = <<$pos[0],$pos[1],$pos[2]>>;

vector $tanvec = <<$tan[0],$tan[1],$tan[2]>>;

vector $normvec = <<$norm[0],$norm[1],$norm[2]>>;

vector $norm2vec = cross($tanvec,$normvec);

particleShape1.position = $posvec + ($scaleOffset * $normvec *cos(particleShape1.age*20))+($scaleOffset*$norm2vec*sin(particleShape1.age*20));

 

 

缺点,速度慢。下面对表达式做一处更改,使它运行的更多快。

 

-ch on(代表“Construction history on(创建历史信息选项开)“)是pointOnCurve命令的选项之一。这个选项创建一个具有输入属性和输出属性的pointOnCurveInfo类型节点。通过为每条曲线创建一个这样的节点,并使用setAttr来设置参数,使用getAttr来获得参数值,该表达式将运行得更快。因为pointOnCurve 每一次运行时都要创建并销毁这样的一个节点,而这个操作对每一帧中的每一个粒子都要执行一次。通过消除这些节点的创建和销毁操作,该表达式将执行的更快。

 

 

pointOnCurve -ch on -pr 0 curve1;

pointOnCurve -ch on -pr 0 curve1guide;

 

float $scaleOffset = 0.2 ;

setAttr pointOnCurveInfo1.parameter(particleShape1.age);

setAttr pointOnCurveInfo2.parameter(particleShape1.age);

float $pos[] = `getAttr pointOnCurveInfo1.position`;

float $tan[] = `getAttr pointOnCurveInfo1.normalizedTangent`;

float $normEnd[] =`getAttr pointOnCurveInfo2.position`;

float $norm[];

$norm[0] = $normEnd[0]-$pos[0];

$norm[1] = $normEnd[1]-$pos[1];

$norm[2] = $normEnd[2]-$pos[2];

vector $posvec = <<$pos[0],$pos[1],$pos[2]>>;

vector $tanvec = <<$tan[0],$tan[1],$tan[2]>>;

vector $normvec = unit(<<$norm[0],$norm[1],$norm[2]>>);

vector $norm2vec = cross($tanvec,$normvec);

particleShape1.position = $posvec + ($scaleOffset * $normvec *cos(particleShape1.age*20))+($scaleOffset*$norm2vec*sin(particleShape1.age*20));

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值