约束粒子

ParticleBlinkScript节点可用于约束粒子位置。例如,此内核将粒子约束到球体的表面。每个粒子向外或向内移动到球体的半径,并旋转其速度以指向与球体表面相切的点。

以下粒子约束内核的结果

注意:  此内核的更实际版本将涉及粒子的逐渐移动,而不是立即执行。

以下内核的示例节点图

kernel ParticleSphereKernel : ImageComputationKernel<ePixelWise>

{

Image<eReadWrite> p_position;

Image<eReadWrite> p_velocity;

 

param:

float3 _centre;

float _radius;

void define() {

defineParam(_centre, "pa_position", float3(0.0f, 0.0f, 0.0f));

defineParam(_radius, "pa_radius", 1.0f);

}

void process() {

float3 d = p_position()-_centre;

float r = length(d);

if ( r != 0.0f ) {

d /= r;

//将粒子移动到球面

p_position() = _centre + d*_radius;

 

//更改速度以跟随曲面

float3 v = p_velocity();

float lv = length(v);

if ( lv != 0.0f ) {

v / = lv;

p_velocity()= cross(cross(d,v),d)* lv;

}

}

}

};