position the bevel cutter to cut
This commit is contained in:
parent
972aee716a
commit
c600fa082c
82
src/lib.rs
82
src/lib.rs
|
|
@ -1,6 +1,6 @@
|
|||
use std::error::Error;
|
||||
use std::{error::Error, f32::consts::FRAC_PI_2};
|
||||
|
||||
use glam::{Mat4, UVec2, Vec3, Vec4, vec3, vec4};
|
||||
use glam::{Affine3A, Mat4, Quat, UVec2, Vec3, Vec4, vec3, vec4};
|
||||
|
||||
use crate::render::mesh::GpuParams;
|
||||
|
||||
|
|
@ -67,6 +67,10 @@ pub struct Core {
|
|||
|
||||
params_gear: render::mesh::GpuParams,
|
||||
params_cutter: render::mesh::GpuParams,
|
||||
|
||||
bevel_gear_desc: bevel_gear::BevelGearDesc,
|
||||
bevel_gear_shape: bevel_gear::BevelGearShape,
|
||||
crown_gear_desc: crown_gear::CrownGearDesc,
|
||||
}
|
||||
|
||||
fn srgb_to_linear(color: Vec3) -> Vec3 {
|
||||
|
|
@ -105,34 +109,33 @@ impl Core {
|
|||
let depth = Self::create_depth_buffer(&device, pixel_size);
|
||||
let mesh_pipeline = render::mesh::Pipeline::new(&device);
|
||||
|
||||
let crown_gear_mesh = crown_gear::make_mesh_simple(
|
||||
&crown_gear::CrownGearDesc {
|
||||
profile: Default::default(),
|
||||
pitch_radius: 24.0,
|
||||
},
|
||||
&crown_gear::CrownGearVisual {
|
||||
inner_radius: 16.0,
|
||||
outer_radius: 30.0,
|
||||
base_thickness: 2.0,
|
||||
},
|
||||
600,
|
||||
)
|
||||
.to_mesh()
|
||||
.to_standard_mesh()
|
||||
.into_indexed();
|
||||
|
||||
let bevel_gear_desc = bevel_gear::BevelGearDesc {
|
||||
profile: Default::default(),
|
||||
teeth: args.tooth,
|
||||
cone_halfangle: args.cone_halfangle,
|
||||
};
|
||||
let bevel_gear_shape = bevel_gear::BevelGearShape::new_blank(&bevel_gear_desc, 60);
|
||||
let bevel_gear_mesh = bevel_gear::make_mesh(
|
||||
&bevel_gear_desc,
|
||||
&bevel_gear::BevelGearVisual {
|
||||
pad_in: 4.,
|
||||
pad_out: 0.,
|
||||
},
|
||||
&bevel_gear::BevelGearShape::new_blank(&bevel_gear_desc, 60),
|
||||
&bevel_gear_shape,
|
||||
)
|
||||
.to_mesh()
|
||||
.to_standard_mesh()
|
||||
.into_indexed();
|
||||
|
||||
let crown_gear_desc = bevel_gear_desc.cutter();
|
||||
let crown_gear_mesh = crown_gear::make_mesh_simple(
|
||||
&crown_gear_desc,
|
||||
&crown_gear::CrownGearVisual {
|
||||
inner_radius: crown_gear_desc.pitch_radius / 2.,
|
||||
outer_radius: crown_gear_desc.pitch_radius,
|
||||
base_thickness: 2.0,
|
||||
},
|
||||
600,
|
||||
)
|
||||
.to_mesh()
|
||||
.to_standard_mesh()
|
||||
|
|
@ -156,6 +159,9 @@ impl Core {
|
|||
mesh_cutter,
|
||||
params_gear,
|
||||
params_cutter,
|
||||
bevel_gear_desc,
|
||||
bevel_gear_shape,
|
||||
crown_gear_desc,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -177,24 +183,30 @@ impl Core {
|
|||
.to_mat4();
|
||||
let view = Mat4::from_mat3(camera::rotation(-args.cam_yaw, -args.cam_pitch));
|
||||
let light = vec3(0.7, 0.5, 1.0).normalize();
|
||||
let set_params = |target: &GpuParams, color, tfm| {
|
||||
target.set(
|
||||
&self.queue,
|
||||
render::mesh::Params {
|
||||
mvp: proj * view * tfm,
|
||||
light,
|
||||
_zero: 0.,
|
||||
color: srgba_to_linear(color),
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
self.params_gear.set(
|
||||
&self.queue,
|
||||
render::mesh::Params {
|
||||
mvp: proj * view,
|
||||
light,
|
||||
_zero: 0.,
|
||||
color: srgba_to_linear(vec4(0.2, 0.8, 0.1, 1.0)),
|
||||
},
|
||||
set_params(
|
||||
&self.params_gear,
|
||||
vec4(0.2, 0.8, 0.1, 1.0),
|
||||
Affine3A::IDENTITY,
|
||||
);
|
||||
self.params_cutter.set(
|
||||
&self.queue,
|
||||
render::mesh::Params {
|
||||
mvp: proj * view,
|
||||
light,
|
||||
_zero: 0.,
|
||||
color: srgba_to_linear(vec4(0.8, 0.2, 0.1, 1.0)),
|
||||
},
|
||||
set_params(
|
||||
&self.params_cutter,
|
||||
vec4(0.8, 0.2, 0.1, 1.0),
|
||||
Affine3A::from_rotation_translation(
|
||||
Quat::from_rotation_y(FRAC_PI_2 + self.bevel_gear_desc.cone_halfangle),
|
||||
vec3(0., 0., self.bevel_gear_desc.pitch_distance()),
|
||||
),
|
||||
);
|
||||
|
||||
let view = output.create_view(&wgpu::TextureViewDescriptor::default());
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user