[video output=day640 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Investigating Corner Collisions" vod_platform=youtube id=PZejeRCDT-M annotator=Miblo] [0:00][Recap and set the stage for the day][:speech] [0:28][Demo our sticky :collision bug using the new diagramming][:"debug visualisation" :run] [4:25][Launch ~4coder, with build initially not working][:admin] [5:43][Reacquaint ourselves with the gliding :movement code in MoveEntity()][:collision :research] [10:02][Interpret our colour-coded :collision boxes][:"debug visualisation" :run] [11:16][Reacquaint ourselves with the diagramming code in UpdateBest()][:collision :"debug visualisation" :movement :research] [12:04][Reinterpret our colour-coded :collision boxes][:"debug visualisation" :run] [14:04][Consider enabling MoveEntity() to allow diagonal motion][:collision :movement :research] [17:01][Corner-diagonal motion should be handled][:collision :"debug visualisation" :movement :run] [17:28][Double-check Dir and Side in MoveEntity()][:collision :movement :research] [19:47][Our BestCell black box is missing][:collision :"debug visualisation" :movement :run] [20:30][Disable the BestCell diagramming in MoveEntity()][:collision :"debug visualisation" :movement] [20:46][The cyan plus sign remains][:collision :"debug visualisation" :movement :run] [20:55][Continue to wonder about our missing BestCell black box][:collision :"debug visualisation" :movement :research] [22:00][Disable the gliding code in MoveEntity()][:collision :movement] [22:17][The BestCell black box is never drawn][:collision :"debug visualisation" :movement :run] [22:46][Try make MoveEntity() draw the BestCell in red][:collision :"debug visualisation" :movement] [22:55][The BestCell red box is never draw][:collision :"debug visualisation" :movement :run] [23:09][Leave the BestCell black in MoveEntity() and try drawing a bigger version of the ToP box][:collision :"debug visualisation" :movement] [23:33][Our black box remains missing][:collision :"debug visualisation" :movement :run] [23:38][Try reversing the ToP and BestCell diagramming in MoveEntity()][:collision :"debug visualisation" :movement] [23:52][Our BestCell is drawn, but not the ToP][:collision :"debug visualisation" :movement :run] [24:20][Inspect RenderDiagrams() for bugs drawing the first entry][:"debug visualisation" :research] [29:23][Step in to AppendDiagramEntry()][:"debug visualisation" :run] [30:21][Fix DIAGRAM_Text() to pass Diagram_Text to AppendDiagramEntry()][:"debug visualisation" :language] [31:59][Our BestCell and ToP are both drawn][:collision :"debug visualisation" :movement :run] [32:27][Re-enable the gliding code in MoveEntity()][:collision :movement] [32:44][MoveEntity() tests all but three edges][:collision :"debug visualisation" :movement :run] [33:29][Enable MoveEntity() to test diagonal edge motion][:collision :movement] [36:49][Somebody is talking about rust again][:language :speech] [38:20][@fat_dratini][It gets the hose again][:language] [38:56][Tentatively permit "R***"][:language :speech] [39:16][MoveEntity() now tests the full cube, yet our corner gliding remains not working][:collision :"debug visualisation" :movement :run] [42:01][Fix typo in MoveEntity()][:collision :movement] [42:39][Consider testing the 2-neighbourhood][:collision :movement :run] [45:10][@vacyoui][Unmentionable what, RPG Maker?][:language] [46:57][Determine to widen the gliding :movement search space][:collision :research] [51:55][Consider classifying our :movement direction dynamically as we march through the voxel][:collision :research] [56:01][@tk_dev][Q: A line drawing algorithm?][:collision :movement] [56:37][Consider drawing a wider line][:collision :movement :research] [1:00:40][Increase VOXDIM from 2 to 3 in MoveEntity()][:collision :movement] [1:01:17][Consider specifying all the possible wider :movement directions in MoveEntity(), avoiding oscillation][:collision :research] [1:03:27][Consider adding an value that directs :movement tests based on previous tests][:collision :research] [1:04:10][Introduce the notion of TriedOpposites in MoveEntity()][:collision :movement] [1:06:51][Our gliding :movement code now tests further][:collision :run] [1:07:18][Try making MoveEntity() flip and test each axis on separate loops][:collision :movement] [1:12:24][Our gliding :movement code tests further still, but doesn't permit corner gliding][:collision :run] [1:14:19][Consider drawing the glove's :collision box as a sphere][:"debug visualisation" :run] [1:15:35][Implement the Diagram_Sphere case in RenderDiagrams()][:"debug visualisation"] [1:20:10][@jarput][Has anyone noticed the "noise" on [@cmuratori Casey]'s latest streams? The editor seems more blurry to me] [1:20:17][Implement the Diagram_Sphere case in RenderDiagrams() (cont.)][:"debug visualisation" :mathematics :rendering] [1:25:55][Check out what would be our glove's :collision sphere][:movement :run] [1:29:24][Check how UpdateBest() determines the TestP][:collision :movement :research] [1:30:31][Break down our :collision test][:"debug visualisation" :movement :run] [1:32:54][Red means you can't move directly through the current voxel to that voxel][:collision :"debug visualisation" :movement :run] [1:35:48][:Collision in The Witness: Flood-fill search][:movement :speech] [1:37:07][Q&A][:speech] [1:37:42][@teamrandb][Q: Greetings [@cmuratori Casey], forgive my rude question, but why did you not post you streaming on twitter?] [1:38:01][@mixelqueen][Q: Instead of switching between -O2 and -Od manually, why not \[set\] a different hotkey to build release vs debug?] [1:38:18][Building both -Od and -O2 for refterm[ref site=refterm page=build.bat url=https://github.com/cmuratori/refterm/blob/main/build.bat]][:language :research] [1:39:29][@anusaa][Q: On [~~code565 day 565] you said that the multithreading code in [~hero Handmade Hero] was crappy and that you learned much more about it since then. But what exactly is bad in that code?][:threading] [1:40:16][@mindmark42][Q: Can you explain what a discriminated union is?][:"data structure" :language] [1:42:36][@davr0s][I call it "tagged union"][:"data structure" :language] [1:42:41][Theoretical discriminated union[ref site=Wikipedia page="Disjoint union" url=https://en.wikipedia.org/wiki/Disjoint_union]][:"data structure" :language :speech] [1:44:13][@poissonprocess][Q: For someone just starting following [~hero Handmade Hero], would you recommend against using DirectSound? It looks to be deprecated now. Should I use xaudio2 or WASAPI?][:audio :library] [1:46:07][@tk_dev][Q: Does the order in which entities move change the result in your :collision detection?] [1:47:13][@mextroxtm][Q: Do you think the concept of IMGUI is applicable the same way in 3D user interfaces as in VR games? Are there any differences you would see? I might be writing a small research paper about it for university if I get the permission to][:ui] [1:48:02][@olive_prist][Q: You invented IMGUI?][:ui] [1:48:41][@olive_prist][Q: [@mike_acton Mike Acton] recommends sometimes doing deliberate practice for programming as opposed to working on projects. Have you done this yourself? Do you recommend it?] [1:50:42][@0lpbm][Well, Wikipedia[ref site=Wikipedia page="Immediate mode GUI" url=https://en.wikipedia.org/wiki/Immediate_mode_GUI] credits [@cmuratori Casey], for the doubters][:ui] [1:51:33][@carwynnelson][Q: Were there IMGUI interfaces before you coined the term? Or was the idea and the term completely original?][:ui] [1:52:52][@thehorseisbrown][Would you coin a different term for IMGUI in hindsight? Wouldn't "code-based" or something in that direction be better?][:ui] [1:53:12][@d3dbsp][Did you also coin GJK?[ref site=Wikipedia page="Gilbert–Johnson–Keerthi distance algorithm" url=https://en.wikipedia.org/wiki/Gilbert%E2%80%93Johnson%E2%80%93Keerthi_distance_algorithm]][:geometry] [1:54:05][@enemypanda][Did you coin JavaScript?][:language] [1:54:33][@carwynnelson][It's odd that [@cmuratori you] don't have a Wikipedia page[ref site=Wikipedia page="Eric Veach" url=https://en.wikipedia.org/wiki/Eric_Veach][ref site=Wikipedia page="Matt Pharr" url=https://en.wikipedia.org/wiki/Matt_Pharr]] [1:58:52][@i_am_seabass][Q: Microsoft is setting fairly strict :hardware requirements for Windows 11. Basically, chips older than two years will not work. Do you think this is a good or bad thing? Seems like it will lead to a lot of waste of perfectly good hardware] [2:01:48][@miltondts][Nah… the TPM requirement is about locking down the platform, DRM, etc][:"operating system"] [2:04:34][@mougatron][Q: Have you ever used any :physics engine like Havok, PhysX, or Bullet? If so, do you have any opinion on them?] [2:05:03][@beastexmachina][Q: Same opinion for trusted modules in embedded systems?][:"operating system"] [2:06:44][Do we have any Iranians watching?][:speech] [2:07:24][@xpaw][Does twitch work in Iran?] [2:07:45][Persian-style grilled meats][:food :speech] [2:08:11][@navidhg][Kebab koubideh][:food] [2:08:22][Mediterranean grilled meats][:food :speech] [2:10:16][@f__stein][@boop is Iranian, right? At least he spoke about speaking Farsi] [2:10:40][Getting better at grilled chicken][:food :speech] [2:11:20][@amirh12][Joujeh kebab][:food] [2:11:25][Main problem figuring out the doneness of joujeh kebab][:food :speech] [2:11:57][@vertual1][Touch][:food] [2:12:12][@esert][If you want to get Middle East / Levant-type of seasonings and other produce in Seattle, try Goodies Mediterranean Market[ref site="Goodies Mediterranean Market" url=https://www.goodiesmedmarket.com/]][:food] [2:13:17][@esert][Yes, in Lake City. They also have house-made kebabs, ready to cook][:food] [2:13:28][Skewering before coming to room temperature][:food :speech] [2:14:27][@miltondts][Does your skewer rotate?][:food] [2:14:29][Rotating skewers manually][:food :speech] [2:15:59][@sir_pinecone][How about using an infrared thermometer and then remove before it hits the target temperature, because it'll continue to cook for a bit as it sits?][:food] [2:16:31][@miltondts][Also, I don't know if this is common, but I see the meat is not done all at the same time and they cut the meat on the skewer and leave the rest][:food] [2:17:40][Wrap it up][:speech] [/video]