From: Joshua Simmons Date: Sun, 13 Nov 2022 22:29:24 +0000 (+0100) Subject: Fix matrix handling now cross-product works X-Git-Url: https://git.nega.tv//gitweb.cgi?a=commitdiff_plain;h=4c617db6f162bca2f0fcc7269fee6556d093e2c7;p=josh%2Fnarcissus Fix matrix handling now cross-product works --- diff --git a/narcissus/src/main.rs b/narcissus/src/main.rs index fa969ee..5452fbc 100644 --- a/narcissus/src/main.rs +++ b/narcissus/src/main.rs @@ -269,7 +269,7 @@ pub fn main() { topology: Topology::Triangles, polygon_mode: PolygonMode::Fill, culling_mode: CullingMode::Back, - front_face: FrontFace::Clockwise, + front_face: FrontFace::CounterClockwise, depth_bias: None, depth_compare_op: CompareOp::GreaterOrEqual, depth_test_enable: true, @@ -307,7 +307,7 @@ pub fn main() { let mut depth_height = 0; let mut depth_image = default(); - let shark_distance = 8.0; + let shark_distance = 4.0; let mut rng = Pcg64::new(); @@ -361,18 +361,18 @@ pub fn main() { for (i, transform) in shark_transforms.iter_mut().enumerate() { let direction = if i & 1 == 0 { 1.0 } else { -1.0 }; let (s, _) = sin_cos_pi_f32(frame_start + (i as f32) * 0.125); - transform.translate.y = 0.0 + s; + transform.translate.y = s; transform.matrix *= Mat3::from_axis_rotation(Vec3::Y, HalfTurn::new(0.005 * direction)) } transforms.write_slice(&shark_transforms); - let (s, c) = sin_cos_pi_f32(frame_start); - let camera_height = c * 5.0; - let camera_radius = 50.0; + let (s, c) = sin_cos_pi_f32(frame_start * 0.2); + let camera_height = c * 8.0; + let camera_radius = 20.0; let eye = Point3::new(s * camera_radius, camera_height, c * camera_radius); let center = Point3::ZERO; - let camera_from_model = Mat4::look_at(eye, center, -Vec3::Y); + let camera_from_model = Mat4::look_at(eye, center, Vec3::Y); let clip_from_camera = Mat4::perspective_rev_inf_zo(Deg::new(45.0).into(), width as f32 / height as f32, 0.01); let clip_from_model = clip_from_camera * camera_from_model; diff --git a/narcissus/src/shaders/basic.vert.glsl b/narcissus/src/shaders/basic.vert.glsl index a869c90..c065c3f 100644 --- a/narcissus/src/shaders/basic.vert.glsl +++ b/narcissus/src/shaders/basic.vert.glsl @@ -28,9 +28,14 @@ void main() { TransformData td = transforms[gl_InstanceIndex]; VertexData vd = vertices[gl_VertexIndex]; - vec4 posLocal = vec4(vd.position.xyz, 1.0); - vec3 posWorld = mat4x3(td.transform[0], td.transform[1], td.transform[2]) * posLocal; - vec4 posClip = vec4(posWorld, 1.0) * viewProj; + mat3 modelRot = mat3( + td.transform[0].x, td.transform[0].y, td.transform[0].z, + td.transform[0].w, td.transform[1].x, td.transform[1].y, + td.transform[1].z, td.transform[1].w, td.transform[2].x + ); + vec3 modelOff = vec3(td.transform[2].y, td.transform[2].z, td.transform[2].w); + vec3 posWorld = transpose(modelRot) * vd.position.xyz + modelOff; + vec4 posClip = transpose(viewProj) * vec4(posWorld, 1.0); gl_Position = posClip; fragColor = vd.normal.xyz * 0.5 + 0.5; diff --git a/narcissus/src/shaders/basic.vert.spv b/narcissus/src/shaders/basic.vert.spv index 9ab0390..fab7758 100644 Binary files a/narcissus/src/shaders/basic.vert.spv and b/narcissus/src/shaders/basic.vert.spv differ