Skip to content

Commit 55653bb

Browse files
committed
ParticleGenerator particle_denisty is now the (rough) distance between two particles and particles are generated in a triangulated grid.
1 parent c47edda commit 55653bb

File tree

2 files changed

+30
-12
lines changed

2 files changed

+30
-12
lines changed

SphWaterfall/SphWaterfall/src/particleGen/StaticParticleGenerator.cpp

+28-10
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#pragma once
22
#include "StaticParticleGenerator.h"
33

4-
// density of how many static particles are generated per face
5-
#define STATIC_PARTICLE_GENERATION_DENSITY 0.01
4+
// density of how much the distance between static particles is
5+
#define STATIC_PARTICLE_GENERATION_DENSITY 0.1
66

77
StaticParticleGenerator::StaticParticleGenerator()
88
{
@@ -125,24 +125,42 @@ std::vector<SphParticle> StaticParticleGenerator::generateStaticParticles(Terrai
125125

126126
void StaticParticleGenerator::generateParticlesOnFace(Face& face, double particleDensity, std::vector<SphParticle>& generatedParticles)
127127
{
128+
//New version
129+
if (particleDensity < 0.0)
130+
return;
131+
128132
Vector3 particlePosition = Vector3();
129133

130-
if (0.0 >= particleDensity || 1.0 < particleDensity)
131-
return;
134+
double uneven_offset = particleDensity / 2;
135+
double curr_offset = 0.0;
136+
137+
double x_distance = (face.b - face.a).length();
138+
double y_distance = (face.c - face.a).length();
132139

133-
//Create uniform grid of particles
134-
for (double x = 0.0; x <= 1.0; x += particleDensity)
140+
double x_perc, y_perc;
141+
142+
bool uneven = false;
143+
144+
//Create triangualted grid of particles
145+
for (int x = 0; x * particleDensity <= x_distance; x++)
135146
{
136-
for (double y = 0.0; y <= 1.0; y += particleDensity)
147+
x_perc = (x * particleDensity) / x_distance;
148+
curr_offset = uneven ? uneven_offset : 0.0;
149+
150+
for (int y = 0; ((y * particleDensity) + curr_offset) <= y_distance; y++)
137151
{
138-
if (x + y > 1)
152+
y_perc = ((y * particleDensity) + curr_offset) / y_distance;
153+
154+
if (x_perc + y_perc >= 1.0)
139155
continue;
140156

141-
particlePosition = face.a + ((face.b - face.a) * x) + ((face.c - face.a) * y);
157+
particlePosition = face.a + ((face.b - face.a) * x_perc) + ((face.c - face.a) * y_perc);
142158
generatedParticles.push_back(StaticParticle(particlePosition));
143-
//std::cout << particlePosition << std::endl;
159+
std::cout << particlePosition << std::endl;
144160
//TODO Debug output
145161
}
162+
163+
uneven = !uneven;
146164
}
147165
}
148166

StuProCubeTri.obj

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ v 1.000000 -1.000000 1.000000
55
v -1.000000 -1.000000 -1.000000
66
v 1.000000 -1.000000 -1.000000
77
v -1.000000 1.000000 -1.000000
8-
v 0.999999 1.000000 1.000001
9-
v 1.000000 1.000000 -0.999999
8+
v 1.000000 1.000000 1.000000
9+
v 1.000000 1.000000 -1.000000
1010
v -1.000000 -1.000000 1.000000
1111
v -1.000000 1.000000 1.000000
1212
s 1

0 commit comments

Comments
 (0)