PhysX流體筆記之建立粒子

2021-08-23 13:26:31 字數 2249 閱讀 4358

將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

nxfluiddescfluiddesc;

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);

PhysX流體筆記

physx流體筆記之發射器 發射器用於直接建立流體粒子,可以實現模擬水龍頭 噴嘴 流血的傷口等。它有兩種模式 第一種,常壓力 constant pressure 發射粒子的壓力是固定的,水射出一條線可以用這個模擬。第二種,常流速 constant flow rate 發射器在每幀保持發射固定數量的粒...

UE4 學習筆記之粒子系統基礎

什麼是粒子系統?粒子系統 用於建立並管理粒子的系統。粒子 乙個粒子本質只是遊戲世界裡的乙個點。通過粒子系統,我們可以控制粒子的出現和表現。發射器 粒子系統的元件,負責生成粒子。模組 發射器的元件,模組負責控制發射器粒子的表現。模組通常包括許多引數,如粒子的材質和初始速度。1.viewport 該面板...

uCOS III筆記之任務建立

一直在用但並沒用深入的去了解,就好像你有乙個平時經常聊條,但是彼此不了解各自的內心世界,這是一種尷尬只是一種不負責任。再加上感覺自己要老了 剩下的時日不多了 void ostaskcreate os tcb p tcb,任務控制塊指標 cpu char p name,命名任務 os task ptr...