summaryrefslogtreecommitdiffstats
path: root/assets/shaders/tacmap/orbit.wgsl
diff options
context:
space:
mode:
Diffstat (limited to 'assets/shaders/tacmap/orbit.wgsl')
-rw-r--r--assets/shaders/tacmap/orbit.wgsl22
1 files changed, 15 insertions, 7 deletions
diff --git a/assets/shaders/tacmap/orbit.wgsl b/assets/shaders/tacmap/orbit.wgsl
index a890fd8..7276345 100644
--- a/assets/shaders/tacmap/orbit.wgsl
+++ b/assets/shaders/tacmap/orbit.wgsl
@@ -38,24 +38,32 @@ fn vs_main(
origins[model.origin][1],
origins[model.origin][2]);
- let model_pos = ((origin - camera.abs_pos - camera.rel_pos) + model.position) * camera.scale;
- let origin_pos = (origin - camera.abs_pos - camera.rel_pos) * camera.scale;
+ let offset_pos = model.position;
+ let origin_pos = origin - camera.abs_pos - camera.rel_pos;
- let view = camera.view;
+ let view_proj = camera.proj * camera.view;
+
+ let origin_view_pos = camera.view * vec4<f32>(origin_pos * camera.scale, 1.0);
+ let offset_view = camera.view * vec4<f32>(offset_pos * camera.scale, 0.0);
+ let point_view_pos = origin_view_pos + offset_view;
let orbit_normal = normalize(model.position);
var normal = orbit_normal;
- if length(model_pos - origin_pos) > 0.01 {
+ let offset_ndc = offset_view.xy / origin_view_pos.z;
+
+ let discard_radius = 0.05;
+
+ if length(offset_ndc) > discard_radius {
normal *= POINT_NORMALS[index];
}
- let view_proj = camera.proj * camera.view;
+ let point_vp_pos = camera.proj * point_view_pos;
//Scale the world around the camera scale and translate about the camera's
//absolute (/target) position
- let point_view_pos = view_proj * vec4<f32>(model_pos + normal * 0.005, 1.0);
- out.clip_position = point_view_pos;
+ let segment_vp_pos = point_vp_pos + (view_proj * vec4<f32>(normal * 0.005, 0.0));
+ out.clip_position = segment_vp_pos;
return out;
}