From a64ce13649a01b1b793f3de3b6ef50bf30ce1717 Mon Sep 17 00:00:00 2001 From: skal Date: Fri, 20 Feb 2026 15:11:20 +0100 Subject: feat(scene1): replace ad-hoc camera with CameraParams uniform MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Build camera via mat4::look_at + inverse in scene1_effect.cc, upload as CameraParams at binding 3. Shader uses getCameraRay() from camera_common. Enable camera_common snippet registration in shaders.cc. handoff(Claude): Scene1 camera now driven by CameraParams uniform; fov=TAU/6 (60° vFOV) matches original tan(PI/3) parameterization. Co-Authored-By: Claude Sonnet 4.6 --- workspaces/main/shaders/scene1.wgsl | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) (limited to 'workspaces/main') diff --git a/workspaces/main/shaders/scene1.wgsl b/workspaces/main/shaders/scene1.wgsl index 2f1174a..ff21318 100644 --- a/workspaces/main/shaders/scene1.wgsl +++ b/workspaces/main/shaders/scene1.wgsl @@ -2,12 +2,14 @@ // Source: Saturday cubism experiment by skal #include "sequence_uniforms" +#include "camera_common" #include "math/color" #include "math/utils" #include "math/sdf_shapes" #include "render/raymarching" @group(0) @binding(2) var uniforms: UniformsSequenceParams; +@group(0) @binding(3) var camera: CameraParams; const PI: f32 = 3.141592654; const TAU: f32 = 6.283185307; @@ -178,18 +180,8 @@ fn render1(ro: vec3, rd: vec3) -> vec3 { fn effect(p: vec2) -> vec3 { g_rot0 = rot(-0.2 * uniforms.time); - - let fov = tan(TAU / 6.0); - let ro = vec3(0.0, 2.5, 5.0); - let la = vec3(0.0, 0.0, 0.0); - let up = vec3(0.1, 1.0, 0.0); - - let ww = normalize(la - ro); - let uu = normalize(cross(up, ww)); - let vv = cross(ww, uu); - let rd = normalize(-p.x * uu + p.y * vv + fov * ww); - - return render1(ro, rd); + let ray = getCameraRay(camera, p); + return render1(ray.origin, ray.direction); } #include "render/fullscreen_vs" -- cgit v1.2.3