add a little animation

This commit is contained in:
numzero 2026-10-19 02:51:08 +03:00
parent c600fa082c
commit 82638f7ad3
2 changed files with 17 additions and 3 deletions

View File

@ -1,6 +1,9 @@
use std::{error::Error, f32::consts::FRAC_PI_2}; use std::{
error::Error,
f32::consts::{FRAC_PI_2, PI},
};
use glam::{Affine3A, Mat4, Quat, UVec2, Vec3, Vec4, vec3, vec4}; use glam::{Affine3A, FloatExt, Mat4, Quat, UVec2, Vec3, Vec4, vec3, vec4};
use crate::render::mesh::GpuParams; use crate::render::mesh::GpuParams;
@ -71,6 +74,7 @@ pub struct Core {
bevel_gear_desc: bevel_gear::BevelGearDesc, bevel_gear_desc: bevel_gear::BevelGearDesc,
bevel_gear_shape: bevel_gear::BevelGearShape, bevel_gear_shape: bevel_gear::BevelGearShape,
crown_gear_desc: crown_gear::CrownGearDesc, crown_gear_desc: crown_gear::CrownGearDesc,
t: f32,
} }
fn srgb_to_linear(color: Vec3) -> Vec3 { fn srgb_to_linear(color: Vec3) -> Vec3 {
@ -162,6 +166,7 @@ impl Core {
bevel_gear_desc, bevel_gear_desc,
bevel_gear_shape, bevel_gear_shape,
crown_gear_desc, crown_gear_desc,
t: 0.,
} }
} }
@ -195,6 +200,12 @@ impl Core {
); );
}; };
let turn_teeth = self.t;
let bevel_turns = turn_teeth / self.bevel_gear_desc.teeth as f32;
let crown_skip_teeth = self.crown_gear_desc.pitch_radius.floor();
let crown_turns =
(turn_teeth.fract_gl() + crown_skip_teeth) / (2. * self.crown_gear_desc.pitch_radius);
set_params( set_params(
&self.params_gear, &self.params_gear,
vec4(0.2, 0.8, 0.1, 1.0), vec4(0.2, 0.8, 0.1, 1.0),
@ -204,7 +215,8 @@ impl Core {
&self.params_cutter, &self.params_cutter,
vec4(0.8, 0.2, 0.1, 1.0), vec4(0.8, 0.2, 0.1, 1.0),
Affine3A::from_rotation_translation( Affine3A::from_rotation_translation(
Quat::from_rotation_y(FRAC_PI_2 + self.bevel_gear_desc.cone_halfangle), Quat::from_rotation_y(FRAC_PI_2 + self.bevel_gear_desc.cone_halfangle)
* Quat::from_rotation_z(2. * PI * crown_turns),
vec3(0., 0., self.bevel_gear_desc.pitch_distance()), vec3(0., 0., self.bevel_gear_desc.pitch_distance()),
), ),
); );
@ -290,6 +302,7 @@ impl Core {
let output = self.surface.get_current_texture().unwrap(); let output = self.surface.get_current_texture().unwrap();
self.render(&output.texture, args); self.render(&output.texture, args);
output.present(); output.present();
self.t += 1. / 60.;
} }
} }

View File

@ -44,6 +44,7 @@ void Viewport::paintEvent(QPaintEvent* event) {
if (!core) if (!core)
recreate(); recreate();
core->redraw(args); core->redraw(args);
update();
} }
void Viewport::resizeEvent(QResizeEvent* event) { void Viewport::resizeEvent(QResizeEvent* event) {