still not showing the color/textures
This commit is contained in:
parent
63ed962155
commit
66724e8946
7 changed files with 77 additions and 196 deletions
43
Cargo.lock
generated
43
Cargo.lock
generated
|
@ -834,8 +834,10 @@ dependencies = [
|
|||
"hexasphere 10.0.0",
|
||||
"image 0.24.9",
|
||||
"js-sys",
|
||||
"ktx2",
|
||||
"naga",
|
||||
"naga_oil",
|
||||
"ruzstd",
|
||||
"serde",
|
||||
"thiserror",
|
||||
"thread_local",
|
||||
|
@ -1537,6 +1539,17 @@ version = "2.6.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2"
|
||||
|
||||
[[package]]
|
||||
name = "derive_more"
|
||||
version = "0.99.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dispatch"
|
||||
version = "0.2.0"
|
||||
|
@ -2404,6 +2417,15 @@ version = "3.1.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
|
||||
|
||||
[[package]]
|
||||
name = "ktx2"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87d65e08a9ec02e409d27a0139eaa6b9756b4d81fe7cde71f6941a83730ce838"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.4.0"
|
||||
|
@ -3393,6 +3415,17 @@ dependencies = [
|
|||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ruzstd"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"derive_more",
|
||||
"twox-hash",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.18"
|
||||
|
@ -3857,6 +3890,16 @@ version = "0.21.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8"
|
||||
|
||||
[[package]]
|
||||
name = "twox-hash"
|
||||
version = "1.6.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"static_assertions",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typeid"
|
||||
version = "1.0.0"
|
||||
|
|
|
@ -27,6 +27,7 @@ features = [
|
|||
"bevy_text",
|
||||
"bevy_gltf",
|
||||
"bevy_sprite",
|
||||
"tonemapping_luts"
|
||||
]
|
||||
|
||||
[dependencies.bevy_rapier3d]
|
||||
|
|
|
@ -61,7 +61,7 @@ pub(super) fn gravity(
|
|||
}
|
||||
}
|
||||
|
||||
rapier_config.gravity = xform.translation.normalize() * -settings.gravity;
|
||||
rapier_config.gravity = Vec3::Y * -settings.gravity;
|
||||
forces.force = Vec3::ZERO;
|
||||
forces.torque = Vec3::ZERO;
|
||||
}
|
||||
|
|
|
@ -16,13 +16,12 @@ pub(super) fn spawn_cyberbike(
|
|||
wheel_conf: Res<WheelConfig>,
|
||||
mut meshterials: Meshterial,
|
||||
) {
|
||||
let altitude = PLANET_RADIUS - 10.0;
|
||||
let altitude = 53.0;
|
||||
|
||||
let mut xform = Transform::from_translation(Vec3::X * altitude)
|
||||
.with_rotation(Quat::from_axis_angle(Vec3::Z, -89.0f32.to_radians()));
|
||||
let mut xform = Transform::from_translation(Vec3::Y * altitude);
|
||||
|
||||
let right = xform.right() * 350.0;
|
||||
xform.translation += right;
|
||||
// let right = xform.right() * 350.0;
|
||||
// xform.translation += right;
|
||||
|
||||
let damping = Damping {
|
||||
angular_damping: 2.0,
|
||||
|
|
|
@ -131,47 +131,9 @@ pub fn spawn_wheels(
|
|||
// do mesh shit
|
||||
fn gen_tires(conf: &WheelConfig) -> (Mesh, Collider) {
|
||||
let wheel_rad = conf.radius;
|
||||
let tire_thickness = conf.thickness;
|
||||
let tire = Tire {
|
||||
radius: wheel_rad,
|
||||
ring_radius: tire_thickness,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
let tire = Sphere::new(wheel_rad);
|
||||
let mut mesh = Mesh::from(tire);
|
||||
let tire_verts = mesh
|
||||
.attribute(Mesh::ATTRIBUTE_POSITION)
|
||||
.unwrap()
|
||||
.as_float3()
|
||||
.unwrap()
|
||||
.iter()
|
||||
.map(|v| {
|
||||
//
|
||||
let v = Vec3::from_array(*v);
|
||||
let m = Mat3::from_rotation_z(90.0f32.to_radians());
|
||||
let p = m.mul_vec3(v);
|
||||
p.to_array()
|
||||
})
|
||||
.collect::<Vec<[f32; 3]>>();
|
||||
mesh.remove_attribute(Mesh::ATTRIBUTE_POSITION);
|
||||
mesh.insert_attribute(Mesh::ATTRIBUTE_POSITION, tire_verts);
|
||||
|
||||
let mut idxs = Vec::new();
|
||||
let indices = mesh.indices().unwrap().iter().collect::<Vec<_>>();
|
||||
for idx in indices.as_slice().chunks_exact(3) {
|
||||
idxs.push([idx[0] as u32, idx[1] as u32, idx[2] as u32]);
|
||||
}
|
||||
let wheel_collider = Collider::convex_decomposition(
|
||||
&mesh
|
||||
.attribute(Mesh::ATTRIBUTE_POSITION)
|
||||
.unwrap()
|
||||
.as_float3()
|
||||
.unwrap()
|
||||
.iter()
|
||||
.map(|v| Vec3::from_array(*v))
|
||||
.collect::<Vec<_>>(),
|
||||
&idxs,
|
||||
);
|
||||
let wheel_collider = Collider::ball(wheel_rad);
|
||||
|
||||
(mesh, wheel_collider)
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ use bevy::{pbr::CascadeShadowConfigBuilder, prelude::*};
|
|||
|
||||
use crate::planet::PLANET_RADIUS;
|
||||
|
||||
pub const LIGHT_RANGE: f32 = 90.0;
|
||||
pub const LIGHT_RANGE: f32 = 900.0;
|
||||
|
||||
fn spawn_static_lights(
|
||||
mut commands: Commands,
|
||||
|
@ -10,82 +10,31 @@ fn spawn_static_lights(
|
|||
mut materials: ResMut<Assets<StandardMaterial>>,
|
||||
) {
|
||||
let pink_light = PointLight {
|
||||
intensity: 1_00.0,
|
||||
//intensity: 1_00.0,
|
||||
range: LIGHT_RANGE,
|
||||
color: Color::PINK,
|
||||
radius: 1.0,
|
||||
shadows_enabled: true,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
let blue_light = PointLight {
|
||||
intensity: 1_000.0,
|
||||
range: LIGHT_RANGE,
|
||||
color: Color::BLUE,
|
||||
radius: 1.0,
|
||||
color: Color::WHITE,
|
||||
radius: 10.0,
|
||||
shadows_enabled: true,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
commands.insert_resource(AmbientLight {
|
||||
color: Color::WHITE,
|
||||
brightness: 0.2,
|
||||
brightness: 1.0,
|
||||
});
|
||||
|
||||
let _cascade_shadow_config = CascadeShadowConfigBuilder {
|
||||
first_cascade_far_bound: 0.3,
|
||||
maximum_distance: 3.0,
|
||||
..default()
|
||||
}
|
||||
.build();
|
||||
// let _cascade_shadow_config = CascadeShadowConfigBuilder {
|
||||
// first_cascade_far_bound: 0.3,
|
||||
// maximum_distance: 3.0,
|
||||
// ..default()
|
||||
// }
|
||||
// .build();
|
||||
|
||||
// up light
|
||||
commands
|
||||
.spawn(PointLightBundle {
|
||||
transform: Transform::from_xyz(0.0, PLANET_RADIUS + 30.0, 0.0),
|
||||
commands.spawn(PointLightBundle {
|
||||
transform: Transform::from_xyz(0.0, 100.0, 0.0),
|
||||
point_light: pink_light,
|
||||
..Default::default()
|
||||
})
|
||||
.with_children(|builder| {
|
||||
builder.spawn(PbrBundle {
|
||||
mesh: meshes.add(
|
||||
Mesh::try_from(shape::Icosphere {
|
||||
radius: 10.0,
|
||||
subdivisions: 2,
|
||||
})
|
||||
.unwrap(),
|
||||
),
|
||||
material: materials.add(StandardMaterial {
|
||||
base_color: Color::BLUE,
|
||||
emissive: Color::PINK,
|
||||
..Default::default()
|
||||
}),
|
||||
..Default::default()
|
||||
});
|
||||
});
|
||||
// down light
|
||||
commands
|
||||
.spawn(PointLightBundle {
|
||||
transform: Transform::from_xyz(0.0, -PLANET_RADIUS - 30.0, 0.0),
|
||||
point_light: blue_light,
|
||||
..Default::default()
|
||||
})
|
||||
.with_children(|builder| {
|
||||
builder.spawn(PbrBundle {
|
||||
mesh: meshes.add(
|
||||
Mesh::try_from(shape::Icosphere {
|
||||
radius: 10.0,
|
||||
subdivisions: 2,
|
||||
})
|
||||
.unwrap(),
|
||||
),
|
||||
material: materials.add(StandardMaterial {
|
||||
base_color: Color::PINK,
|
||||
emissive: Color::BLUE,
|
||||
..Default::default()
|
||||
}),
|
||||
..Default::default()
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ use noise::{HybridMulti, NoiseFn, SuperSimplex};
|
|||
use rand::{Rng, SeedableRng};
|
||||
use wgpu::PrimitiveTopology;
|
||||
|
||||
pub const PLANET_RADIUS: f32 = 4_000.0;
|
||||
pub const PLANET_RADIUS: f32 = 2_000.0;
|
||||
pub const PLANET_HUE: f32 = 31.0;
|
||||
pub const PLANET_SATURATION: f32 = 1.0;
|
||||
|
||||
|
@ -21,12 +21,8 @@ fn spawn_planet(
|
|||
mut materials: ResMut<Assets<StandardMaterial>>,
|
||||
) {
|
||||
//let color = Color::rgb(0.74, 0.5334, 0.176);
|
||||
let isphere = Icosphere {
|
||||
radius: PLANET_RADIUS,
|
||||
subdivisions: 88,
|
||||
};
|
||||
|
||||
let (mesh, shape) = gen_planet(isphere);
|
||||
let (mesh, shape) = gen_planet(999.9);
|
||||
|
||||
let pbody = (RigidBody::Fixed, Ccd { enabled: true });
|
||||
|
||||
|
@ -42,7 +38,10 @@ fn spawn_planet(
|
|||
commands
|
||||
.spawn(PbrBundle {
|
||||
mesh: meshes.add(mesh),
|
||||
material: materials.add(Color::WHITE),
|
||||
material: materials.add(StandardMaterial {
|
||||
base_color: Color::GREEN,
|
||||
..Default::default()
|
||||
}),
|
||||
..Default::default()
|
||||
})
|
||||
.insert(pbody)
|
||||
|
@ -61,82 +60,10 @@ impl Plugin for CyberPlanetPlugin {
|
|||
// utils
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
fn gen_planet(sphere: Icosphere) -> (Mesh, Collider) {
|
||||
// straight-up stolen from Bevy's impl of Mesh from Icosphere, so I can do the
|
||||
// displacement before normals are calculated.
|
||||
let generated = IcoSphere::new(sphere.subdivisions, |point| {
|
||||
let inclination = point.y.acos();
|
||||
let azimuth = point.z.atan2(point.x);
|
||||
fn gen_planet(span: f32) -> (Mesh, Collider) {
|
||||
let mesh = Cuboid::new(span, 50.0, span);
|
||||
|
||||
let norm_inclination = inclination / std::f32::consts::PI;
|
||||
let norm_azimuth = 0.5 - (azimuth / std::f32::consts::TAU);
|
||||
let collider = Collider::cuboid(span, 50.0, span);
|
||||
|
||||
[norm_azimuth, norm_inclination]
|
||||
});
|
||||
|
||||
let noise = HybridMulti::<SuperSimplex>::default();
|
||||
|
||||
let (mut min, mut max) = (f32::MAX, f32::MIN);
|
||||
|
||||
let noisy_points = generated
|
||||
.raw_points()
|
||||
.iter()
|
||||
.map(|&p| {
|
||||
let disp = (noise.get(p.as_dvec3().into()) * 0.03f64) as f32;
|
||||
let pt = p + (p.normalize() * disp);
|
||||
pt.into()
|
||||
})
|
||||
.collect::<Vec<[f32; 3]>>();
|
||||
|
||||
let points = noisy_points
|
||||
.iter()
|
||||
.map(|&p| (Vec3::from_slice(&p) * sphere.radius).into())
|
||||
.collect::<Vec<[f32; 3]>>();
|
||||
|
||||
for p in &points {
|
||||
let v = Vec3::new(p[0], p[1], p[2]);
|
||||
let v = v.length();
|
||||
min = v.min(min);
|
||||
max = v.max(max);
|
||||
}
|
||||
|
||||
let indices = generated.get_all_indices();
|
||||
|
||||
let mut idxs = Vec::new();
|
||||
for idx in indices.chunks_exact(3) {
|
||||
idxs.push([idx[0], idx[1], idx[2]]);
|
||||
}
|
||||
|
||||
let indices = Indices::U32(indices);
|
||||
let collider = Collider::trimesh(points.iter().map(|p| Vect::from_slice(p)).collect(), idxs);
|
||||
|
||||
let mut mesh = Mesh::new(PrimitiveTopology::TriangleList, RenderAssetUsages::all());
|
||||
mesh.insert_indices(indices);
|
||||
mesh.insert_attribute(Mesh::ATTRIBUTE_POSITION, points);
|
||||
//mesh.insert_attribute(Mesh::ATTRIBUTE_UV_0, uvs);
|
||||
mesh.duplicate_vertices();
|
||||
mesh.compute_flat_normals();
|
||||
|
||||
let tri_list = mesh
|
||||
.attribute(Mesh::ATTRIBUTE_POSITION)
|
||||
.unwrap()
|
||||
.as_float3()
|
||||
.unwrap();
|
||||
|
||||
let mut rng = rand::rngs::StdRng::seed_from_u64(57);
|
||||
let mut colors = Vec::new();
|
||||
for _triangle in tri_list.chunks_exact(3) {
|
||||
let l = 0.41;
|
||||
let jitter = rng.gen_range(-0.0..=360.0f32);
|
||||
let h = jitter;
|
||||
let color = Color::hsl(h, PLANET_SATURATION, l).as_linear_rgba_f32();
|
||||
for _ in 0..3 {
|
||||
colors.push(color);
|
||||
}
|
||||
}
|
||||
|
||||
dbg!(&colors.len());
|
||||
mesh.insert_attribute(Mesh::ATTRIBUTE_COLOR, colors);
|
||||
|
||||
(mesh, collider)
|
||||
(mesh.mesh(), collider)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue