grid size scale with zoom
This commit is contained in:
parent
f43cf6728b
commit
ad05e6d1f2
2 changed files with 55 additions and 2 deletions
|
@ -8,6 +8,55 @@ let grid_color: vec4<f32> = vec4<f32>(1.0, 1.0, 1.0, 0.3);
|
||||||
let x_color: vec4<f32> = vec4<f32>(1.0, 0.0, 0.0, 1.0);
|
let x_color: vec4<f32> = vec4<f32>(1.0, 0.0, 0.0, 1.0);
|
||||||
let y_color :vec4<f32> = vec4<f32>(0.0, 1.0, 0.0, 1.0);
|
let y_color :vec4<f32> = vec4<f32>(0.0, 1.0, 0.0, 1.0);
|
||||||
|
|
||||||
|
|
||||||
|
#import bevy_sprite::mesh2d_view_bindings
|
||||||
|
#import bevy_sprite::mesh2d_bindings
|
||||||
|
|
||||||
|
// NOTE: Bindings must come before functions that use them!
|
||||||
|
#import bevy_sprite::mesh2d_functions
|
||||||
|
|
||||||
|
struct Vertex {
|
||||||
|
@location(0) position: vec3<f32>,
|
||||||
|
@location(1) normal: vec3<f32>,
|
||||||
|
@location(2) uv: vec2<f32>,
|
||||||
|
#ifdef VERTEX_TANGENTS
|
||||||
|
@location(3) tangent: vec4<f32>,
|
||||||
|
#endif
|
||||||
|
#ifdef VERTEX_COLORS
|
||||||
|
@location(4) color: vec4<f32>,
|
||||||
|
#endif
|
||||||
|
@builtin(vertex_index) index: u32,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VertexOutput {
|
||||||
|
@builtin(position) clip_position: vec4<f32>,
|
||||||
|
#import bevy_sprite::mesh2d_vertex_output
|
||||||
|
}
|
||||||
|
|
||||||
|
@vertex
|
||||||
|
fn vertex(vertex: Vertex) -> VertexOutput {
|
||||||
|
var out: VertexOutput;
|
||||||
|
out.uv = vertex.uv;
|
||||||
|
out.world_position = mesh2d_position_local_to_world(mesh.model, vec4<f32>(vertex.position, 1.0));
|
||||||
|
out.clip_position = mesh2d_position_world_to_clip(out.world_position);
|
||||||
|
var grid_plane = array<vec3<f32>, 4>(
|
||||||
|
vec3<f32>(-1., -1., 1.),
|
||||||
|
vec3<f32>(-1., 1., 1.),
|
||||||
|
vec3<f32>(1., -1., 1.),
|
||||||
|
vec3<f32>(1., 1., 1.)
|
||||||
|
);
|
||||||
|
out.clip_position = vec4<f32>(grid_plane[vertex.index].xyz, 1.0);
|
||||||
|
|
||||||
|
out.world_normal = mesh2d_normal_local_to_world(vertex.normal);
|
||||||
|
#ifdef VERTEX_TANGENTS
|
||||||
|
out.world_tangent = mesh2d_tangent_local_to_world(vertex.tangent);
|
||||||
|
#endif
|
||||||
|
#ifdef VERTEX_COLORS
|
||||||
|
out.color = vertex.color;
|
||||||
|
#endif
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
@fragment
|
@fragment
|
||||||
fn fragment(
|
fn fragment(
|
||||||
@builtin(position) position: vec4<f32>,
|
@builtin(position) position: vec4<f32>,
|
||||||
|
|
|
@ -29,8 +29,8 @@ pub fn spawn_grid(
|
||||||
) {
|
) {
|
||||||
|
|
||||||
coms.spawn().insert_bundle(MaterialMesh2dBundle {
|
coms.spawn().insert_bundle(MaterialMesh2dBundle {
|
||||||
mesh: meshes.add(Mesh::from(shape::Cube { size: 1000.0 })).into(),
|
mesh: meshes.add(Mesh::from(shape::Plane { size: 1000.0 })).into(),
|
||||||
transform: Transform::from_xyz(0.0, 0.0, 0.0),
|
transform: Transform::from_rotation(Quat::from_rotation_x(std::f32::consts::FRAC_PI_2)),
|
||||||
material: mats.add(GridMaterial { width: 2.0, size: Vec2::splat(15.0), visible: 1 }),
|
material: mats.add(GridMaterial { width: 2.0, size: Vec2::splat(15.0), visible: 1 }),
|
||||||
..default()
|
..default()
|
||||||
});
|
});
|
||||||
|
@ -40,11 +40,15 @@ pub fn update_grid_shader(
|
||||||
snap_grid: Res<crate::SnapGrid>,
|
snap_grid: Res<crate::SnapGrid>,
|
||||||
handles: Query<&Handle<GridMaterial>>,
|
handles: Query<&Handle<GridMaterial>>,
|
||||||
mut mats: ResMut<Assets<GridMaterial>>,
|
mut mats: ResMut<Assets<GridMaterial>>,
|
||||||
|
projection: Query<&OrthographicProjection, With<MainCamera>>,
|
||||||
) {
|
) {
|
||||||
|
let zoom = projection.get_single().map(|p| p.scale).unwrap_or(1.0);
|
||||||
|
|
||||||
for h in handles.iter() {
|
for h in handles.iter() {
|
||||||
if let Some(mut m) = mats.get_mut(h) {
|
if let Some(mut m) = mats.get_mut(h) {
|
||||||
m.size = Vec2::new(snap_grid.width, snap_grid.height);
|
m.size = Vec2::new(snap_grid.width, snap_grid.height);
|
||||||
m.visible = snap_grid.visible as u32;
|
m.visible = snap_grid.visible as u32;
|
||||||
|
m.width = zoom;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue