salve a tutti
Sto sviluppando un'applicazione in c++ in OpenGl, per il rendering di alcune particelle. Il mio problema è il seguente
1 - ho creato una struttura dati chiamata grid (dove sono contenute le gridLayer, ovvero, i tasselli dell amia griglia)
2 - ho creato una struttura dati chiamata gridLayer(dove sono contenute le particelle). Includo il codice dei file h
class Grid {
public:
Grid(float posX, float posY, float posZ, float rows, float cols);
Grid(const Grid& orig);
Grid();
virtual ~Grid();
void update();
void updatePressure();
void updateVelocity();
void updateViscosity();
void updateSurfaceTension();
void updateExternalForces();
std::vector<GridLayer> getGridLayer();
void addGridLayer(GridLayer g);
void updateGradientAS(VectorR r, float h, float sum, int index);
float getViscosity();
float getPressure();
float getVelocity();
float getDensityA();
void updateDensityA(VectorR r, float h);
float evaluateKernelWPoly6(VectorR r, float h);
float evaluateKernelWSpiky(VectorR r, float h);
float evaluateKernelViscosity(VectorR r, float h);
float evaluateSecondDerivateKernelViscosity(VectorR r, float h);
float evaluateParticleDensity(VectorR r, float h);
void evaluateParticlePressure(float k);
void evaluateExternalForces();
void evaluateViscosity(VectorR r, float h, float mu);
float evaluateVelocityJ(VectorR r, float h);
void resetDensityA();
void resetPressure();
void resetVelocity();
void resetViscosity();
void resetSurfaceTension();
void resetExternalForces();
float getPosX();
float getPosY();
float getPosZ();
private:
float posX;
float posY;
float posZ;
float rows;
float cols;
VectorR **gradientA;
std::vector<GridLayer> gridLayer;
};
class GridLayer {
public:
GridLayer(float labelI, float labelJ, float labelK);
GridLayer(const GridLayer& orig);
GridLayer();
virtual ~GridLayer();
int getParticlesNumber();
Particle getParticleAt(int index);
void addParticle(Particle p);
std::vector<Particle> getAllParticles();
void deleteParticleAt(int p);
void setDistributionAs(float d);
bool operator==(const GridLayer& gridA) const;
bool operator!=(const GridLayer& gridA) const;
GridLayer returnGrid();
float getLabelI();
float getLabelJ();
float getLabelK();
private:
float labelI;
float labelJ;
float labelK;
float distributionAs;
std::vector<Particle> particles;
};
quando vado a creare le varie griglie, nel main, lo faccio nel seguente modo (vi posto due fogli di griglie, per semplicità)
Grid* grid[2];
grid[0] = new Grid(0.0,0.0,0.0,20.0,20.0);
grid[1] = new Grid(0.1, 0.1, 0.1,20,20);
//a questo punto, creo delle gridLayer, e inserisco una particella in ogni gridLayer
for(int i = 0; i<2; i++)
GridLayer* gr = new GridLayer(newI, newJ, 0);
Particle* p = new Particle(1,1,1,newI,newJ,0,newI,newJ,0,1);
gr->addParticle(*p);
grid[0]->addGridLayer(*gr);
grid[1]->addGridLayer(*gr);
ora, qual'è il problema? è il seguente:
In gridLayer ho un vettore di Particelle. La funzione addParticle definita nel file h e implementata in GridLayer.cpp, contiene solo l'istruzione
particles->push_bach(p);
e mi aggiunge la particella al vettore particles.
Però, quando nel main controllo lo status delle particelle, mi viene detto che non ci sono particelle inserite nel vettore. Infatti, se nel main faccio
grid[0]->getGridLayer().at(i).getParticlesNumber(), mi ritorna 0
(nota, getParticlesNumber contiene, come istruzione, solo return this->particles.size()
come mai? non vorrei che fosse un problema legato al passaggio per valore o per riferimento, o non so cosa... per favore, aiutatemi che sto impazzendo...
grazie mille anticipatamente.