PhysX流体笔记之发射器

 发射器用于直接创建流体粒子,可以实现模拟水龙头、喷嘴、流血的伤口等。

 它有两种模式:

 第一种,常压力(Constant pressure),发射粒子的压力是固定的,水射出一条线可以用这个模拟。

 第二种,常流速(Constant flow rate),发射器在每帧保持发射固定数量的粒子。通过操做NxFluidEmitterDesc::rate,可以动态的更改流速,通过NxFluidEmitterDesc的NX_FEF_ENABLED标志,可以开启或者关闭发射器

 

创建发射器

  

需要一个NxFluidEmitterDesc,设置参数,然后用这个描述符调用NxFluid::createEmitter()方法来创建。

简单介绍一下几个NxFluidEmitterDesc中笔记重要的参数:

 

relPose                            发射器的姿态,位置和旋转等

type                                 发射器类型,可以是常压力或常流速,分别对应

                                        NX_PE_CONSTANT- PRESSURE和 NX_PE_CONSTANT_FLOW_RATE

shape                              发射器的形状,当前版本中有两中类型,方形(NX_PE_RECTANGULAR)和椭

                                        圆形(NX_PE_ELLIPSE)

particleLifetime                发射器发出的粒子的生存时间,以秒记,如果设为零,粒子将一直存活,直到碰

                                        到drain(这个词暂时没找到合适的翻译)

maxParticles                    发射器可以发射的最大的粒子数,当发射的粒子数达到最大值后,发射器停止创

                                        建粒子,然后用已经落地的粒子重新开始发射。设为0,不限制发射的粒子数,

                                        它会一直发射,直到到达Fluid的最大粒子数。

rate                                 每秒钟发射的粒子数。只在NX_PE_CONSTANT_FLOW_RATE时才有效

dimensionX,dimensionY   发射器的尺寸

 

 

示例代码

创建发射器

 

    NxFluidEmitterDesc emitterDesc;
    emitterDesc.setToDefault();
    emitterDesc.dimensionX = 0.03;
    emitterDesc.dimensionY = 0.03;
    emitterDesc.relPose.id();
    NxReal mat[] = {1,0,0,0, 0,0,1,0, 0,-1,0,0, 0,2,0,1};
    emitterDesc.relPose.setColumnMajor44(mat);
    emitterDesc.rate = 5.0;
    emitterDesc.randomAngle = 0.1f;
    emitterDesc.fluidVelocityMagnitude = 6.5f;
    emitterDesc.maxParticles = MAX_PARTICLES;
    emitterDesc.particleLifetime = 4.0f;
    emitterDesc.type = NX_FE_CONSTANT_FLOW_RATE;
    emitterDesc.shape = NX_FE_ELLIPSE;
    gFluidEmitter = gFluid->createEmitter(emitterDesc);

你可能感兴趣的:(PhysX流体笔记之发射器)