PhysX流体笔记

1649 篇文章 11 订阅
1407 篇文章 2 订阅

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流体笔记之创建粒子


将PhysX文档按自己的语言组织了一遍。 纯粹随笔性质。

 

     创建粒子的描述符是NxFluidDesc,方法有三种:一是直接指定粒子的初始位置和速度,二是使用发射器创建,三是使用NxParticleData和NxFluidDesc::initialParticleData,传递初始的粒子状态来创建。

     如果不希望在一开始就指定粒子的初始状态,简单的将NxFluidDesc的numParticlesPtr置为NULL即可。

     为了渲染,需要指定数据输出的缓冲区,particleWriteData。要注意的是,如果你要在一开始时就指定粒子的状态,那么多个Fluid,不允许使用同一个NxParticleData数据结构。

     创建时,NxParticleData的下面几个成员比较重要,PhysX SDK会读取这些数据:

     bufferPos                         保存粒子的位置

     bufferVel                          保存每个粒子的速度

     bufferLife                         保存每个粒子的生存时间

     如果这些成员都是NULL,PhysX会使用默认值。NxParticleData的其它成员,只在渲染时被实时的更新,这里不用理会。

     创建了之后,你可能还希望动态地向其中添加新的粒子,方法addParticles可以实现此功能。这个方法是有条件限制的,具体能添加多少的粒子,取决于创建时参数的设置以及当前Fluid中已存在的粒子数。PhysX默认的最大粒子数是4096。

     Fluid的模拟可以有两种模式,软件和硬件模拟,默认是采用硬件加速。如果要指定使用软件模拟,在NxFluidDesc中取消NX_FF_HARDWARE标志。暂时只支持在Windows上使用软件模拟。不过软件模拟的话,效率是很低的。

 

     示例代码:

     第一种,指定初始状态的创建方法

     //Set structure to pass particles, and receive them after every simulation step
     NxParticleData particles;

     particles.numParticlesPtr = &gParticleBufferNum;
     particles.bufferPos = &gParticleBuffer[0].x;
     particles.bufferPosByteStride = sizeof(NxVec3);
     //创建描述符
     NxFluidDesc fluidDesc;
     fluidDesc.kernelRadiusMultiplier = 2.3f;
     fluidDesc.restParticlesPerMeter = 10.0f;
     fluidDesc.stiffness = 200.0f;
     fluidDesc.viscosity = 22.0f;
     fluidDesc.restDensity = 1000.0f;
     fluidDesc.damping = 0.0f;
     fluidDesc.simulationMethod = NX_F_SPH;
     fluidDesc.initialParticleData = particles;
     fluidDesc.particlesWriteData = particles;
     gFluid = gScene->createFluid(fluidDesc);

     第二种,使用发射器创建

     //Create fluid
     NxFluidDesc fluidDesc;
     fluidDesc.setToDefault(); 

     fluidDesc.simulationMethod = NX_F_SPH;
           
     fluidDesc.maxParticles = MAX_PARTICLES;  
     fluidDesc.restParticlesPerMeter = 50;   
     fluidDesc.stiffness = 1;   
     fluidDesc.viscosity = 6;
     gParticles = new NxVec3[fluidDesc.maxParticles];

     fluidDesc.particlesWriteData.bufferPos = &gParticles[0].x;  
     fluidDesc.particlesWriteData.bufferPosByteStride = sizeof(NxVec3);   
     fluidDesc.particlesWriteData.numParticlesPtr = &gNumParticles; 

     gScene->createFluid(fluidDesc);

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NVIDIA PhysX 显卡物理加速驱动官方版可在N卡上实现物理加速运算的效果,所有游戏人物的动作和渲染特效都将显现动感十足的特效。NVIDIA PhysX 显卡物理加速驱动官方版是目前官方最稳定的N卡物理加速引擎,很多游戏大作都已经启动该驱动。 NVIDIA英伟达PhysX物理加速驱动9.12.0613版For WinXP-32/WinXP-64/Vista-32/Vista-64/Win7-32/Win7-64(2012年7月3日发布)   包含了NVIDIA英伟达PhysX最新运行时版本,支持所有英伟达 PhysX 内容。   该版本中的变化以及修正的问题:   Performance updates for various applications including Batman Arkham City, Alice 2 and other 2.8.4 applications。   在所有显存容量不低于 256MB 的NVIDIA英伟达GeForce精视8系列、9系列、100系列、200系列、300系列、400系列、500系列以及600系列GPU上均支持英伟达PhysX加速。   注: 一些应用程序的最低要求可能会更高。   大家可以在诸多游戏和演示程序中体验 GPU PhysX 加速,PowerPack 下载区重点展示了其中的一些游戏和演示程序,点此下载。   使用下列版本的软件开发包时,该软件在英伟达精视上支持英伟达 PhysX 加速: 2.7.1、2.7.3、2.7.4、2.7.5、2.7.6、2.8.0、2.8.1、2.8.3 以及 2.8.4 (需要 v196.21 或更新版本的图形驱动程序)。   支持从“英伟达显示器驱动程序控制面板”中控制 GPU PhysX 配置。 (需要 v196.21 或更新版本的图形驱动程序)。   AGEIA PhysX 处理器用户应该使用和安装较旧的英伟达 PhysX 系统软件,例如 8.09.04 版本。 注 – AGEIA PPU 加速仅支持 2.8.1 或更早期版本的软件开发包、Windows Vista 以及 Windows XP。 AGEIA时代的PhysX:   PhysX物理运算引擎由五名年轻的技术人员开发,他们成立了AGEIA公司。由于PhysX物理引擎在设计上就并不适合用CPU去计算,因此AGEIA公司还为PhysX引擎设计了专门的运算硬件,PhysX物理加速卡。PhysX物理加速卡的核心被称为PPU,即物理处理器(Physics processing Unit)。PPU在AGEIA公司被nVIDIA公司收购后已停止生产。   nVIDIA时代的PhysX:   2008年,Nvidia收购了AGEIA。正式将PhysX技术划入旗下。nVIDIA PhysX承袭自AGEIA PhysX,但Nvidia在此基础上推出了nVIDIA PhysX物理加速,并将PhysX物理加速功能移植到nVIDIA GPU中,用户不必额外购买PhysX物理加速卡就能享受到PhysX物理加速功能。借助CUDA架构,nVIDIA重新编写了PhysX物理加速程序,将PhysX物理加速引擎从AGEIA PPU移植到了nVIDIA GPU上。   所谓PhysX物理加速,是指相对于CPU来讲,GPU加快了PhysX物理引擎的计算速度。并不是说PhysX引擎只能由nVIDIA GPU处理。   nVIDIA劣化CPU执行PhysX效率:   如果使用CPU处理PhysX时,PhysX引擎只会调用CPU单线程计算。RealWorld Technologies网站的作者David Kanter使用Intel的VTune进程查看工具分析了多款支持PhysX特效的游戏,发现当这些游戏使用CPU处理物理特效时,大部分的代码使用的仍然是老旧的x87浮点算数指令,而不是效率高得多的SSE指令(SSE指令的完成同样任务的速度能达到x87指令的1.5-2倍)。   支持PhysX的游戏:   目前为止,在全平台上(PC,Xbox,Playstation)共有约260种游戏采用了PhysX引擎。其中在PC平台上,共有226种游戏采用PhysX引擎(截止2011.7.26)。   游戏物理效果   物理效果是未来游戏中最重要的一个方面。它涉及游戏中物体移动、互动以及对周围环境作出反应的方式。在当今许多游戏中如果没有物理效果,物体将无法按照玩家想象中的方式或像现实生活的方式运动。当前,大多数动作还仅限于预先定义好的、或“千篇一律”的动画,并且由游戏中的特定事件触发,例如枪炮射击在墙上等等。即使最强大的武器也只能在最薄的墙上留下一个斑点而已,每一个被你干掉的敌人都以预先定义好的相同模式倒下。玩家看到的只是精美的

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值