Handmade Hero»Episode Guide
Room-based Camera Zoom
?
?

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:09Promote Handmade.Network's new "Submit a Project" functionality1
0:09Promote Handmade.Network's new "Submit a Project" functionality1
0:09Promote Handmade.Network's new "Submit a Project" functionality1
1:59A few words on "Handmade" and the projects currently in the Network
1:59A few words on "Handmade" and the projects currently in the Network
1:59A few words on "Handmade" and the projects currently in the Network
6:43Promote the Handmade.Network Forums2
6:43Promote the Handmade.Network Forums2
6:43Promote the Handmade.Network Forums2
7:44Consult the issues and determine to fix the CLANG compatibility3
7:44Consult the issues and determine to fix the CLANG compatibility3
7:44Consult the issues and determine to fix the CLANG compatibility3
10:52On ending macros with __VA_ARGS__
10:52On ending macros with __VA_ARGS__
10:52On ending macros with __VA_ARGS__
12:24handmade_debug_interface.h: Prevent the TIMED_FUNCTION() macro from taking __VA_ARGS__, and the TIMED_BLOCK() ones from taking Number
12:24handmade_debug_interface.h: Prevent the TIMED_FUNCTION() macro from taking __VA_ARGS__, and the TIMED_BLOCK() ones from taking Number
12:24handmade_debug_interface.h: Prevent the TIMED_FUNCTION() macro from taking __VA_ARGS__, and the TIMED_BLOCK() ones from taking Number
15:10Run the game to see everything running properly, and comment on the issue
15:10Run the game to see everything running properly, and comment on the issue
15:10Run the game to see everything running properly, and comment on the issue
17:24Consider working on the camera code
17:24Consider working on the camera code
17:24Consider working on the camera code
23:17Illustrate how the camera system is currently working
23:17Illustrate how the camera system is currently working
23:17Illustrate how the camera system is currently working
25:33handmade_entity.h: Introduce CameraHeight variable
25:33handmade_entity.h: Introduce CameraHeight variable
25:33handmade_entity.h: Introduce CameraHeight variable
27:15handmade_sim_region.cpp: Enable UpdateCameraForEntityMovement() to offset Z based on CameraHeight
27:15handmade_sim_region.cpp: Enable UpdateCameraForEntityMovement() to offset Z based on CameraHeight
27:15handmade_sim_region.cpp: Enable UpdateCameraForEntityMovement() to offset Z based on CameraHeight
27:59handmade_world_mode.cpp: Enable AddStandardRoom() to compute the CameraHeight based on the room proportions
27:59handmade_world_mode.cpp: Enable AddStandardRoom() to compute the CameraHeight based on the room proportions
27:59handmade_world_mode.cpp: Enable AddStandardRoom() to compute the CameraHeight based on the room proportions
30:17Run the game to see that it's already sort of working
30:17Run the game to see that it's already sort of working
30:17Run the game to see that it's already sort of working
32:59Blackboard: Room Camera Fitting
32:59Blackboard: Room Camera Fitting
32:59Blackboard: Room Camera Fitting
37:40Blackboard: Computing the camera's viewing distance
37:40Blackboard: Computing the camera's viewing distance
37:40Blackboard: Computing the camera's viewing distance
41:45Blackboard: Solving for the desired distance
41:45Blackboard: Solving for the desired distance
41:45Blackboard: Solving for the desired distance
46:03handmade_render_group.cpp: Explain Uproject()
46:03handmade_render_group.cpp: Explain Uproject()
46:03handmade_render_group.cpp: Explain Uproject()
48:15handmade_render_group.cpp: Introduce FitCameraDistanceToRectangle()
48:15handmade_render_group.cpp: Introduce FitCameraDistanceToRectangle()
48:15handmade_render_group.cpp: Introduce FitCameraDistanceToRectangle()
51:22Blackboard: Focal length4
51:22Blackboard: Focal length4
51:22Blackboard: Focal length4
56:18handmade_render_group.cpp: Introduce FitCameraDistanceToDimension()
56:18handmade_render_group.cpp: Introduce FitCameraDistanceToDimension()
56:18handmade_render_group.cpp: Introduce FitCameraDistanceToDimension()
59:17handmade_render_group.cpp: Rename both FitCameraDistanceToRectangle() and FitCameraDistanceToDimension() to FitCameraDistanceToHalfDim(), one which returns a v2 and calls the other twice
59:17handmade_render_group.cpp: Rename both FitCameraDistanceToRectangle() and FitCameraDistanceToDimension() to FitCameraDistanceToHalfDim(), one which returns a v2 and calls the other twice
59:17handmade_render_group.cpp: Rename both FitCameraDistanceToRectangle() and FitCameraDistanceToDimension() to FitCameraDistanceToHalfDim(), one which returns a v2 and calls the other twice
1:01:26handmade_render_group.h: Consider removing DistanceAboveTarget from the camera_transform struct
1:01:26handmade_render_group.h: Consider removing DistanceAboveTarget from the camera_transform struct
1:01:26handmade_render_group.h: Consider removing DistanceAboveTarget from the camera_transform struct
1:05:16handmade_render_group.h: Replace DistanceAboveTarget in the camera_transform struct with a v3 CameraP
1:05:16handmade_render_group.h: Replace DistanceAboveTarget in the camera_transform struct with a v3 CameraP
1:05:16handmade_render_group.h: Replace DistanceAboveTarget in the camera_transform struct with a v3 CameraP
1:06:25handmade_render_group.cpp and handmade_world_mode.cpp: Change all necessary functions to use this CameraP
1:06:25handmade_render_group.cpp and handmade_world_mode.cpp: Change all necessary functions to use this CameraP
1:06:25handmade_render_group.cpp and handmade_world_mode.cpp: Change all necessary functions to use this CameraP
1:11:38handmade_entity.cpp: Make UpdateAndRenderEntities() set the CameraP
1:11:38handmade_entity.cpp: Make UpdateAndRenderEntities() set the CameraP
1:11:38handmade_entity.cpp: Make UpdateAndRenderEntities() set the CameraP
1:13:35handmade_world_mode.cpp: Make AddStandardRoom() manually offset the CameraHeight by 11, run the game and consider our problems
1:13:35handmade_world_mode.cpp: Make AddStandardRoom() manually offset the CameraHeight by 11, run the game and consider our problems
1:13:35handmade_world_mode.cpp: Make AddStandardRoom() manually offset the CameraHeight by 11, run the game and consider our problems
1:16:46handmade_world_mode.cpp: Consider what UpdateAndRenderWorld() is doing
1:16:46handmade_world_mode.cpp: Consider what UpdateAndRenderWorld() is doing
1:16:46handmade_world_mode.cpp: Consider what UpdateAndRenderWorld() is doing
1:20:15handmade_particles.cpp: Remove CameraP entirely from the particle pipeline, run the game and see our restored particles
1:20:15handmade_particles.cpp: Remove CameraP entirely from the particle pipeline, run the game and see our restored particles
1:20:15handmade_particles.cpp: Remove CameraP entirely from the particle pipeline, run the game and see our restored particles
1:21:48handmade_entity.cpp: Make UpdateAndRenderEntities() correctly compute CameraRelativeGroundZ, run the game and see our entities restored
1:21:48handmade_entity.cpp: Make UpdateAndRenderEntities() correctly compute CameraRelativeGroundZ, run the game and see our entities restored
1:21:48handmade_entity.cpp: Make UpdateAndRenderEntities() correctly compute CameraRelativeGroundZ, run the game and see our entities restored
1:24:06handmade_world_mode.cpp: Make AddStandardRoom() create an entity_collision_volume_group RoomCollision
1:24:06handmade_world_mode.cpp: Make AddStandardRoom() create an entity_collision_volume_group RoomCollision
1:24:06handmade_world_mode.cpp: Make AddStandardRoom() create an entity_collision_volume_group RoomCollision
1:26:55handmade_world_mode.cpp: #define TileSideInMeters
1:26:55handmade_world_mode.cpp: #define TileSideInMeters
1:26:55handmade_world_mode.cpp: #define TileSideInMeters
1:29:41Run the game and see that the bound properly encompasses the room
1:29:41Run the game and see that the bound properly encompasses the room
1:29:41Run the game and see that the bound properly encompasses the room
1:31:19handmade_sim_region.cpp: Enable UpdateCameraForEntityMovement() to set the Camera->Offset differently
1:31:19handmade_sim_region.cpp: Enable UpdateCameraForEntityMovement() to set the Camera->Offset differently
1:31:19handmade_sim_region.cpp: Enable UpdateCameraForEntityMovement() to set the Camera->Offset differently
1:34:23Run the game and consider camera centering
1:34:23Run the game and consider camera centering
1:34:23Run the game and consider camera centering
1:37:26handmade_sim_region.cpp: Add assertion in UpdateCameraForEntityMovement() that we are InRoom, run the game and do not hit that assertion
1:37:26handmade_sim_region.cpp: Add assertion in UpdateCameraForEntityMovement() that we are InRoom, run the game and do not hit that assertion
1:37:26handmade_sim_region.cpp: Add assertion in UpdateCameraForEntityMovement() that we are InRoom, run the game and do not hit that assertion
1:40:23handmade_sim_region.cpp: Consider the impact of the changeover coinciding with the time the sim region moves between blocks
1:40:23handmade_sim_region.cpp: Consider the impact of the changeover coinciding with the time the sim region moves between blocks
1:40:23handmade_sim_region.cpp: Consider the impact of the changeover coinciding with the time the sim region moves between blocks
1:44:18handmade_sim_region.cpp: Prevent UpdateCameraForEntityMovement() from setting the Offset, run the game and crash in the debug system
1:44:18handmade_sim_region.cpp: Prevent UpdateCameraForEntityMovement() from setting the Offset, run the game and crash in the debug system
1:44:18handmade_sim_region.cpp: Prevent UpdateCameraForEntityMovement() from setting the Offset, run the game and crash in the debug system
1:45:31handmade_debug.cpp: Look at GetElementFromEvent()
1:45:31handmade_debug.cpp: Look at GetElementFromEvent()
1:45:31handmade_debug.cpp: Look at GetElementFromEvent()
1:47:06handmade_sim_region.cpp: Document the assumption that the camera center be the sim region center
1:47:06handmade_sim_region.cpp: Document the assumption that the camera center be the sim region center
1:47:06handmade_sim_region.cpp: Document the assumption that the camera center be the sim region center
1:47:58Run the game and consider the camera displacement
1:47:58Run the game and consider the camera displacement
1:47:58Run the game and consider the camera displacement
1:52:39handmade_world_mode.cpp: Make UpdateAndRenderWorld() draw a rectangle around the sim region, run the game and find that it is not lined up with the room
1:52:39handmade_world_mode.cpp: Make UpdateAndRenderWorld() draw a rectangle around the sim region, run the game and find that it is not lined up with the room
1:52:39handmade_world_mode.cpp: Make UpdateAndRenderWorld() draw a rectangle around the sim region, run the game and find that it is not lined up with the room
1:57:01Step through BeginWorldChange() and inspect the SimRegion dimensions
1:57:01Step through BeginWorldChange() and inspect the SimRegion dimensions
1:57:01Step through BeginWorldChange() and inspect the SimRegion dimensions
1:58:11Step through UpdateCameraForEntityMovement() and inspect the room entity's P
1:58:11Step through UpdateCameraForEntityMovement() and inspect the room entity's P
1:58:11Step through UpdateCameraForEntityMovement() and inspect the room entity's P
1:59:29handmade_world_mode.cpp: Make UpdateAndRenderWorld() reduce the Z offset for the debug rectangles
1:59:29handmade_world_mode.cpp: Make UpdateAndRenderWorld() reduce the Z offset for the debug rectangles
1:59:29handmade_world_mode.cpp: Make UpdateAndRenderWorld() reduce the Z offset for the debug rectangles
2:00:42handmade_render_group.cpp: Consider the possibility that GetRenderEntityBasisP() is computing a bogus HeightOffFloor
2:00:42handmade_render_group.cpp: Consider the possibility that GetRenderEntityBasisP() is computing a bogus HeightOffFloor
2:00:42handmade_render_group.cpp: Consider the possibility that GetRenderEntityBasisP() is computing a bogus HeightOffFloor
2:01:37Q&A
🗩
2:01:37Q&A
🗩
2:01:37Q&A
🗩
2:02:19Kknewkles Hi! For how long is this bliss of weekend episodes gonna continue? Got any news in the making for us?
🗪
2:02:19Kknewkles Hi! For how long is this bliss of weekend episodes gonna continue? Got any news in the making for us?
🗪
2:02:19Kknewkles Hi! For how long is this bliss of weekend episodes gonna continue? Got any news in the making for us?
🗪
2:03:51Kknewkles You didn't answer about the news, though
🗪
2:03:51Kknewkles You didn't answer about the news, though
🗪
2:03:51Kknewkles You didn't answer about the news, though
🗪
2:04:19klemensbaum Q: A bit off-topic, but why do you use your headphone mic rather than the nice studio mic you have on the Jeff and Casey show?
🗪
2:04:19klemensbaum Q: A bit off-topic, but why do you use your headphone mic rather than the nice studio mic you have on the Jeff and Casey show?
🗪
2:04:19klemensbaum Q: A bit off-topic, but why do you use your headphone mic rather than the nice studio mic you have on the Jeff and Casey show?
🗪
2:05:28zilarrezko The camera doesn't seem to be centered perfectly. Working as intended?
🗪
2:05:28zilarrezko The camera doesn't seem to be centered perfectly. Working as intended?
🗪
2:05:28zilarrezko The camera doesn't seem to be centered perfectly. Working as intended?
🗪
2:05:46mtsmox Could you disable the Y displacement to test your theory?
🗪
2:05:46mtsmox Could you disable the Y displacement to test your theory?
🗪
2:05:46mtsmox Could you disable the Y displacement to test your theory?
🗪
2:06:42krrsplat Started following the series on YouTube, and have made it to episode 14. Loving it so far. When I try to build solution in VS, I am unable to do so unless I put the #defines and typedefs into every file. Is this a VS thing or am I doing it wrong? Sorry for going way back5
🗪
2:06:42krrsplat Started following the series on YouTube, and have made it to episode 14. Loving it so far. When I try to build solution in VS, I am unable to do so unless I put the #defines and typedefs into every file. Is this a VS thing or am I doing it wrong? Sorry for going way back5
🗪
2:06:42krrsplat Started following the series on YouTube, and have made it to episode 14. Loving it so far. When I try to build solution in VS, I am unable to do so unless I put the #defines and typedefs into every file. Is this a VS thing or am I doing it wrong? Sorry for going way back5
🗪
2:13:10Promote Handmade.Network and the new "Submit a Project" functionality6
📖
2:13:10Promote Handmade.Network and the new "Submit a Project" functionality6
📖
2:13:10Promote Handmade.Network and the new "Submit a Project" functionality6
📖
2:21:06That's it for today
🗩
2:21:06That's it for today
🗩
2:21:06That's it for today
🗩