예제 #1
0
void ParticleHandler::init(){
    

#ifdef FIXEDSIZE
    setNumParticles(FIXEDSIZE);
#else
    setNumParticles(10000);
    initGrid();
//    loadModel();
        initIndexes();
#endif



    forceHandler->initForces();
    
}
예제 #2
0
void ParticleHandler::loadModel(string name){
    bool addFaceCenter = true;
    string path="/Users/Tintamar/Work/BO/Chrone/tests/";
    if(name=="")path+= "pyramid.obj";
    else path+=name;
    ofFile file(path);
    ofBuffer buf= file.readToBuffer();
    ofBuffer::Lines lines = buf.getLines();
    int numVec = 0,numFace=0;
    for(auto l:lines){
        if(l[0] == 'v'){
            numVec++;
        }
        if (l[0] == 'f'){
            numFace++;
        }
    }
    numParticles = numVec+(addFaceCenter?numFace:0);
    side = pow((double)numParticles,0.334);
    positionInit.resize(numParticles, MyMatrixType::ColsAtCompileTime);

    int idx=0;
    double wi = getWidthSpace()/2.0;
    for(auto l:lines){
        if(l[0] == 'v'){
            vector<string> ll = ofSplitString(l, " ");
            positionInit.row(idx)[0] = ofToFloat(ll[1])*wi;
            positionInit.row(idx)[1] = ofToFloat(ll[2])*wi;
            positionInit.row(idx)[2] = ofToFloat(ll[3])*wi;
            idx++;
        }
        if(l[0]=='f' && addFaceCenter){
            vector<string> ll = ofSplitString(l, " ");
            int numCoins = ll.size()-1;
            Array<MatReal,3,1> middle;
            middle.setZero();
            for(int i = 0 ; i < numCoins ; i++){
                middle+=positionInit.row(ofToInt(ll[i+1]));
            }
            middle/=numCoins;
            positionInit.row(idx) = middle;
            idx++;
        }
        

        
    }
    
    setNumParticles(numParticles);
}
예제 #3
0
ParticleFilter::ParticleFilter(
        int frameWidth, int frameHeight, int nParticles, int nIters,
        int particleWidth, int particleHeight, int histSize, Target *target
        )
{
    type = Rectangle;
    m_target = target;
    img_height = frameHeight;
    img_width = frameWidth;
    m_num_particles_to_display = 0;
    setNumParticles(nParticles);
    setNumIters(nIters);
    setParticleWidth(particleWidth);
    setParticleHeight(particleHeight);
    setParticlesToDisplay(m_num_particles_to_display);
    setHistSize(histSize);
    m_distortRange = 5;
    srand(time(nullptr));
    initializeParticles();
    auto seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
    m_RandomGen = std::mt19937(seed);
}
예제 #4
0
bool Localizer::loadConfig(istream& is)
{
	while(1)
	{
		string line;
		getline(is,line);
		if(!is.good())
			break;
		if(line[0]=='#')
			continue;
		if(line=="end")
			return true;

		stringstream buffer(line);
		string command;
		buffer>>command;
		
		if(command=="numParticles:")
		{
			int num;
			buffer>>num;
			setNumParticles(num);
		}
		else if(command=="neff:")
예제 #5
0
bool Emitter::parseParticleFile(std::string _filePath)
{
    Parser p(_filePath);
    std::string keyword = "";

    while((keyword = p.getNextKeyword()) != "")
    {
        if(keyword == "ResourceID")
            loadTexture(p.getInt(0));
        else if(keyword == "NumParticles")
            setNumParticles(p.getInt(0));
        else if(keyword == "Pulse")
        {
            mPulseRate   = p.getFloat(0);
            mPulseLength = p.getFloat(1);
        }

        else if(keyword == "ColourStart")
        {
            mColourStart.r = (sf::Uint8)p.getFloat(0);
            mColourStart.g = (sf::Uint8)p.getFloat(1);
            mColourStart.b = (sf::Uint8)p.getFloat(2);
            mColourStart.a = (sf::Uint8)p.getFloat(3);
        }
        else if(keyword == "ColourEnd")
        {
            mColourEnd.r = (sf::Uint8)p.getFloat(0);
            mColourEnd.g = (sf::Uint8)p.getFloat(1);
            mColourEnd.b = (sf::Uint8)p.getFloat(2);
            mColourEnd.a = (sf::Uint8)p.getFloat(3);
        }
        else if(keyword == "ColourStartVariant")
        {
            mColourStartVariant.r = (sf::Uint8)p.getFloat(0);
            mColourStartVariant.g = (sf::Uint8)p.getFloat(1);
            mColourStartVariant.b = (sf::Uint8)p.getFloat(2);
            mColourStartVariant.a = (sf::Uint8)p.getFloat(3);
        }
        else if(keyword == "ColourEndVariant")
        {
            mColourEndVariant.r = (sf::Uint8)p.getFloat(0);
            mColourEndVariant.g = (sf::Uint8)p.getFloat(1);
            mColourEndVariant.b = (sf::Uint8)p.getFloat(2);
            mColourEndVariant.a = (sf::Uint8)p.getFloat(3);
        }

        else if(keyword == "SizeStart")
            mSizeStart = p.getFloat(0);
        else if(keyword == "SizeEnd")
            mSizeEnd = p.getFloat(0);
        else if(keyword == "SizeStartVariant")
            mSizeStartVariant = p.getFloat(0);
        else if(keyword == "SizeEndVariant")
            mSizeEndVariant = p.getFloat(0);

        else if(keyword == "SpeedStart")
            mSpeedStart = p.getFloat(0);
        else if(keyword == "SpeedEnd")
            mSpeedEnd = p.getFloat(0);
        else if(keyword == "SpeedStartVariant")
            mSpeedStartVariant = p.getFloat(0);
        else if(keyword == "SpeedEndVariant")
            mSpeedEndVariant = p.getFloat(0);

        else if(keyword == "LifeTime")
            mLifeTime = p.getFloat(0);
        else if(keyword == "LifeTimeVariant")
            mLifeTimeVariant = p.getFloat(0);

        else if(keyword == "PositionVariant")
        {
            mPositionVariant.x = p.getFloat(0);
            mPositionVariant.y = p.getFloat(1);
        }
    }

    calculateBirthRate();
    return true;
}