Handmade Hero»Episode Guide
Unprojecting the Mouse Cursor
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:08Announcement: Miblo's Patreon
0:08Announcement: Miblo's Patreon
0:08Announcement: Miblo's Patreon
3:04Recap and set the stage for the day
3:04Recap and set the stage for the day
3:04Recap and set the stage for the day
4:16Run the game and see where we're at
4:16Run the game and see where we're at
4:16Run the game and see where we're at
5:41Consider moving away from explicitly constructing the debug hierarchy
5:41Consider moving away from explicitly constructing the debug hierarchy
5:41Consider moving away from explicitly constructing the debug hierarchy
8:51On writing the usage code and then unifying the systems
8:51On writing the usage code and then unifying the systems
8:51On writing the usage code and then unifying the systems
10:14handmade_sim_region.cpp: Look at how the entities are currently handled
10:14handmade_sim_region.cpp: Look at how the entities are currently handled
10:14handmade_sim_region.cpp: Look at how the entities are currently handled
11:09Implement the ability to click on an entity in order to inspect it
11:09Implement the ability to click on an entity in order to inspect it
11:09Implement the ability to click on an entity in order to inspect it
13:11Run the game and illustrate what we'd like to do
13:11Run the game and illustrate what we'd like to do
13:11Run the game and illustrate what we'd like to do
15:48handmade.cpp: Introduce DEBUGUI_DrawEntityOutlines
15:48handmade.cpp: Introduce DEBUGUI_DrawEntityOutlines
15:48handmade.cpp: Introduce DEBUGUI_DrawEntityOutlines
18:05Run the game and see the new outlines
18:05Run the game and see the new outlines
18:05Run the game and see the new outlines
18:34handmade_render_group.cpp: Make PushRectOutline additionally take a Thickness
18:34handmade_render_group.cpp: Make PushRectOutline additionally take a Thickness
18:34handmade_render_group.cpp: Make PushRectOutline additionally take a Thickness
19:06Run the game and see the thinner magenta outlines
19:06Run the game and see the thinner magenta outlines
19:06Run the game and see the thinner magenta outlines
19:59Consider the problem of the perspective transform
19:59Consider the problem of the perspective transform
19:59Consider the problem of the perspective transform
21:49handmade_render_group.cpp: Look at Unproject
21:49handmade_render_group.cpp: Look at Unproject
21:49handmade_render_group.cpp: Look at Unproject
23:19Blackboard: Why we need the distance from the camera
23:19Blackboard: Why we need the distance from the camera
23:19Blackboard: Why we need the distance from the camera
25:26Blackboard: Conceptualising this entity picking
25:26Blackboard: Conceptualising this entity picking
25:26Blackboard: Conceptualising this entity picking
27:08handmade.cpp: Unproject the MouseP
27:08handmade.cpp: Unproject the MouseP
27:08handmade.cpp: Unproject the MouseP
29:26handmade.cpp: Test the LocalMouseP against the 2D entity Volume->Dim
29:26handmade.cpp: Test the LocalMouseP against the 2D entity Volume->Dim
29:26handmade.cpp: Test the LocalMouseP against the 2D entity Volume->Dim
32:45handmade.cpp: Do a PushRect of the mouse's location
32:45handmade.cpp: Do a PushRect of the mouse's location
32:45handmade.cpp: Do a PushRect of the mouse's location
33:40handmade.cpp: Do an Orthographic call to draw the MouseP
33:40handmade.cpp: Do an Orthographic call to draw the MouseP
33:40handmade.cpp: Do an Orthographic call to draw the MouseP
36:27handmade_render_group.cpp: Add OffsetP and Scale to Orthographic
36:27handmade_render_group.cpp: Add OffsetP and Scale to Orthographic
36:27handmade_render_group.cpp: Add OffsetP and Scale to Orthographic
37:36Run the game and see the mouse
37:36Run the game and see the mouse
37:36Run the game and see the mouse
38:12Debugger: Step into GameUpdateAndRender and inspect the MouseP
38:12Debugger: Step into GameUpdateAndRender and inspect the MouseP
38:12Debugger: Step into GameUpdateAndRender and inspect the MouseP
39:09handmade.cpp: Try and draw the LocalMouseP
39:09handmade.cpp: Try and draw the LocalMouseP
39:09handmade.cpp: Try and draw the LocalMouseP
40:37Run the game and don't see the LocalMouseP
40:37Run the game and don't see the LocalMouseP
40:37Run the game and don't see the LocalMouseP
41:02handmade.render_group.cpp: Investigate why we're not seeing the LocalMouseP
41:02handmade.render_group.cpp: Investigate why we're not seeing the LocalMouseP
41:02handmade.render_group.cpp: Investigate why we're not seeing the LocalMouseP
43:44handmade.cpp: Multiply the mouse's Transform by PixelsToMeters
43:44handmade.cpp: Multiply the mouse's Transform by PixelsToMeters
43:44handmade.cpp: Multiply the mouse's Transform by PixelsToMeters
45:42Run the game and see that the rects aren't correctly positioned [tl;dw: see 1:39:32]
45:42Run the game and see that the rects aren't correctly positioned [tl;dw: see 1:39:32]
45:42Run the game and see that the rects aren't correctly positioned [tl;dw: see 1:39:32]
46:19handmade.cpp: Investigate why rects aren't correctly positioned
46:19handmade.cpp: Investigate why rects aren't correctly positioned
46:19handmade.cpp: Investigate why rects aren't correctly positioned
48:17handmade.cpp: Pass the entity's Transform to the Unproject call
48:17handmade.cpp: Pass the entity's Transform to the Unproject call
48:17handmade.cpp: Pass the entity's Transform to the Unproject call
49:07Run the game and see that we're getting a little closer
49:07Run the game and see that we're getting a little closer
49:07Run the game and see that we're getting a little closer
51:07handmade.cpp: Pick one entity to consider
51:07handmade.cpp: Pick one entity to consider
51:07handmade.cpp: Pick one entity to consider
51:28Run the game and see that the mouse's rectangle is incorrectly placed and scaled
51:28Run the game and see that the mouse's rectangle is incorrectly placed and scaled
51:28Run the game and see that the mouse's rectangle is incorrectly placed and scaled
52:16handmade.cpp: Try doing Unproject without the subtract
52:16handmade.cpp: Try doing Unproject without the subtract
52:16handmade.cpp: Try doing Unproject without the subtract
52:52Run the game and see that it's surprisingly in the right place
52:52Run the game and see that it's surprisingly in the right place
52:52Run the game and see that it's surprisingly in the right place
54:23handmade.cpp: Consider the possibility that Unproject may be fundamentally busted
54:23handmade.cpp: Consider the possibility that Unproject may be fundamentally busted
54:23handmade.cpp: Consider the possibility that Unproject may be fundamentally busted
54:47handmade.cpp: Add OffsetP.z to LocalZ
54:47handmade.cpp: Add OffsetP.z to LocalZ
54:47handmade.cpp: Add OffsetP.z to LocalZ
55:09Run the game and suggest that that's more correct
55:09Run the game and suggest that that's more correct
55:09Run the game and suggest that that's more correct
56:59handmade_render_group.cpp: Study our routines
56:59handmade_render_group.cpp: Study our routines
56:59handmade_render_group.cpp: Study our routines
1:02:15handmade.cpp: Try putting that subtract back in to the Unproject
1:02:15handmade.cpp: Try putting that subtract back in to the Unproject
1:02:15handmade.cpp: Try putting that subtract back in to the Unproject
1:05:28Run the game and try to determine how far off we are
1:05:28Run the game and try to determine how far off we are
1:05:28Run the game and try to determine how far off we are
1:06:00handmade.cpp: Try hardcoding values
1:06:00handmade.cpp: Try hardcoding values
1:06:00handmade.cpp: Try hardcoding values
1:07:32Run the game and don't see a MouseP rectangle
1:07:32Run the game and don't see a MouseP rectangle
1:07:32Run the game and don't see a MouseP rectangle
1:08:20handmade.cpp: Pass WorldMouseP to PushRect
1:08:20handmade.cpp: Pass WorldMouseP to PushRect
1:08:20handmade.cpp: Pass WorldMouseP to PushRect
1:08:57Run the game and see that it's okay, but not great
1:08:57Run the game and see that it's okay, but not great
1:08:57Run the game and see that it's okay, but not great
1:09:17handmade.cpp: Set LocalZ to 1.0f
1:09:17handmade.cpp: Set LocalZ to 1.0f
1:09:17handmade.cpp: Set LocalZ to 1.0f
1:11:21handmade.cpp: Add RenderGroup->Transform.DistanceAboveTarget to PushRect
1:11:21handmade.cpp: Add RenderGroup->Transform.DistanceAboveTarget to PushRect
1:11:21handmade.cpp: Add RenderGroup->Transform.DistanceAboveTarget to PushRect
1:14:17handmade_render_group.cpp: Introduce CompleteUnproject
1:14:17handmade_render_group.cpp: Introduce CompleteUnproject
1:14:17handmade_render_group.cpp: Introduce CompleteUnproject
1:22:27Run the game and conclude that we'll want to clean up what's happening in the projection
1:22:27Run the game and conclude that we'll want to clean up what's happening in the projection
1:22:27Run the game and conclude that we'll want to clean up what's happening in the projection
1:23:49Q&A
🗩
1:23:49Q&A
🗩
1:23:49Q&A
🗩
1:24:18ijustwantfood The lag is real
🗪
1:24:18ijustwantfood The lag is real
🗪
1:24:18ijustwantfood The lag is real
🗪
1:24:44conloncs How will the focal length factor in? Will you have FOV stuff?
🗪
1:24:44conloncs How will the focal length factor in? Will you have FOV stuff?
🗪
1:24:44conloncs How will the focal length factor in? Will you have FOV stuff?
🗪
1:26:03insobot Elvin?
🗪
1:26:03insobot Elvin?
🗪
1:26:03insobot Elvin?
🗪
1:26:20conloncs Semi related: What do you think about using different types for Points and Vectors?
🗪
1:26:20conloncs Semi related: What do you think about using different types for Points and Vectors?
🗪
1:26:20conloncs Semi related: What do you think about using different types for Points and Vectors?
🗪
1:26:52Zamar037 Does the screen center need to be involved? It was used in CompleteUnproject
🗪
1:26:52Zamar037 Does the screen center need to be involved? It was used in CompleteUnproject
🗪
1:26:52Zamar037 Does the screen center need to be involved? It was used in CompleteUnproject
🗪
1:27:10StarchyPancakes Is part of the problem that the code isn't normalizing the motion between the mouse and the entity relative to the screen dimensions in world coordinates at the different levels?
🗪
1:27:10StarchyPancakes Is part of the problem that the code isn't normalizing the motion between the mouse and the entity relative to the screen dimensions in world coordinates at the different levels?
🗪
1:27:10StarchyPancakes Is part of the problem that the code isn't normalizing the motion between the mouse and the entity relative to the screen dimensions in world coordinates at the different levels?
🗪
1:28:03handmade.cpp: Try doing the MetersToPixels after the fact
1:28:03handmade.cpp: Try doing the MetersToPixels after the fact
1:28:03handmade.cpp: Try doing the MetersToPixels after the fact
1:28:43handmade_render_group.cpp: Check that there weren't any other transforms happening to PushRect
1:28:43handmade_render_group.cpp: Check that there weren't any other transforms happening to PushRect
1:28:43handmade_render_group.cpp: Check that there weren't any other transforms happening to PushRect
1:29:37abnercoimbre Mm. We seem to have run out of questions
🗪
1:29:37abnercoimbre Mm. We seem to have run out of questions
🗪
1:29:37abnercoimbre Mm. We seem to have run out of questions
🗪
1:29:40cmuratori What is the problem with this Unproject?
🗪
1:29:40cmuratori What is the problem with this Unproject?
🗪
1:29:40cmuratori What is the problem with this Unproject?
🗪
1:30:21handmade_render_group.cpp: Investigate the problem
1:30:21handmade_render_group.cpp: Investigate the problem
1:30:21handmade_render_group.cpp: Investigate the problem
1:32:26Meta-point: On the potential features of a development tool that would help with these types of problems
1:32:26Meta-point: On the potential features of a development tool that would help with these types of problems
1:32:26Meta-point: On the potential features of a development tool that would help with these types of problems
1:36:11Debugger: Inspect a bunch of values and copy them to a scratch buffer
1:36:11Debugger: Inspect a bunch of values and copy them to a scratch buffer
1:36:11Debugger: Inspect a bunch of values and copy them to a scratch buffer
1:39:32Owl of Shame Moment: We took out Z movement relative to the basis P
1:39:32Owl of Shame Moment: We took out Z movement relative to the basis P
1:39:32Owl of Shame Moment: We took out Z movement relative to the basis P
1:40:48handmade.cpp: Correctly set Transform.OffsetP
1:40:48handmade.cpp: Correctly set Transform.OffsetP
1:40:48handmade.cpp: Correctly set Transform.OffsetP
1:41:11Run the game and find it in the right place
1:41:11Run the game and find it in the right place
1:41:11Run the game and find it in the right place
1:44:17On getting bitten by a featureα
1:44:17On getting bitten by a featureα
1:44:17On getting bitten by a featureα
1:44:39Lament this 2.5D nonsense
🗩
1:44:39Lament this 2.5D nonsense
🗩
1:44:39Lament this 2.5D nonsense
🗩
1:45:15Glimpse into the future and wrap it up
🗩
1:45:15Glimpse into the future and wrap it up
🗩
1:45:15Glimpse into the future and wrap it up
🗩