From a53fddc7cb1f095145344c8781c0bea82c46babb Mon Sep 17 00:00:00 2001 From: nathan Date: Sun, 17 Aug 2025 14:13:07 -0600 Subject: Poles face which other now --- assets/models/UtilityPole.mtl | 2 +- assets/models/UtilityPole.obj | 254 +++++++++++++++++++++--------------------- blender/UtilityPole.blend | Bin 520866 -> 485398 bytes src/world.c | 42 +++++-- src/world.h | 2 +- 5 files changed, 165 insertions(+), 135 deletions(-) diff --git a/assets/models/UtilityPole.mtl b/assets/models/UtilityPole.mtl index 2f89de0..de4ca00 100644 --- a/assets/models/UtilityPole.mtl +++ b/assets/models/UtilityPole.mtl @@ -1,4 +1,4 @@ -# Blender 4.4.3 MTL File: 'None' +# Blender 4.4.3 MTL File: 'UtilityPole.blend' # www.blender.org newmtl Material diff --git a/assets/models/UtilityPole.obj b/assets/models/UtilityPole.obj index a4e05ce..b7971d5 100644 --- a/assets/models/UtilityPole.obj +++ b/assets/models/UtilityPole.obj @@ -2,122 +2,124 @@ # www.blender.org mtllib UtilityPole.mtl o UtilityPole -v -4.185792 96.787964 40.433559 -v -4.185785 96.787964 -40.433559 -v -2.886754 97.537964 40.433559 -v -2.886747 97.537964 -40.433559 -v -2.886754 99.037964 40.433559 -v -2.886747 99.037964 -40.433559 -v -4.185792 99.787964 40.433559 -v -4.185785 99.787964 -40.433559 -v -5.484830 99.037964 40.433559 -v -5.484823 99.037964 -40.433559 -v -5.484830 97.537964 40.433559 -v -5.484823 97.537964 -40.433559 -v 0.000000 -100.000000 -2.999992 -v 0.000000 100.000000 -3.000008 -v 2.598076 -100.000000 -1.499992 -v 2.598076 100.000000 -1.500008 -v 2.598076 -100.000000 1.500008 -v 2.598077 100.000000 1.499993 -v -0.000000 -100.000000 3.000008 -v 0.000000 100.000000 2.999993 -v -2.598076 -100.000000 1.500008 -v -2.598076 100.000000 1.499993 -v -2.598077 -100.000000 -1.499992 -v -2.598076 100.000000 -1.500008 -v -4.185792 81.228996 40.433559 -v -4.185785 81.228996 -40.433559 -v -2.886754 81.978996 40.433559 -v -2.886747 81.978996 -40.433559 -v -2.886754 83.478996 40.433559 -v -2.886747 83.478996 -40.433559 -v -4.185792 84.228996 40.433559 -v -4.185785 84.228996 -40.433559 -v -5.484830 83.478996 40.433559 -v -5.484823 83.478996 -40.433559 -v -5.484830 81.978996 40.433559 -v -5.484823 81.978996 -40.433559 -v 1.097947 75.581894 -0.852443 -v -3.878506 82.333672 -9.659947 -v 1.563250 76.434464 -0.461776 -v -3.413203 83.186241 -9.269281 -v 1.073404 77.014130 0.259365 -v -3.903049 83.765900 -8.548140 -v 0.118254 76.741219 0.589839 -v -4.858199 83.492996 -8.217666 -v -0.347049 75.888649 0.199172 -v -5.323502 82.640427 -8.608332 -v 0.142797 75.308990 -0.521969 -v -4.833655 82.060760 -9.329473 -v 1.475691 75.549820 -1.176989 -v -4.384640 83.244644 6.442365 -v 2.520627 75.652954 -0.477439 -v -3.339703 83.347771 7.141915 -v 2.562824 74.990311 0.224222 -v -3.297507 82.685127 7.843576 -v 1.560084 74.224533 0.226332 -v -4.300247 81.919357 7.845686 -v 0.515147 74.121407 -0.473217 -v -5.345184 81.816223 7.146136 -v 0.472950 74.784050 -1.174878 -v -5.387380 82.478867 6.444476 -v 1.475691 91.219925 -1.176989 -v -4.384640 98.914749 6.442366 -v 2.520628 91.323059 -0.477439 -v -3.339703 99.017876 7.141915 -v 2.562824 90.660416 0.224222 -v -3.297507 98.355232 7.843575 -v 1.560084 89.894638 0.226332 -v -4.300247 97.589462 7.845687 -v 0.515148 89.791512 -0.473217 -v -5.345183 97.486336 7.146137 -v 0.472951 90.454155 -1.174878 -v -5.387380 98.148972 6.444476 -v 1.097946 91.251999 -0.852443 -v -3.878506 98.003777 -9.659947 -v 1.563250 92.104568 -0.461776 -v -3.413203 98.856346 -9.269280 -v 1.073403 92.684235 0.259365 -v -3.903049 99.436012 -8.548140 -v 0.118254 92.411324 0.589839 -v -4.858199 99.163101 -8.217666 -v -0.347050 91.558754 0.199172 -v -5.323503 98.310532 -8.608333 -v 0.142797 90.979095 -0.521969 -v -4.833656 97.730873 -9.329473 -vn 0.5000 -0.8660 -0.0000 -vn 1.0000 -0.0000 -0.0000 -vn 0.5000 0.8660 -0.0000 -vn -0.5000 0.8660 -0.0000 +v 40.433559 96.787964 4.185790 +v -40.433559 96.787964 4.185787 +v 40.433559 97.537964 2.886752 +v -40.433559 97.537964 2.886749 +v 40.433559 99.037964 2.886753 +v -40.433559 99.037964 2.886749 +v 40.433559 99.787964 4.185791 +v -40.433559 99.787964 4.185787 +v 40.433559 99.037964 5.484828 +v -40.433559 99.037964 5.484825 +v 40.433559 97.537964 5.484828 +v -40.433559 97.537964 5.484825 +v -2.999992 -100.000000 0.000000 +v -3.000008 100.000000 -0.000000 +v -1.499993 -100.000000 -2.598076 +v -1.500008 100.000000 -2.598076 +v 1.500008 -100.000000 -2.598076 +v 1.499993 100.000000 -2.598077 +v 3.000008 -100.000000 0.000000 +v 2.999993 100.000000 -0.000000 +v 1.500008 -100.000000 2.598076 +v 1.499993 100.000000 2.598076 +v -1.499992 -100.000000 2.598077 +v -1.500008 100.000000 2.598076 +v 40.433559 81.228996 4.185790 +v -40.433559 81.228996 4.185787 +v 40.433559 81.978996 2.886752 +v -40.433559 81.978996 2.886749 +v 40.433559 83.478996 2.886753 +v -40.433559 83.478996 2.886749 +v 40.433559 84.228996 4.185791 +v -40.433559 84.228996 4.185787 +v 40.433559 83.478996 5.484828 +v -40.433559 83.478996 5.484825 +v 40.433559 81.978996 5.484828 +v -40.433559 81.978996 5.484825 +v -0.852443 75.581894 -1.097947 +v -9.659947 82.333672 3.878506 +v -0.461776 76.434464 -1.563250 +v -9.269281 83.186241 3.413203 +v 0.259365 77.014130 -1.073404 +v -8.548140 83.765900 3.903049 +v 0.589839 76.741219 -0.118254 +v -8.217666 83.492996 4.858199 +v 0.199172 75.888649 0.347049 +v -8.608332 82.640427 5.323503 +v -0.521969 75.308990 -0.142797 +v -9.329473 82.060760 4.833656 +v -1.176989 75.549820 -1.475691 +v 6.442365 83.244644 4.384639 +v -0.477439 75.652954 -2.520627 +v 7.141915 83.347771 3.339703 +v 0.224222 74.990311 -2.562824 +v 7.843576 82.685127 3.297507 +v 0.226332 74.224533 -1.560084 +v 7.845686 81.919357 4.300247 +v -0.473217 74.121407 -0.515147 +v 7.146136 81.816223 5.345183 +v -1.174878 74.784050 -0.472950 +v 6.444476 82.478867 5.387380 +v -1.176989 91.219925 -1.475691 +v 6.442366 98.914749 4.384639 +v -0.477439 91.323059 -2.520628 +v 7.141915 99.017876 3.339703 +v 0.224221 90.660416 -2.562824 +v 7.843575 98.355232 3.297507 +v 0.226332 89.894638 -1.560084 +v 7.845687 97.589462 4.300247 +v -0.473217 89.791512 -0.515148 +v 7.146137 97.486336 5.345183 +v -1.174878 90.454155 -0.472951 +v 6.444476 98.148972 5.387380 +v -0.852443 91.251999 -1.097946 +v -9.659947 98.003777 3.878507 +v -0.461776 92.104568 -1.563250 +v -9.269280 98.856346 3.413203 +v 0.259365 92.684235 -1.073403 +v -8.548140 99.436012 3.903050 +v 0.589839 92.411324 -0.118254 +v -8.217666 99.163101 4.858200 +v 0.199172 91.558754 0.347050 +v -8.608333 98.310532 5.323503 +v -0.521969 90.979095 -0.142796 +v -9.329473 97.730873 4.833656 +vn -0.0000 -0.8660 -0.5000 vn -0.0000 -0.0000 -1.0000 +vn -0.0000 0.8660 -0.5000 +vn -0.0000 0.8660 0.5000 vn -1.0000 -0.0000 -0.0000 -vn -0.5000 -0.8660 -0.0000 vn -0.0000 -0.0000 1.0000 -vn 0.5000 -0.0000 -0.8660 -vn 0.5000 -0.0000 0.8660 -vn -0.5000 -0.0000 0.8660 +vn -0.0000 -0.8660 0.5000 +vn 1.0000 -0.0000 -0.0000 +vn -0.8660 -0.0000 -0.5000 +vn 0.8660 -0.0000 -0.5000 +vn 0.8660 -0.0000 0.5000 vn -0.0000 1.0000 -0.0000 -vn -0.5000 -0.0000 -0.8660 +vn -0.8660 -0.0000 0.5000 vn -0.0000 -1.0000 -0.0000 -vn 0.7969 -0.1692 -0.5799 -vn 0.7834 0.6207 0.0332 -vn -0.0135 0.7899 0.6131 -vn -0.7969 0.1692 0.5799 -vn -0.4092 0.5551 -0.7242 -vn -0.7834 -0.6207 -0.0332 -vn 0.0135 -0.7899 -0.6131 -vn 0.4092 -0.5551 0.7242 -vn 0.2959 0.7764 -0.5565 -vn 0.8784 0.3727 0.2992 -vn 0.3766 -0.4910 0.7855 -vn -0.2959 -0.7764 0.5565 -vn -0.4759 0.6249 0.6188 -vn -0.8784 -0.3727 -0.2992 -vn -0.3766 0.4910 -0.7855 -vn 0.4759 -0.6249 -0.6188 -vn -0.7969 0.1692 0.5800 -vn -0.4760 0.6249 0.6188 +vn -0.5800 -0.1692 -0.7969 +vn 0.0332 0.6207 -0.7834 +vn 0.6131 0.7899 0.0135 +vn 0.5799 0.1692 0.7969 +vn -0.7242 0.5551 0.4092 +vn -0.0332 -0.6207 0.7834 +vn -0.6131 -0.7899 -0.0135 +vn 0.7242 -0.5551 -0.4092 +vn -0.5565 0.7764 -0.2959 +vn 0.2992 0.3727 -0.8784 +vn 0.7855 -0.4910 -0.3766 +vn 0.5565 -0.7764 0.2959 +vn 0.6188 0.6249 0.4760 +vn -0.2992 -0.3727 0.8784 +vn -0.7855 0.4910 0.3766 +vn -0.6188 -0.6249 -0.4759 +vn -0.5799 -0.1692 -0.7969 +vn 0.5800 0.1692 0.7969 +vn 0.6188 0.6249 0.4759 +vn -0.6188 -0.6249 -0.4760 vt 1.000000 1.000000 vt 0.833333 0.500000 vt 1.000000 0.500000 @@ -208,10 +210,10 @@ f 68/11/27 66/12/27 62/38/27 f 70/13/28 71/14/28 69/9/28 f 72/15/29 61/16/29 71/14/29 f 67/17/30 69/18/30 71/19/30 -f 74/1/15 75/2/15 73/3/15 +f 74/1/31 75/2/31 73/3/31 f 76/4/16 77/5/16 75/2/16 f 78/6/17 79/7/17 77/5/17 -f 79/7/31 82/13/31 81/9/31 +f 79/7/18 82/13/18 81/9/18 f 80/11/19 78/12/19 74/38/19 f 81/9/20 84/15/20 83/14/20 f 83/14/21 74/44/21 73/16/21 @@ -240,10 +242,10 @@ f 36/15/7 26/44/7 25/16/7 f 35/19/8 25/41/8 31/17/8 f 25/41/8 27/47/8 31/17/8 f 27/47/8 29/48/8 31/17/8 -f 38/1/15 40/4/15 39/2/15 +f 38/1/31 40/4/31 39/2/31 f 40/4/16 42/6/16 41/5/16 f 42/6/17 44/8/17 43/7/17 -f 43/7/31 44/8/31 46/13/31 +f 43/7/32 44/8/32 46/13/32 f 42/12/19 40/45/19 38/38/19 f 38/38/19 48/46/19 44/11/19 f 48/46/19 46/10/19 44/11/19 @@ -256,30 +258,30 @@ f 49/3/23 50/1/23 52/4/23 f 51/2/24 52/4/24 54/6/24 f 53/5/25 54/6/25 56/8/25 f 56/8/26 58/13/26 57/9/26 -f 54/12/27 52/45/27 50/38/27 -f 50/38/27 60/46/27 56/11/27 -f 60/46/32 58/10/32 56/11/32 +f 54/12/33 52/45/33 50/38/33 +f 50/38/33 60/46/33 56/11/33 +f 60/46/27 58/10/27 56/11/27 f 58/13/28 60/15/28 59/14/28 f 60/15/29 50/44/29 49/16/29 -f 59/19/30 49/41/30 55/17/30 -f 49/41/30 51/47/30 53/48/30 -f 55/17/30 49/41/30 53/48/30 +f 59/19/34 49/41/34 55/17/34 +f 49/41/34 51/47/34 53/48/34 +f 55/17/34 49/41/34 53/48/34 f 61/3/23 62/1/23 64/4/23 f 63/2/24 64/4/24 66/6/24 f 65/5/25 66/6/25 68/8/25 f 68/8/26 70/13/26 69/9/26 -f 66/12/27 64/45/27 62/38/27 +f 66/12/33 64/45/33 62/38/33 f 62/38/27 72/46/27 68/11/27 -f 72/46/27 70/10/27 68/11/27 +f 72/46/33 70/10/33 68/11/33 f 70/13/28 72/15/28 71/14/28 f 72/15/29 62/44/29 61/16/29 -f 71/19/30 61/41/30 67/17/30 -f 61/41/30 63/47/30 65/48/30 +f 71/19/34 61/41/34 67/17/34 +f 61/41/34 63/47/34 65/48/34 f 67/17/30 61/41/30 65/48/30 f 74/1/15 76/4/15 75/2/15 f 76/4/16 78/6/16 77/5/16 f 78/6/17 80/8/17 79/7/17 -f 79/7/18 80/8/18 82/13/18 +f 79/7/32 80/8/32 82/13/32 f 78/12/19 76/45/19 74/38/19 f 74/38/19 84/46/19 80/11/19 f 84/46/19 82/10/19 80/11/19 diff --git a/blender/UtilityPole.blend b/blender/UtilityPole.blend index 417fd85..c63f33c 100644 Binary files a/blender/UtilityPole.blend and b/blender/UtilityPole.blend differ diff --git a/src/world.c b/src/world.c index 2130468..fa676c8 100644 --- a/src/world.c +++ b/src/world.c @@ -473,6 +473,22 @@ Seed generateWorldPlants(World* world, Seed seed, int start, int end) return seed; } +// Use sin wave for computing pole positions. +// Does not set y position. +// Index as in World.utilityPoleTransforms index. +Vector3 utilityPoleIndexToPosition(int index, const World* world) +{ + float centerZ = (float)world->size.z / 2.0; + float spacing = (float)world->size.x / WORLD_UTILITY_POLE_COUNT; + + Vector3 position; + position.x = index * spacing; + position.y = 0.0; + position.z = sinf(position.x) * centerZ + centerZ; + + return position; +} + Seed generateWorldUtilityPoles(World* world, const Assets* assets, Seed seed, int start, int end) { @@ -480,20 +496,32 @@ Seed generateWorldUtilityPoles(World* world, const Assets* assets, Seed seed, assets->shaders[INSTANCING_SHADER]; assets->models[UTILITY_POLE_MODEL].materials[0] .maps[MATERIAL_MAP_DIFFUSE].color = BROWN; - - float centerZ = world->size.z / 2.0; - float spacing = (float)world->size.x / WORLD_UTILITY_POLE_COUNT; for (int index = start; index < end; ++index) { FT_RANDOM16(seed); - Entity entity = createEntity(UTILITY_POLE, Vector3Zero()); - seed = putEntityInRandomPlace(world, seed, &entity); + Vector3 position = utilityPoleIndexToPosition(index - start, world); + + // Create pole. + Entity entity = createEntity(UTILITY_POLE, position); + placeEntityOnGround(&entity, world); world->entities[index] = entity; - world->utilityPoleTransforms[index - start] = MatrixTranslate( - entity.position.x, entity.position.y, entity.position.z); + // Get direction to next pole. + Vector3 nextPosition = utilityPoleIndexToPosition(index - start + 1, + world); + Matrix lookat = MatrixLookAt(position, nextPosition, + (Vector3){0.0, 1.0, 0.0}); + // Hack for it to not effect position. Likely this isn't in a update look. + lookat = QuaternionToMatrix(QuaternionFromMatrix(MatrixInvert(lookat))); + + // Add pole to instancing data. + Matrix translation = MatrixTranslate(entity.position.x, + entity.position.y, + entity.position.z); + Matrix matrix = MatrixMultiply(lookat, translation); + world->utilityPoleTransforms[index - start] = matrix; } return seed; diff --git a/src/world.h b/src/world.h index 8cfa91f..97311a1 100644 --- a/src/world.h +++ b/src/world.h @@ -7,7 +7,7 @@ #define WORLD_ENTITY_MAX 5000 #define WORLD_PLANT_COUNT 2500 -#define WORLD_UTILITY_POLE_COUNT 50 +#define WORLD_UTILITY_POLE_COUNT 25 #define WORLD_PLACE_COUNT 1 #define WORLD_SIZE (Vector3){4096.0, 256.0, 4096.0} -- cgit v1.2.3