remove per-vertex color
This commit is contained in:
parent
bde8936ad0
commit
ec22c4a6e4
|
|
@ -24,7 +24,6 @@ pub fn make_mesh_smooth(
|
||||||
desc: &CrownGearDesc,
|
desc: &CrownGearDesc,
|
||||||
visual: &CrownGearVisual,
|
visual: &CrownGearVisual,
|
||||||
sides: usize,
|
sides: usize,
|
||||||
color: Vec3,
|
|
||||||
) -> MeshIndexed {
|
) -> MeshIndexed {
|
||||||
let teeth = 2.0 * desc.pitch_radius;
|
let teeth = 2.0 * desc.pitch_radius;
|
||||||
let inner_scale = visual.inner_radius / desc.pitch_radius;
|
let inner_scale = visual.inner_radius / desc.pitch_radius;
|
||||||
|
|
@ -50,7 +49,6 @@ pub fn make_mesh_smooth(
|
||||||
|
|
||||||
let vertex = |x, z, n| Vertex {
|
let vertex = |x, z, n| Vertex {
|
||||||
position: rot * vec3(x, 0.0, z),
|
position: rot * vec3(x, 0.0, z),
|
||||||
color,
|
|
||||||
normal: n,
|
normal: n,
|
||||||
};
|
};
|
||||||
mesh.vertices.extend([
|
mesh.vertices.extend([
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ impl Core {
|
||||||
600,
|
600,
|
||||||
)
|
)
|
||||||
.to_mesh()
|
.to_mesh()
|
||||||
.to_standard_mesh(vec3(0.5, 0.5, 0.5))
|
.to_standard_mesh()
|
||||||
.into_indexed();
|
.into_indexed();
|
||||||
|
|
||||||
let bevel_gear_desc = bevel_gear::BevelGearDesc {
|
let bevel_gear_desc = bevel_gear::BevelGearDesc {
|
||||||
|
|
@ -128,7 +128,7 @@ impl Core {
|
||||||
&bevel_gear::BevelGearShape::new_blank(&bevel_gear_desc, 60),
|
&bevel_gear::BevelGearShape::new_blank(&bevel_gear_desc, 60),
|
||||||
)
|
)
|
||||||
.to_mesh()
|
.to_mesh()
|
||||||
.to_standard_mesh(vec3(0.5, 0.5, 0.5))
|
.to_standard_mesh()
|
||||||
.into_indexed();
|
.into_indexed();
|
||||||
|
|
||||||
let mesh_gray = render::mesh::GpuMeshIndexed::new(&device, &bevel_gear_mesh);
|
let mesh_gray = render::mesh::GpuMeshIndexed::new(&device, &bevel_gear_mesh);
|
||||||
|
|
@ -168,6 +168,7 @@ impl Core {
|
||||||
mvp: proj * view,
|
mvp: proj * view,
|
||||||
light: vec3(0.7, 0.5, 1.0).normalize(),
|
light: vec3(0.7, 0.5, 1.0).normalize(),
|
||||||
_zero: 0.,
|
_zero: 0.,
|
||||||
|
color: vec4(0.5, 0.5, 0.5, 1.0),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
self.queue.submit([]); // flush buffer updates
|
self.queue.submit([]); // flush buffer updates
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
use std::mem::offset_of;
|
use std::mem::offset_of;
|
||||||
|
|
||||||
use bytemuck::{Pod, Zeroable, bytes_of, cast_slice};
|
use bytemuck::{Pod, Zeroable, bytes_of, cast_slice};
|
||||||
use glam::{Mat4, Vec3};
|
use glam::{Mat4, Vec3, Vec4};
|
||||||
use wgpu::util::DeviceExt;
|
use wgpu::util::DeviceExt;
|
||||||
|
|
||||||
pub use cpu::*;
|
pub use cpu::*;
|
||||||
|
|
@ -14,7 +14,6 @@ static SHADER: &str = include_str!("mesh.wgsl");
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
pub struct Vertex {
|
pub struct Vertex {
|
||||||
pub position: Vec3,
|
pub position: Vec3,
|
||||||
pub color: Vec3,
|
|
||||||
pub normal: Vec3,
|
pub normal: Vec3,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -24,6 +23,7 @@ pub struct Params {
|
||||||
pub mvp: Mat4,
|
pub mvp: Mat4,
|
||||||
pub light: Vec3,
|
pub light: Vec3,
|
||||||
pub _zero: f32,
|
pub _zero: f32,
|
||||||
|
pub color: Vec4,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct GpuMesh {
|
pub struct GpuMesh {
|
||||||
|
|
@ -121,11 +121,6 @@ impl Pipeline {
|
||||||
},
|
},
|
||||||
wgpu::VertexAttribute {
|
wgpu::VertexAttribute {
|
||||||
shader_location: 1,
|
shader_location: 1,
|
||||||
offset: offset_of!(Vertex, color) as u64,
|
|
||||||
format: wgpu::VertexFormat::Float32x3,
|
|
||||||
},
|
|
||||||
wgpu::VertexAttribute {
|
|
||||||
shader_location: 2,
|
|
||||||
offset: offset_of!(Vertex, normal) as u64,
|
offset: offset_of!(Vertex, normal) as u64,
|
||||||
format: wgpu::VertexFormat::Float32x3,
|
format: wgpu::VertexFormat::Float32x3,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -2,18 +2,17 @@ struct Params {
|
||||||
mvp: mat4x4f,
|
mvp: mat4x4f,
|
||||||
light: vec3f,
|
light: vec3f,
|
||||||
_zero: f32,
|
_zero: f32,
|
||||||
|
color: vec4f,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Vertex {
|
struct Vertex {
|
||||||
@location(0) position: vec3f,
|
@location(0) position: vec3f,
|
||||||
@location(1) color: vec3f,
|
@location(1) normal: vec3f,
|
||||||
@location(2) normal: vec3f,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Varying {
|
struct Varying {
|
||||||
@builtin(position) screen: vec4f,
|
@builtin(position) screen: vec4f,
|
||||||
@location(0) color: vec4f,
|
@location(0) normal: vec3f,
|
||||||
@location(1) normal: vec3f,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@group(0) @binding(0) var<uniform> params: Params;
|
@group(0) @binding(0) var<uniform> params: Params;
|
||||||
|
|
@ -21,9 +20,8 @@ struct Varying {
|
||||||
@vertex
|
@vertex
|
||||||
fn on_vertex(in: Vertex) -> Varying {
|
fn on_vertex(in: Vertex) -> Varying {
|
||||||
let position = params.mvp * vec4f(in.position, 1.0);
|
let position = params.mvp * vec4f(in.position, 1.0);
|
||||||
let color = vec4f(in.color, 1.0);
|
|
||||||
let normal = in.normal;
|
let normal = in.normal;
|
||||||
return Varying(position, color, normal);
|
return Varying(position, normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
@fragment
|
@fragment
|
||||||
|
|
@ -31,6 +29,6 @@ fn on_fragment(in: Varying) -> @location(0) vec4f {
|
||||||
let normal = normalize(in.normal);
|
let normal = normalize(in.normal);
|
||||||
let light = dot(params.light, normal);
|
let light = dot(params.light, normal);
|
||||||
let u = 0.5 + 0.5 * light;
|
let u = 0.5 + 0.5 * light;
|
||||||
let color = vec4f(u * in.color.xyz, in.color.w);
|
let color = vec4f(u * params.color.xyz, params.color.w);
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ impl<T: Copy> Mesh<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Mesh<Vec3> {
|
impl Mesh<Vec3> {
|
||||||
pub fn to_standard_mesh(&self, color: Vec3) -> CpuMesh {
|
pub fn to_standard_mesh(&self) -> CpuMesh {
|
||||||
CpuMesh {
|
CpuMesh {
|
||||||
faces: self
|
faces: self
|
||||||
.faces
|
.faces
|
||||||
|
|
@ -54,11 +54,7 @@ impl Mesh<Vec3> {
|
||||||
.map(|face| {
|
.map(|face| {
|
||||||
let [a, b, c] = face;
|
let [a, b, c] = face;
|
||||||
let normal = (b - a).cross(c - a).normalize();
|
let normal = (b - a).cross(c - a).normalize();
|
||||||
face.map(|position| Vertex {
|
face.map(|position| Vertex { position, normal })
|
||||||
position,
|
|
||||||
color,
|
|
||||||
normal,
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user