From 4c617db6f162bca2f0fcc7269fee6556d093e2c7 Mon Sep 17 00:00:00 2001 From: Joshua Simmons Date: Sun, 13 Nov 2022 23:29:24 +0100 Subject: [PATCH] Fix matrix handling now cross-product works --- narcissus/src/main.rs | 14 +++++++------- narcissus/src/shaders/basic.vert.glsl | 11 ++++++++--- narcissus/src/shaders/basic.vert.spv | Bin 2372 -> 2364 bytes 3 files changed, 15 insertions(+), 10 deletions(-) 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 9ab0390c3198ae6a94929ecbae33b973d52bdce9..fab7758c2cf485ec896a6dcf892a27a660ef0350 100644 GIT binary patch literal 2364 zcmZ9OYfDvO5QWz{d!J)jX;#`zMYDS%(G4j~Bkl`?h&c+W++Z?K)Smp}P8mVGUAPdoF&J+Urx@2ChYYciAMMGfq% z$^PfAL0wj2l`g8jBt}l+P(@NAP8qm0gAo z;08uLbb+S8vOb#1`upt5esd@2H#6L(QscfS*xB!+-j7XeC(iq6n)pTYW?pbZi(s7f zwsimo7i_f0-0|P_JMqlxnYmDJSnbde=cgt<9`?O3Uvx%ZY`!^g#=q=$_F})W%~^@Z zMwfX;^1rWUI6ba*#Qih|&T~So;LSN%?ES4~+{-EJfNub^o>4pIyu;r|^ns5!=Dt%3 z-zV4UNd6gVrf@5Y#IVn2-0%OmESabU-d)#E0O!Ic`sois*&6PuFato3};#_IWIjMej< zF;>raR*F8c<~{Fo<_%AHC4SzV;6Tm9FT|V``N;>)-I;6NH6~G!`3-B56BXAG+6_}xC2`~nh0ke!)8W~`7{u`su7z@tQ zvpjuk^GwcZOQtJ>;dI`ghz82CoIIAhFex|pZ)T|*x|IA3$EqGv(Q z-e*_Z3$y+@dKN*P5u2t99%A~`o--+*+7nw(7dzJWjQVot8|e86Lgiv#rmenIzI;|D zA7>*U?N!;I=U3;v#67RA{*2fEaps!T9SMRbNe2{cY*1dGAR*yF>eN_Mb;Te;!>+&({z!?nC=p^3;}#+7q+4A9C+v*49>Q z?pgnhd^f&!c_+EKue-@bY?^WC$o}P|&!2gI&i$)1>u7uD*n|H2`R-Zm2Wi`@@!IOL z?fLO!hevlaj<~-eFmZohFp56x+sCtS8OC>cBz52&;I5A`jy->p_oMpIXPkTg6vFp< z(1%{vC3b;PX!rNf@8l7)kCza*PhqbTbGL>4m6$UxUR(2SmY4hAo*I#tKI7EGj`Yb( zU3v$JRqj6$YdJhmtT?!<{SdJgCw3sQHtt|za-C-?`aG29jn}Uht#6LwIfpjyH;J`* zzfH`%b@oJJ?yazs5HoD^%_P?5n@z0EcPgB z_GnLqpNHs2{_-t+KJH|Kn_LRN0Kvn$)^XN;*WW?ZFrR0Qd&4O7e<}U$qvrKJ1m5;{ zIkC3CD~Yvxy$W&Oc>V767^AooZst9q9@V1v!z~E>b?W~%L=JJ!`HlaQ-@WI)q6^!& q^DKxS9zp0+jrzz@PXA_)PatCazF#Ev6ax4AH>dZ6*nbQ-%z$?yLUYpq -- 2.49.0