position the bevel cutter to cut
This commit is contained in:
parent
972aee716a
commit
c600fa082c
74
src/lib.rs
74
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;
|
use crate::render::mesh::GpuParams;
|
||||||
|
|
||||||
|
|
@ -67,6 +67,10 @@ pub struct Core {
|
||||||
|
|
||||||
params_gear: render::mesh::GpuParams,
|
params_gear: render::mesh::GpuParams,
|
||||||
params_cutter: 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 {
|
fn srgb_to_linear(color: Vec3) -> Vec3 {
|
||||||
|
|
@ -105,34 +109,33 @@ impl Core {
|
||||||
let depth = Self::create_depth_buffer(&device, pixel_size);
|
let depth = Self::create_depth_buffer(&device, pixel_size);
|
||||||
let mesh_pipeline = render::mesh::Pipeline::new(&device);
|
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 {
|
let bevel_gear_desc = bevel_gear::BevelGearDesc {
|
||||||
profile: Default::default(),
|
profile: Default::default(),
|
||||||
teeth: args.tooth,
|
teeth: args.tooth,
|
||||||
cone_halfangle: args.cone_halfangle,
|
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(
|
let bevel_gear_mesh = bevel_gear::make_mesh(
|
||||||
&bevel_gear_desc,
|
&bevel_gear_desc,
|
||||||
&bevel_gear::BevelGearVisual {
|
&bevel_gear::BevelGearVisual {
|
||||||
pad_in: 4.,
|
pad_in: 4.,
|
||||||
pad_out: 0.,
|
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_mesh()
|
||||||
.to_standard_mesh()
|
.to_standard_mesh()
|
||||||
|
|
@ -156,6 +159,9 @@ impl Core {
|
||||||
mesh_cutter,
|
mesh_cutter,
|
||||||
params_gear,
|
params_gear,
|
||||||
params_cutter,
|
params_cutter,
|
||||||
|
bevel_gear_desc,
|
||||||
|
bevel_gear_shape,
|
||||||
|
crown_gear_desc,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -177,24 +183,30 @@ impl Core {
|
||||||
.to_mat4();
|
.to_mat4();
|
||||||
let view = Mat4::from_mat3(camera::rotation(-args.cam_yaw, -args.cam_pitch));
|
let view = Mat4::from_mat3(camera::rotation(-args.cam_yaw, -args.cam_pitch));
|
||||||
let light = vec3(0.7, 0.5, 1.0).normalize();
|
let light = vec3(0.7, 0.5, 1.0).normalize();
|
||||||
|
let set_params = |target: &GpuParams, color, tfm| {
|
||||||
self.params_gear.set(
|
target.set(
|
||||||
&self.queue,
|
&self.queue,
|
||||||
render::mesh::Params {
|
render::mesh::Params {
|
||||||
mvp: proj * view,
|
mvp: proj * view * tfm,
|
||||||
light,
|
light,
|
||||||
_zero: 0.,
|
_zero: 0.,
|
||||||
color: srgba_to_linear(vec4(0.2, 0.8, 0.1, 1.0)),
|
color: srgba_to_linear(color),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
self.params_cutter.set(
|
};
|
||||||
&self.queue,
|
|
||||||
render::mesh::Params {
|
set_params(
|
||||||
mvp: proj * view,
|
&self.params_gear,
|
||||||
light,
|
vec4(0.2, 0.8, 0.1, 1.0),
|
||||||
_zero: 0.,
|
Affine3A::IDENTITY,
|
||||||
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());
|
let view = output.create_view(&wgpu::TextureViewDescriptor::default());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user