Animated driven by rust instead of shader!

FTW!!!
main
Elijah C. Voigt 2 years ago
parent 5804f78d25
commit a97204c6e4

@ -10,8 +10,7 @@
} }
struct MatExt { struct MatExt {
step: u32, cutoff: f32,
// Cutoff (for animation)
} }
@group(1) @binding(100) @group(1) @binding(100)
@ -68,9 +67,7 @@ fn fragment(
var n = fbm(pos); var n = fbm(pos);
// out.color *= n; var cutoff = mat_ext.cutoff; // abs(sin(globals.time));
var cutoff = abs(sin(globals.time));
if n > cutoff { if n > cutoff {
discard; discard;

@ -37,7 +37,7 @@ fn setup(
alpha_mode: AlphaMode::Mask(0.5), alpha_mode: AlphaMode::Mask(0.5),
..default() ..default()
}, },
extension: MatExt { step: 3 }, extension: MatExt { cutoff: 0.5 },
}), }),
..default() ..default()
}); });
@ -60,7 +60,7 @@ fn setup(
#[derive(Asset, AsBindGroup, Reflect, Debug, Clone)] #[derive(Asset, AsBindGroup, Reflect, Debug, Clone)]
struct MatExt { struct MatExt {
#[uniform(100)] #[uniform(100)]
step: u32, cutoff: f32,
} }
impl MaterialExtension for MatExt { impl MaterialExtension for MatExt {
@ -72,10 +72,14 @@ impl MaterialExtension for MatExt {
fn rotate( fn rotate(
mut query: Query<&mut Transform, With<Handle<Mesh>>>, mut query: Query<&mut Transform, With<Handle<Mesh>>>,
time: Res<Time>, time: Res<Time>,
mut materials: ResMut<Assets<MyMat>>,
) { ) {
query.iter_mut().for_each(|mut t| { query.iter_mut().for_each(|mut t| {
t.rotate_local_y(time.delta_seconds() / 2.0); t.rotate_local_y(time.delta_seconds() / 2.0);
t.rotate_local_z(time.delta_seconds() / 2.0); t.rotate_local_z(time.delta_seconds() / 2.0);
t.rotate_local_x(time.delta_seconds() / 2.0); t.rotate_local_x(time.delta_seconds() / 2.0);
});
materials.iter_mut().for_each(|(_id, m)| {
m.extension.cutoff = time.elapsed_seconds().sin().abs();
}) })
} }
Loading…
Cancel
Save