구속 입자

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 (d, v), d) * lv;

}

}

}

};