jsb-gravity/src/gen.rs

30 lines
994 B
Rust

use bevy::{prelude::*, render::render_resource::PrimitiveTopology};
use opensimplex_noise_rs::OpenSimplexNoise;
use rand::Rng;
pub fn planet() -> Mesh {
let mut rng = rand::thread_rng();
let simplex = OpenSimplexNoise::new(Some(rng.gen()));
let mut mesh = Mesh::new(PrimitiveTopology::TriangleList);
let perimeter: u32 = 1000;
mesh.insert_attribute(
Mesh::ATTRIBUTE_POSITION,
(0..perimeter)
.map(|i| {
let mut r = simplex.eval_2d(i as f64 * 0.02, 0.) as f32 * 20.0 + 100.0;
r += simplex.eval_2d(i as f64 * 0.05, 10.) as f32 * 10.0;
r += simplex.eval_2d(i as f64 * 0.2, 10.) as f32 * 4.0;
let a = std::f32::consts::TAU * i as f32 / perimeter as f32;
[r * a.cos(), r * a.sin(), 0.]
})
.chain([[0., 0., 0.]].into_iter())
.collect::<Vec<_>>(),
);
let mut triangles = Vec::new();
for i in 0..perimeter {
triangles.extend_from_slice(&[i, perimeter, (i + 1) % perimeter]);
}
mesh.set_indices(Some(bevy::render::mesh::Indices::U32(triangles)));
mesh
}