summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2021-09-29 11:54:07 -0400
committerpommicket <pommicket@gmail.com>2021-09-29 11:54:07 -0400
commitdbbe3bcdb841e51fa06effd1aab07bcb24f422eb (patch)
tree2fcf73c9680ec62c8a143b5f43a0281bc6172a22
parent0b9cd314267fb3f654959ed4a33e604b4bfb4fa3 (diff)
adding more grains
-rw-r--r--main.c20
-rw-r--r--vlib.h4
2 files changed, 17 insertions, 7 deletions
diff --git a/main.c b/main.c
index 6338951..4888865 100644
--- a/main.c
+++ b/main.c
@@ -4,7 +4,7 @@
static const float PLAYER_HEIGHT = 1.5f;
-static GLProgram *program_unlit, *program_main, *program_grain;
+static GLProgram *program_grain;
static mat4 g_camera;
static bool g_wireframe;
@@ -38,8 +38,6 @@ int main(int argc, char **argv) {
Player player_data = {0}, *player = &player_data;
World world_data = {0}, *world = &world_data;
- program_unlit = gl_program_new("unlitv.glsl", "unlitf.glsl");
- program_main = gl_program_new("mainv.glsl", "mainf.glsl");
program_grain = gl_program_new("grainv.glsl", "grainf.glsl");
typedef struct {
vec3 pos;
@@ -66,8 +64,9 @@ int main(int argc, char **argv) {
window_set_relative_mouse(1);
+ float grain_gen_radius = 2;
for (int i = 0; i < 100000; ++i) {
- arr_add(world->grains, addc3(scale3(rand_vec3(), 4),-2));
+ arr_add(world->grains, scale3(rand_unit_vec3(), grain_gen_radius * randf()));
}
const uint32_t tex_width = 1024;
uint32_t tex_chunk_size = tex_width * 4; // height must be a multiple of 4
@@ -126,13 +125,24 @@ int main(int argc, char **argv) {
if (!g_wireframe)
gl.Enable(GL_DEPTH_TEST);
+ {
+ uint n_new_grains = 10000;
+ uint32_t ngrains = arr_len(world->grains);
+ vec3 *p, *end;
+ memmove(world->grains, world->grains + n_new_grains, (ngrains - n_new_grains) * sizeof *world->grains);
+ end = world->grains + ngrains;
+ for (p = end - n_new_grains; p < end; ++p) {
+ *p = scale3(rand_unit_vec3(), grain_gen_radius * randf());
+ }
+ }
+
{ // fixed time step (for consistency)
float t = dt + leftover_time;
while (t >= timestep) {
arr_foreachp(world->grains, vec3, g) {
float x = g->x, y = g->y, z = g->z;
(void)x; (void)y; (void)z;
- vec3 wind = Vec3(-z, y, x);
+ vec3 wind = Vec3(-z, y*100, x);
*g = add3(*g, scale3(wind, timestep));
}
t -= timestep;
diff --git a/vlib.h b/vlib.h
index c05340a..bfe869b 100644
--- a/vlib.h
+++ b/vlib.h
@@ -10778,7 +10778,7 @@ V_DECL vec2 rand_unit_vec2(void) {
V_DECL vec3 rand_unit_vec3(void) {
vec3 v;
do
- v = rand_vec3();
+ v = addc3(scale3(rand_vec3(),2),-1);
while (sqlength3(v) > 1);
return normalize3(v);
}
@@ -10786,7 +10786,7 @@ V_DECL vec3 rand_unit_vec3(void) {
V_DECL vec4 rand_unit_vec4(void) {
vec4 v;
do
- v = rand_vec4();
+ v = addc4(scale4(rand_vec4(),2),-1);
while (sqlength4(v) > 1);
return normalize4(v);
}