发射器用于直接创建流体粒子,可以实现模拟水龙头、喷嘴、流血的伤口等。
它有两种模式:
第一种,常压力(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);