|
1 | 1 | #pragma once
|
2 | 2 | #include "StaticParticleGenerator.h"
|
3 | 3 |
|
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 |
6 | 6 |
|
7 | 7 | StaticParticleGenerator::StaticParticleGenerator()
|
8 | 8 | {
|
@@ -125,24 +125,42 @@ std::vector<SphParticle> StaticParticleGenerator::generateStaticParticles(Terrai
|
125 | 125 |
|
126 | 126 | void StaticParticleGenerator::generateParticlesOnFace(Face& face, double particleDensity, std::vector<SphParticle>& generatedParticles)
|
127 | 127 | {
|
| 128 | + //New version |
| 129 | + if (particleDensity < 0.0) |
| 130 | + return; |
| 131 | + |
128 | 132 | Vector3 particlePosition = Vector3();
|
129 | 133 |
|
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(); |
132 | 139 |
|
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++) |
135 | 146 | {
|
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++) |
137 | 151 | {
|
138 |
| - if (x + y > 1) |
| 152 | + y_perc = ((y * particleDensity) + curr_offset) / y_distance; |
| 153 | + |
| 154 | + if (x_perc + y_perc >= 1.0) |
139 | 155 | continue;
|
140 | 156 |
|
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); |
142 | 158 | generatedParticles.push_back(StaticParticle(particlePosition));
|
143 |
| - //std::cout << particlePosition << std::endl; |
| 159 | + std::cout << particlePosition << std::endl; |
144 | 160 | //TODO Debug output
|
145 | 161 | }
|
| 162 | + |
| 163 | + uneven = !uneven; |
146 | 164 | }
|
147 | 165 | }
|
148 | 166 |
|
|
0 commit comments