將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...