mirror of
https://github.com/eliasstepanik/voxel-simulation.git
synced 2026-01-10 21:38:29 +00:00
Refactor
This commit is contained in:
parent
bef1e3d06d
commit
366381286a
@ -18,4 +18,5 @@ noise = "0.9.0"
|
||||
itertools = "0.13.0"
|
||||
bitvec = "1.0.1"
|
||||
smallvec = "1.14.0"
|
||||
once_cell = "1.21.3"
|
||||
once_cell = "1.21.3"
|
||||
rayon = "1.10.0"
|
||||
@ -1,42 +1,33 @@
|
||||
use bevy::asset::RenderAssetUsages;
|
||||
use bevy::pbr::wireframe::{Wireframe, WireframeColor};
|
||||
use crate::plugins::big_space::big_space_plugin::RootGrid;
|
||||
use crate::plugins::environment::systems::voxels::structure::*;
|
||||
|
||||
use bevy::prelude::*;
|
||||
use bevy::render::mesh::*;
|
||||
use big_space::floating_origins::FloatingOrigin;
|
||||
use big_space::prelude::GridCell;
|
||||
use noise::{Fbm, NoiseFn, Perlin};
|
||||
use crate::plugins::big_space::big_space_plugin::RootGrid;
|
||||
use crate::plugins::environment::systems::camera_system::CameraController;
|
||||
use crate::plugins::environment::systems::planet_system::PlanetMaker;
|
||||
use crate::plugins::environment::systems::voxels::structure::*;
|
||||
use noise::{NoiseFn, Perlin};
|
||||
|
||||
pub fn setup(
|
||||
mut commands: Commands,
|
||||
root: Res<RootGrid>,
|
||||
) {
|
||||
let unit_size = 1.0;
|
||||
|
||||
let octree_base_size = 64.0 * unit_size; // Octree's total size in your world space
|
||||
let unit_size = 1.0_f32;
|
||||
let octree_base_size = 64.0 * unit_size;
|
||||
let octree_depth = 10;
|
||||
|
||||
// 1. Create octree and wrap in Arc<Mutex<>> for thread-safe generation
|
||||
let mut octree = SparseVoxelOctree::new(octree_depth, octree_base_size, false, false, false);
|
||||
|
||||
let mut octree = SparseVoxelOctree::new(octree_depth, octree_base_size as f32, false, false, false);
|
||||
|
||||
|
||||
// 2. Generate sphere in parallel, dropping the cloned Arc inside the function
|
||||
let color = Color::rgb(0.2, 0.8, 0.2);
|
||||
/*generate_voxel_rect(&mut octree,color);*/
|
||||
|
||||
generate_voxel_sphere(&mut octree, 100, color);
|
||||
|
||||
// 4. Spawn entity with both Transform and the real octree component
|
||||
commands.entity(root.0).with_children(|parent| {
|
||||
parent.spawn(
|
||||
(
|
||||
Transform::default(),
|
||||
octree
|
||||
)
|
||||
);
|
||||
parent.spawn((Transform::default(), octree));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
fn generate_voxel_sphere(
|
||||
octree: &mut SparseVoxelOctree,
|
||||
planet_radius: i32,
|
||||
@ -77,7 +68,6 @@ fn generate_voxel_sphere(
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Inserts a 16x256x16 "column" of voxels into the octree at (0,0,0) corner.
|
||||
/// If you want it offset or centered differently, just adjust the for-loop ranges or offsets.
|
||||
fn generate_voxel_rect(
|
||||
@ -151,3 +141,45 @@ fn generate_large_plane(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub fn generate_solid_plane_with_noise(
|
||||
octree: &mut SparseVoxelOctree,
|
||||
width: usize,
|
||||
depth: usize,
|
||||
color: Color,
|
||||
noise: &Perlin,
|
||||
frequency: f32,
|
||||
amplitude: f32,
|
||||
) {
|
||||
// Size of one voxel at the deepest level
|
||||
let step = octree.get_spacing_at_depth(octree.max_depth);
|
||||
|
||||
for ix in 0..width {
|
||||
let x = ix as f32;
|
||||
for iz in 0..depth {
|
||||
let z = iz as f32;
|
||||
|
||||
// Sample Perlin noise at scaled coordinates
|
||||
let sample_x = x * frequency;
|
||||
let sample_z = z * frequency;
|
||||
let noise_val = noise.get([sample_x as f64, sample_z as f64]) as f32;
|
||||
|
||||
// Height in world units
|
||||
let height_world = noise_val * amplitude;
|
||||
// Convert height to number of voxel layers
|
||||
let max_layer = (height_world / step).ceil() as usize;
|
||||
|
||||
// Fill from layer 0 up to max_layer
|
||||
for iy in 0..=max_layer {
|
||||
let position = Vec3::new(
|
||||
x * step,
|
||||
iy as f32 * step,
|
||||
z * step,
|
||||
);
|
||||
|
||||
let voxel = Voxel { color };
|
||||
octree.insert(position, voxel);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user