資源簡(jiǎn)介
干貨!這是本人基于光滑粒子流體動(dòng)力學(xué)做的一個(gè)杯中水的模擬,比較成功!兩年的sph學(xué)習(xí)不容易,今天特意拿出來(lái)與你們分享——sph方法的編程核心技巧!

代碼片段和文件信息
#include?????
#include?????
#include?????
#include?????
???
#include?“cpu_sph.h“????
???
???
//#define?RADIUS?0.03f????
#define?EPSILON?0.00001f????
const?float?PI?=?3.1415926535f;???
???
#define?POS(i)?sph->pos[i]????
#define?VEL(i)?sph->vel[i]????
#define?ACC(i)?sph->acc[i]????
#define?VELH(i)?sph->vel_half[i]????
???
void?cpu_sph_create(cpu_sph*?sph?//創(chuàng)建SPH流體????
????????????????????int?size?const?vector3*?pos?const?vector3*?vel???
????????????????????float?smoothlen?float?viscosity?float?mass?float?stiff?float?r_search?int?n_loops)???
{???
????int?i;???
????float?h?=?smoothlen;???
????float*?mem;???
????sph->viscosity?=?viscosity;???
????sph->n_particles?=?size;???
????sph->smoothlen?=?smoothlen;???
????sph->n_loops?=?n_loops;???
????sph->stiff?=?stiff;???
???
????sph_neighbour_list_create(&sph->n_list?size);//為SPH的list分配空間,與sph的size同大小????
???
????sph_grid_create(&sph->grid?sph->n_particles?h);//為網(wǎng)格分配空間????
????sph->grid.grid_len?=?r_search;???
????sph->r_search?=?r_search;???
???
????//?Allocate?memory?for?attributes?of?particles????
????mem?=?(float*)malloc(49*size*sizeof(float));???
????sph->mass?=?(float*)&mem[0];???
????sph->density?=?(float*)&mem[size];???
????sph->pressure?=?(float*)&mem[2*size];???
????sph->pos?=?(vector3*)&mem[3*size];???
????sph->vel?=?(vector3*)&mem[6*size];???
????sph->vel_half?=?(vector3*)&mem[9*size];???
????sph->acc?=?(vector3*)&mem[12*size];???
????sph->normal?=?(vector3*)&mem[15*size];???
????sph->curvature?=?(float*)&mem[18*size];???
???
????sph->fluid_start?=?0;???
????sph->n_fluidp?=?size?-?sph->fluid_start;???
???
????for?(i?=?sph->fluid_start;?i?fluid_start?+?sph->n_fluidp;?i++)???
????{???
????????sph->mass[i]?=?mass;???
????}???
???
????memcpy(sph->pos?pos?sph->n_particles*sizeof(vector3));???
????memcpy(sph->vel?vel?sph->n_particles*sizeof(vector3));???
????memcpy(sph->vel_half?vel?sph->n_particles*sizeof(vector3));???
???
????//?Precompute?kernel?coefficients????
????sph->poly6_coef?=?315.0f/(64.0f*PI*(float)pow(h?9));???
????sph->grad_poly6_coef?=?945.0f/(32.0f*PI*(float)pow(h?9));???
????sph->lap_poly6_coef?=?945.0f/(32.0f*PI*(float)pow(h?9));???
????sph->grad_spiky_coef?=?-45.0f/(PI*h*h*h*h*h*h);???
????sph->lap_vis_coef?=?45.0f/(PI*h*h*h*h*h*h);???
???
????/****?FOR?TEST?****/???
????mat4_set_identity(&sph->mat_col);//把參數(shù)內(nèi)容置0????
????sph_grid_clear(&sph->grid?sph->pos?0?sph->n_particles?-?1);???
}???
???
void?cpu_sph_transform_obstacles(cpu_sph*?sph?const?matrix4*?m)//根據(jù)障礙物信息,更新粒子的位置????
{???
????mat4_mul(&sph->mat_col?m?&sph->mat_col);???
????mat4_invert(&sph->mat_inv_col?&sph->mat_col);???
}???
???
???
void?cpu_sph_compute_density(cpu_sph*?sph?bool?first)//計(jì)算密度,被模擬函數(shù)調(diào)用????
{???
????int?i;???
????int?j;???
???
????int?nindex;???
????sph_neighbour_list*?nlist;???
???
????memset(sph->density?0?sph->n_particles*sizeof(float));???
???
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-08-01?09:46??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\
?????目錄???????????0??2018-08-01?09:46??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\
?????目錄???????????0??2018-08-01?09:46??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\Debug\
?????文件????????6088??2011-05-26?10:44??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\Debug\BuildLog.htm
?????文件?????????145??2011-05-26?10:44??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\Debug\SPH.exe.intermediate.manifest
?????文件???????14302??2011-05-26?10:44??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\Debug\cpu_sph.obj
?????文件???????21430??2011-05-12?16:49??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\Debug\glg.obj
?????文件???????13231??2011-05-25?16:47??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\Debug\main.obj
?????文件??????????67??2011-05-26?10:44??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\Debug\mt.dep
?????文件????????6094??2011-05-25?16:48??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\Debug\sph_common.obj
?????文件??????224256??2011-05-26?10:44??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\Debug\vc80.idb
?????文件????????3489??2011-05-24?09:23??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\SPH.vcproj
?????文件????????1409??2011-05-07?18:01??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\SPH.vcproj.412-PC.412.user
?????文件????????1427??2010-09-02?19:35??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\SPH.vcproj.51F8FAE1C2F0405.Administrator.user
?????文件????????1427??2011-05-27?21:14??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\SPH.vcproj.WWW-531B1916A99.Administrator.user
?????文件???????11059??2011-05-26?10:44??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\cpu_sph.cpp
?????文件????????2008??2010-09-02?19:18??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\cpu_sph.h
?????文件???????28791??2010-09-02?19:18??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\glg.cpp
?????文件???????10001??2010-09-02?19:30??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\glg.h
?????文件????????6060??2011-05-25?16:47??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\main.cpp
?????文件????????6826??2011-05-25?16:48??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\sph_common.cpp
?????文件????????1632??2010-09-02?19:21??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH\sph_common.h
?????文件????12233728??2011-05-27?21:14??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH.ncb
?????文件?????????874??2010-09-02?19:25??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH.sln
?????文件???????22016??2011-05-27?21:14??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\SPH.suo
?????目錄???????????0??2018-08-01?09:46??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\debug\
?????文件???????94208??2011-05-26?10:44??基于物理的動(dòng)力學(xué)流體模擬方法,即SPH方法杯中水的模擬\debug\SPH.exe
評(píng)論
共有 條評(píng)論