From 8eb9fa8885924fa10ce4c30c3c2811441f9c3e98 Mon Sep 17 00:00:00 2001 From: numzero Date: Wed, 5 Aug 2026 00:38:52 +0300 Subject: [PATCH] gray cube --- src/lib.rs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 3d75395..1dc927b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -39,23 +39,27 @@ pub struct Core { surface: wgpu::Surface<'static>, mesh_pipeline: render::mesh::Pipeline, - mesh1: render::mesh::GpuMeshIndexed, + mesh_color: render::mesh::GpuMeshIndexed, + mesh_gray: render::mesh::GpuMeshIndexed, depth: wgpu::Texture, } -fn cube() -> render::mesh::CpuMeshIndexed { +fn cube(a: f32, b: f32) -> render::mesh::CpuMeshIndexed { + let gray_level = (b + a) / 2.; + let gray = Vec3::splat(gray_level); + let color_level = (b - a) / 2.; let mut mesh = render::mesh::CpuMeshIndexed::default(); for (u, v, w) in [ (Vec3::X, Vec3::Y, Vec3::Z), (Vec3::Y, Vec3::Z, Vec3::X), (Vec3::Z, Vec3::X, Vec3::Y), ] { - for (m, color) in [(1., w), (-1., 1. - w)] { + for m in [1., -1.] { let base = mesh.vertices.len() as u16; for offset in [m * v + u, -m * v + u, -m * v - u, m * v - u] { let vertex = render::mesh::Vertex { position: (m * w + offset), - color, + color: gray + color_level * m * w, normal: m * w, }; mesh.vertices.push(vertex); @@ -77,8 +81,8 @@ impl Core { let depth = Self::create_depth_buffer(&device, pixel_size); let mesh_pipeline = render::mesh::Pipeline::new(&device); - let mesh1 = cube(); - let mesh1 = render::mesh::GpuMeshIndexed::new(&device, &mesh1); + let mesh_color = render::mesh::GpuMeshIndexed::new(&device, &cube(0.2, 0.8)); + let mesh_gray = render::mesh::GpuMeshIndexed::new(&device, &cube(0.7, 0.7)); Self::configure_surface(&surface, &device, pixel_size); @@ -87,7 +91,8 @@ impl Core { queue, surface, mesh_pipeline, - mesh1, + mesh_color, + mesh_gray, depth, } } @@ -109,7 +114,7 @@ impl Core { &self.queue, render::mesh::Params { mvp: proj * view, - light: vec3(1., 0.5, 0.5).normalize(), + light: vec3(0.7, 0.5, 1.0).normalize(), _zero: 0., }, ); @@ -147,7 +152,7 @@ impl Core { }), ..Default::default() }); - self.mesh1.render(&self.mesh_pipeline, &mut pass); + self.mesh_gray.render(&self.mesh_pipeline, &mut pass); drop(pass); self.queue.submit(std::iter::once(encoder.finish())); }