From 7e8902a0409818455a5de05ee27028856088c6b4 Mon Sep 17 00:00:00 2001 From: _ <> Date: Sun, 15 Mar 2020 15:58:45 +0000 Subject: [PATCH] :bug: Fix scale factor on the airplane Add a little truck that drives around. --- airplane.iqm | Bin 18576 -> 18576 bytes src/bin/pumpkin.rs | 83 +++++++++++++++++++++++++++++++++++---------- truk.iqm | Bin 0 -> 16996 bytes 3 files changed, 66 insertions(+), 17 deletions(-) create mode 100644 truk.iqm diff --git a/airplane.iqm b/airplane.iqm index bc0883531d33a1a656d8fe6df40b2bfb02f5e3ce..fb5a60a161a463a78538d5ab4d598b8cf689b243 100644 GIT binary patch literal 18576 zcmeI3cX(A**2b^&9wY<^p@ouABB6u8y@wWB=)DgJNG~Dunt_0!7bVhkus{mvm=M5k zAoqZc;@EHm9g2Y9&>Te=6a+Kxd+uI0``!U_&~N;{Kgjd^W|h76+H03{_6bfpbmwk{ z95HeV`g08V;TZhk81j=JN^bBSkXZUyZ=C>-gzAvEH_CY8#mCye3!~+5+!;UHowTZm z>;2dp&a%Pz&7@T;ob-EikN-z2W`*-8VyLIAT9FxEy-Rv9;*(buansNEROP>g82T9_ zI`U_#{62l@SNSvbaVIrfn0fETAhYnWQcmf+9kuoUd{15aiw;Y){On7=-dB&O-*1k_ z@^LHn7b|qsd16TuWAU!_nW}yx8TAJ!|6Asd`|}k#n#q`|jpO$ZD0_9kyV*cv#z$Q< z#eY6B+$sKZ$CqZRagBXLzOJjsh@WdKe&%FtSVN3k#3kciKu*MSJz0;lebbWlkE4dy zorkUUSN_aSmygwBZCfMqTI)TIyk)`n<%yqT9MmIg_6jACbQK_=U`~9V5)N3h`cl;ILAe;$IX{f0tS} zK2w>e&LqBZ7w0x`SfbDQmz?aY_T5~M^BL1@p_Avli0Ax!pH1;^Y*uQ&;^$uIEyZ{zp9}{MP1!HjJNdF%I|p=RyYSVnr5)?(}f(afpx|i ztS1%uMWNWe{n=(f}chu$nmAjRG&PDu^ zQy)v_c%Ry=oV;roFZU7SJ$XESshNJ>5scUGO?@u@b;_N>7|}UjnU~&|e#UT5MVFej z8mzwJ*J`%>u|coY_1kyvSmKwn#Ibl^OFhgfI`il?=pcAvt-j^my^BGv@89=aF&QmwuiHo@ePRel?a=o75nAxTn+^!Gy~pBkyOv zxAmNQ{d$aEvz}AFANb9te=;_J9>=xx#r?m-+?~Q0{2VKq&z$5YsKhi z*gF5}{mFCgf9AQKeBX-S{~fEpOC?607rh4Nx!*gSG4dSoJV58%t#_cj=jrEni})EM z_Y}Vq^m|JD`n|^Q3N?3=HOSqqzH_)HR(|pGuGe)vr}*{nI@Ta-%Xg7{L-M;_{9JSK z^E+AB<@=Mr7l>c~J%Zn*`Zuk9enjV)5uM+q`nRj(XCBcxmgxK**6(6jPp+GOcZ;9j z1ETZWL%;X+XG(NFcMeCKkvzDdt9S3-2Ja5q{9oGir>54lU-F18Qv6cKgX;UO7^RHM z^AOvyO{E60hoTNPgOqAN5)93$ZEncCi^J=TM~N6)Ap^;uk4?k>Z#6 z$@^BM_(h6e_4nRWat{3WS@u=@l$?*g?|eSxJV-lj|2Xc0JU5JEKRIV=e24fcxm@x* zsq<;I(=YAf7b)-i2epe|;-sI<-~YZBzes5pDSrHmzcFZaE@M=~X-18m?JW6vyHHE^ zcykEOa0}zr$@7ejM++IWDe0qR+=pYYxG2}8L^vt&yt|l>HsdJSFAM9!JdCGJSrg;k z!*ky|^2fB#cMX0Ry)NQS)%O>5EV;>bKY@5Vy4iQHds1pWbJ?K^h8>+bdq>VpM}Evb zXZ@MY^Np9gf95>WzF~$PJu+^%8UOAT>rC0vmu#MIevJI6#bHN(F7U2v)bsURS)B(M zcJza%vs{~p=W*6a9BkUr69ezMW03!6#yG_D{MgameH)wORlFS?&y-7hzH-zv5YPN;P`@2L zCM3ai=97NrR`*r69sP$(XI(F0Jp&H4GVSQs5WfcTWe&A6Z0hcH+3`8*w=bP_zl!)G zsK<`}&84A6BI3DUcJu_S&sSKVh3=~^JNo310_HiyGrt`@CZvFIR>j-V<3keM=Mf)| zdhF9pusdQw*#2eLW|?+$+=GUv7Kg)* zezegXqhHA=H~ZMp@!!(Tu+CxDee@7|z2mqaRs1jN>U-R}Pwnb;_n%JV{mA&7bWGD) zAAS$m(V4SijH^Ds2khvaV~uO`>hXKPj*c44@N4(du|BLPM}1vVu-WsiPSzak=yuMe z9`jzw!LBpa!}eeMewJxRM_(iViF@JGw$#k9qvxIyY|Ogiso#!1wrVZ+xUG)nwMNV} z?C7ik>!^PIJNm@~ABIm?^UXnrg4@25Wc|HXNF zG`_w9_Vzz!_)XmB*89MEp8Rc3#_aZ4!>2Zq_)o`AHE$(PaF1%?vfeNLc6K$M{;l&) zHQThA;2w6etrb6^`cSj)_;cey{NRW^LEqdc47Q`TpYX>Hc=TpjO^^et*rWes`P1 z)8-oUzbkV74{P(^9r!(n6xRCP&%RwYd7E$hWp6y^(>3j@4F21N8vj4+l`YTsw3i6I ztlLJ%Tr-p8`<3Pn_Y`Ztb1B;OyP(%k^Wd zzx__ZJ3j56e4h9wW4F7NaBOZK33X_*N>%{S}a*xsDy*WVsfD%va`U&efSgoEeR$d`M% zQM}M3*NN+;-Lyxixf>iPabq{mmo=WhojqGmePhyG4G)%x-NUiipY0>VCgJ_`V0-SS zDc<{<@mq`C@_C<3De3ab=Wnx*o_|b9w@ zd@t{rd{K?gQ?mBOmrJ&giy$MM~2* z>)_vH?r;ClYgWo@O%lBA+hV4r+>H5GJ&A9#?pO+Z9N)_43~G`Z9rPyaGa5~A=o(uq zDdX_>bFBU3JaHF0_;-{1;onr!=HEx=1^JZDzoVpG02Bm;lwMfb{M*o?pctTzKf$!@ z;*gJn5`cQ3vP(h+fl`2aX=UTjG#$YJFLVd>5M`HxEDtIG>J^n;2{IH^2Gpwn+Eqa{ zz(4V%9R5EkZUBi5bl|~uP;ad4CXo0u zSVvPpy_vG{a&qwhRDp-aK^+@o*)1Sjf>wZfYe2gVhyrbu-cH%=Av=JMfO@pDJ3)2^ zT>$m2%I*f)9rOUydn&sZWN*+1Q17ekevtja06=}9vIjv9215Y#KPY=BQ>XVc`88QY;0n}raJr!~qm=37VQ1(p7SztDx zK1bPeA?JblfcgSu$3gxPECkdS0ow6kF<7GXXOx`)xfCn|)R!xJ1>{Pw3Q%9I>@|>U z!8$dz~C1LQ`q2~gjx>@AQlfENMvKPh`FZa!`&FVH=D8<1%r9Z=t;>hCBj}0_yK8`>&86fDZxnkCgo}@>L-~fIhK?Oj)qOvPNhJwm~dKG0;uc~b7{DqS?^)O{q4_9_|$Qqy~ zpk7Pa)FYHl{Rw4LudQtAk;;a!?v{d(y+AbJPi_zaCW0Oy56A`bf~tV+-N0hNw)|iz zC;)1L1|T0`UdlG03*Zl93WGo}63hmbKp{{Rlm`J|72rFkh_Ztqhk+H!R}AuTFbDJn zB|%wG958oj&>t{w8BhW+2m1^L>|YMBA7fX7fq-!pKq(LmDgx%K1l9rO3IVeKb1}yn zz_D37+c*yEX8mkuj@5wUu>Z4wV}t^Z!S$F4)`Ci)3TO;!fMvi1DuZg^3BWb44jKXO zM>wbjxPQ|@6A%X2pMBy%0$>jIV=VWKKa8sfxNpoo18}dIw+`Srhy>4ohM*Nl1hqk3 zFb%LDYiR-4r#@gT$6+n(!!hVv4mdV#=HOZ3T$zitRt8N0^F0Zei}RZbngix*23i94 zn*sY6fPJ{GOTY%ee#{XII5zul0xbY@aLyc?{W)LGAqw#PaxJ;0 z3qc#u4#a^4U@>S9+JX*%ZQa2T5C_=CeHsrY0j~dJpd;uECWA5HX)qjg0$o8tum}tS zy+9Yhym>)SFaR)jH)ZFBd`x!(JsU8dbEc2`z_p;wSlK7$$pxkZ z#!LkCF(>P#&3M+!GsUww4YU9}hdht8c{XQ&I)FZ&Yue#}=OF^n$8lzXP%sCS1#7@e zWfz9zJc=tH=fQR4x^jP3fT4hE&U48%=RPb1ZGr3qb?yz@=!*l3KonrVp@3(N{T2iI ztAo6t9f$|d00S%swZZdX30MkhfHoi>SOyXR{%^uWpwa*U literal 18576 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 sx%I^<&EZ1oBVd zIG}z)*`GrG8GHt)|3%qj~`!wVi;BSEX8D;++@=I_QP(P>a^N<(7SAhCO zK>HH-8vH})-zfVsKV%B!#)eh3aAGtI~!znkONT9sq8?=Tp%}~9;EC%ka* zgCPrmf`EDLrw260#I14XB4Hy9{JmP!3QpuWafSluf;& zvZ?crDYU6qR(2K0a8MOcucmD3)s;=XhO(*GR5tZm%7(DtEx91$Kx@EH0H_XzgH9kD z$O^K93V`h$z%0PFoFD}Rf~p`2Vt4F z2N<9ns0eBRu6Y$u5Ab?a2Gszs-+1s0s07%beP)7Wz#QzySY9)J7#9h6-I)6&z-!IC z5rF%k7MKm{f~H_8s0nI=ae)0;OEh4gI)JephqbT|$DnU6;Mla8gL{Q@WiHlQ4m1GF z_bgy8&TlMe1emWOXad-eYqJ8dPh-#wu-|B~3b2m}*oW(y1eOE#V~#O^W3&HC5Dl1v zbLQCW&-ro=F@XD*Ysod84w{3OAQ4Ojvp_4*0>lEgbp(AuB48V@(=adsaQ(A@=RjL9 z5)1(YK|jz2veQj z)5q(;wV=&dxlYWJ6^sXr84l=UPS#7C@vN77ihFS!hz8t;+>f-mH(vq~fIjYP+LZzK zLv=tO$C(Jqf=Qq_SOg|0I|!2V2v$DMgX_q3<@K2d;sMv3`;u$U>o6U(0CF9u^V+bD zzC&u?gVzAt76YzP39tlkt++<7f>6MA#)bj5zYds-?WF*7vYqwT h0?oj3!1*i%D*)%k_LZO^VEZc21hAdgnb(``{|3OLlD7Z= diff --git a/src/bin/pumpkin.rs b/src/bin/pumpkin.rs index b941831..dac8c43 100644 --- a/src/bin/pumpkin.rs +++ b/src/bin/pumpkin.rs @@ -108,6 +108,8 @@ impl ControllerState { key_or_gamepad (Scancode::Right, Button::DPadRight), key_or_gamepad (Scancode::Up, Button::DPadUp), key_or_gamepad (Scancode::Down, Button::DPadDown), + b (Button::LeftShoulder), + b (Button::RightShoulder), ], analog_left_x: axis_or_zero (Axis::LeftX), analog_left_y: axis_or_zero (Axis::LeftY), @@ -176,6 +178,12 @@ impl ControllerState { if self.is_pressed (KEY_DOWN) { delta = delta.mul_quat (Quat::from_rotation_x (spin_f)); } + if self.is_pressed (YAW_LEFT) { + delta = delta.mul_quat (Quat::from_rotation_z (spin_f)); + } + if self.is_pressed (YAW_RIGHT) { + delta = delta.mul_quat (Quat::from_rotation_z (-spin_f)); + } //println! ("spin_f {}, Quat {:?}", spin_f, delta); @@ -225,6 +233,8 @@ struct Airplane { } struct FlightState { + frames: u64, + airplane: Airplane, spin_speed: i32, arrows: Vec , @@ -234,6 +244,8 @@ struct FlightState { impl Default for FlightState { fn default () -> Self { Self { + frames: 0, + airplane: Airplane { pos: (0.0, -20.0, 20.0).into (), vel: (0.0, 0.0, 0.0).into (), @@ -337,6 +349,8 @@ impl FlightState { ); } } + + self.frames += 1; } } @@ -470,6 +484,7 @@ struct GameGraphics { mesh_sky: RenderableModel, mesh_pitch: RenderableModel, mesh_arrow: RenderableModel, + mesh_truck: RenderableModel, texture_sky: Texture, texture_grass: Texture, @@ -535,6 +550,7 @@ impl GameGraphics { let mesh_sky = renderable_from_iqm_file ("sky-sphere.iqm"); let mesh_pitch = renderable_from_iqm_file ("pitch.iqm"); let mesh_arrow = renderable_from_iqm_file ("arrow.iqm"); + let mesh_truck = renderable_from_iqm_file ("truk.iqm"); let texture_sky = Texture::from_file ("sky.png"); let texture_grass = Texture::from_file ("grass.png"); @@ -795,6 +811,7 @@ impl GameGraphics { mesh_sky, mesh_pitch, mesh_arrow, + mesh_truck, texture_sky, texture_grass, @@ -853,7 +870,7 @@ impl GameGraphics { let proj_mat = Mat4::perspective_rh_gl (30.0f32.to_radians (), screen_size.0 / screen_size.1, 0.125, 200.0); - let airplane_scale = 1.0 / 128.0; + let airplane_scale = 1.0 / 8.0; let view_mat = match state.play_mode { PlayMode::WindTunnel => { @@ -863,14 +880,16 @@ impl GameGraphics { let latitude = (state.camera.altitude - 90.0).to_radians (); proj_mat * - Mat4::from_translation (Vec3::from ((0.0, 0.0, -8.0))) * + Mat4::from_translation (Vec3::from ((0.0, 0.0, -20.0))) * Mat4::from_rotation_x (latitude) * Mat4::from_rotation_z (longitude) * Mat4::from_translation ((0.0, 0.0, -2.7 * 0.5).into ()) }, PlayMode::FreeFlight => { + + proj_mat * - Mat4::from_translation (Vec3::from ((0.0, -4.8, -32.0)) * airplane_scale) * + Mat4::from_translation (Vec3::from ((0.0, -1.2, -8.0)) * airplane_scale) * Mat4::from_rotation_x (state.flight.lookaround.altitude.to_radians ()) * Mat4::from_rotation_y (state.flight.lookaround.azimuth.to_radians ()) * Mat4::from_rotation_x (-90.0f32.to_radians ()) * @@ -881,6 +900,13 @@ impl GameGraphics { let airplane_model_mat = airplane_model_mat * Mat4::from_scale ((airplane_scale, airplane_scale, airplane_scale).into ()); + let truck_model_mat = + Mat4::from_rotation_z ((state.flight.frames as f32).to_radians ()) * + Mat4::from_translation (Vec3::from ((1.0, 0.0, 0.0))) + ; + let inverse_truck = truck_model_mat.inverse (); + let truck_model_mat = truck_model_mat * Mat4::from_scale ((airplane_scale, airplane_scale, airplane_scale).into ()); + let world_model_mat = Mat4::identity (); use uniforms::*; @@ -891,23 +917,41 @@ impl GameGraphics { let unis = shader_vars.unis; let attrs = shader_vars.attrs; - let mvp = view_mat * airplane_model_mat; - glezz::uniform_matrix_4fv (unis [&MVP], &mvp); - - let object_space_light = make_object_space_vec (&inverse_airplane, &light); - let object_space_sky = make_object_space_vec (&inverse_airplane, &Vec3::from ((0.0, 0.0, 1.0))); - - glezz::uniform_3fv (unis [&MIN_BRIGHT], &black); - glezz::uniform_3fv (unis [&MIN_ALBEDO], &white); - glezz::uniform_3fv (unis [&OBJECT_SPACE_LIGHT], &object_space_light); - glezz::uniform_3fv (unis [&OBJECT_SPACE_SKY], &object_space_sky); - let gunmetal_grey = color_from_255 ((133.0, 149.0, 161.0)); glezz::uniform_3fv (unis [&ALBEDO], &gunmetal_grey); - self.mesh_airplane.draw_all (attrs, |_i| { - true - }); + glezz::uniform_3fv (unis [&MIN_BRIGHT], &black); + glezz::uniform_3fv (unis [&MIN_ALBEDO], &white); + + { + let mvp = view_mat * airplane_model_mat; + glezz::uniform_matrix_4fv (unis [&MVP], &mvp); + + let object_space_light = make_object_space_vec (&inverse_airplane, &light); + let object_space_sky = make_object_space_vec (&inverse_airplane, &Vec3::from ((0.0, 0.0, 1.0))); + + glezz::uniform_3fv (unis [&OBJECT_SPACE_LIGHT], &object_space_light); + glezz::uniform_3fv (unis [&OBJECT_SPACE_SKY], &object_space_sky); + + self.mesh_airplane.draw_all (attrs, |_i| { + true + }); + } + + { + let mvp = view_mat * truck_model_mat; + glezz::uniform_matrix_4fv (unis [&MVP], &mvp); + + let object_space_light = make_object_space_vec (&inverse_truck, &light); + let object_space_sky = make_object_space_vec (&inverse_truck, &Vec3::from ((0.0, 0.0, 1.0))); + + glezz::uniform_3fv (unis [&OBJECT_SPACE_LIGHT], &object_space_light); + glezz::uniform_3fv (unis [&OBJECT_SPACE_SKY], &object_space_sky); + + self.mesh_truck.draw_all (attrs, |_| { + true + }); + } let mvp = view_mat * world_model_mat; glezz::uniform_matrix_4fv (unis [&MVP], &mvp); @@ -947,6 +991,11 @@ impl GameGraphics { self.mesh_airplane.draw_all (attrs, |_| true); + let mvp = view_mat * truck_model_mat; + glezz::uniform_matrix_4fv (unis [&MVP], &mvp); + + self.mesh_truck.draw_all (attrs, |_| true); + let mvp = view_mat * world_model_mat; glezz::uniform_matrix_4fv (unis [&MVP], &mvp); diff --git a/truk.iqm b/truk.iqm new file mode 100644 index 0000000000000000000000000000000000000000..b5474a7b7c2eb0256c061456a1d229b193367fe0 GIT binary patch literal 16996 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 literal 0 HcmV?d00001