Ejemplo n.º 1
0
void Grid::insertParticles(btFluidParticles& particles)
{
    if (particles.size() == 0) return;
    m_particles = &particles;
    
    for(int i = 0; i < particles.size(); ++i)
    {
        const btVector3& position = particles.m_pos[i];
        CellPosition pos = getCellPosition(position);
        m_data[pos.x][pos.y][pos.z].indices.push_back(i);
    }
}
void btFluidSphSolver::integratePositionsSingleFluid(const btFluidSphParametersGlobal& FG, btFluidParticles& particles)
{
	BT_PROFILE("btFluidSphSolver::integratePositionsSingleFluid()");
	
	//Velocity is at simulation scale; divide by simulation scale to convert to world scale
	btScalar timeStepDivSimScale = FG.m_timeStep / FG.m_simulationScale;
	
	//Leapfrog integration
	//p(t+1) = p(t) + v(t+1/2)*dt
	for(int i = 0; i < particles.size(); ++i) particles.m_pos[i] += particles.m_vel[i] * timeStepDivSimScale;
}
Ejemplo n.º 3
0
float Potential(mpVector p, const btFluidParticles &particles)
{
    btVector3 pos(p.x, p.y, p.z);
    
    float val = Constant.m_particleMass * Constant.W_Poly6(btVector3(0, 0, 0));
    for (int i = 0; i < particles.size(); i++)
    {
        btVector3 r = particles.m_pos[i] - pos ;
        btScalar rSquared = r.length2();
        
        if(Constant.m_hSquared > rSquared)
        {
            btScalar tmp = Constant.m_particleMass * Constant.W_Poly6(r);
            val += tmp;
        }
    }	return val;
}