From 45e3513ed3fe52f878dba3c35aa5289df3713ac1 Mon Sep 17 00:00:00 2001 From: Mark Date: Sat, 13 Jan 2024 18:57:02 -0800 Subject: [PATCH] Minor shader fixes --- crates/render/shaders/object.wgsl | 12 ++++++++---- crates/render/shaders/particle.wgsl | 6 ++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/crates/render/shaders/object.wgsl b/crates/render/shaders/object.wgsl index 8d4f4eb..a694ebc 100644 --- a/crates/render/shaders/object.wgsl +++ b/crates/render/shaders/object.wgsl @@ -30,7 +30,10 @@ var sampler_array: binding_array; fn transform_vertex(obj: ObjectData, vertex_position: vec2, sprite_index: u32) -> vec4 { // Object scale - let scale = obj.size / (global_data.camera_zoom.x * obj.zpos); + var scale: f32 = obj.size / (global_data.camera_zoom.x * obj.zpos); + if obj.is_child == 1u { + scale /= objects[obj.parent].zpos; + } // Apply scale and sprite aspect // Note that our mesh starts centered at (0, 0). This is important! @@ -70,14 +73,15 @@ fn transform_vertex(obj: ObjectData, vertex_position: vec2, sprite_index: u } if obj.is_child == u32(1) { + + let parent = objects[obj.parent]; + // Apply translation relative to parent // Note that obj.zpos is ignored pos = pos + vec2( obj.xpos / (global_data.camera_zoom.x / 2.0) / global_data.window_aspect.x, obj.ypos / (global_data.camera_zoom.x / 2.0) - ); - - let parent = objects[obj.parent]; + ) / parent.zpos; // Apply parent's rotation pos = mat2x2( diff --git a/crates/render/shaders/particle.wgsl b/crates/render/shaders/particle.wgsl index 9164209..681f1c0 100644 --- a/crates/render/shaders/particle.wgsl +++ b/crates/render/shaders/particle.wgsl @@ -66,9 +66,11 @@ fn vertex_main( vertex.position.x * scale * global_sprites[instance.sprite_index].aspect, vertex.position.y * scale ); + + // Correct angle, since sprites point north and zero degrees is east pos = mat2x2( - vec2(cos(angle), sin(angle)), - vec2(-sin(angle), cos(angle)) + vec2(cos(angle - 1.5708), sin(angle - 1.5708)), + vec2(-sin(angle - 1.5708), cos(angle - 1.5708)) ) * pos; var trans: vec2 = (instance.position + (instance.velocity * age) - global_data.camera_position);