Adjusting Sprite Cards to Counter Projection
?
?

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:02Recap and set the stage for the day
0:02Recap and set the stage for the day
0:02Recap and set the stage for the day
1:07handmade_math.h: Make PerspectiveProjection() set the near clip plane to a positive value and perform some test multiplications
1:07handmade_math.h: Make PerspectiveProjection() set the near clip plane to a positive value and perform some test multiplications
1:07handmade_math.h: Make PerspectiveProjection() set the near clip plane to a positive value and perform some test multiplications
3:58Step into PerspectiveProjection() and inspect Test0 and Test1
3:58Step into PerspectiveProjection() and inspect Test0 and Test1
3:58Step into PerspectiveProjection() and inspect Test0 and Test1
6:42Blackboard: Check our clip plane equations
6:42Blackboard: Check our clip plane equations
6:42Blackboard: Check our clip plane equations
12:29handmade_math.h: Swap the perspective and non-perspective code in PerspectiveProjection(), step into it and inspect Test0 and Test1 again
12:29handmade_math.h: Swap the perspective and non-perspective code in PerspectiveProjection(), step into it and inspect Test0 and Test1 again
12:29handmade_math.h: Swap the perspective and non-perspective code in PerspectiveProjection(), step into it and inspect Test0 and Test1 again
16:42Blackboard: Solving for d and e
16:42Blackboard: Solving for d and e
16:42Blackboard: Solving for d and e
22:04handmade_math.h: Make PerspectiveProjection() compute Test0 and Test1 using negated n and f, step into it and inspect them again
22:04handmade_math.h: Make PerspectiveProjection() compute Test0 and Test1 using negated n and f, step into it and inspect them again
22:04handmade_math.h: Make PerspectiveProjection() compute Test0 and Test1 using negated n and f, step into it and inspect them again
23:37handmade_math.h: Switch PerspectiveProjection() to use the perspective correct equation, step in and inspect the Test0 and Test1
23:37handmade_math.h: Switch PerspectiveProjection() to use the perspective correct equation, step in and inspect the Test0 and Test1
23:37handmade_math.h: Switch PerspectiveProjection() to use the perspective correct equation, step in and inspect the Test0 and Test1
24:42Blackboard: Checking the math for the perspective correct terms
24:42Blackboard: Checking the math for the perspective correct terms
24:42Blackboard: Checking the math for the perspective correct terms
33:32handmade_math.h: Simplify the d term for the perspective correct equation
33:32handmade_math.h: Simplify the d term for the perspective correct equation
33:32handmade_math.h: Simplify the d term for the perspective correct equation
34:43Blackboard: Solving for d and e in the perspective correct clip plane equations
34:43Blackboard: Solving for d and e in the perspective correct clip plane equations
34:43Blackboard: Solving for d and e in the perspective correct clip plane equations
38:51handmade_platform.h: Rename w to __ in the v3 union
38:51handmade_platform.h: Rename w to __ in the v3 union
38:51handmade_platform.h: Rename w to __ in the v3 union
40:48Step into PerspectiveProjection() and inspect Test0 and Test1
40:48Step into PerspectiveProjection() and inspect Test0 and Test1
40:48Step into PerspectiveProjection() and inspect Test0 and Test1
42:06Run the game to see that we're back in business
42:06Run the game to see that we're back in business
42:06Run the game to see that we're back in business
43:30handmade_render_group.cpp: Make PushBitmap() tilt upright sprites and run the game
43:30handmade_render_group.cpp: Make PushBitmap() tilt upright sprites and run the game
43:30handmade_render_group.cpp: Make PushBitmap() tilt upright sprites and run the game
44:40Reflect on our unwitting correctness
44:40Reflect on our unwitting correctness
44:40Reflect on our unwitting correctness
47:27Blackboard: Sprite Cards
47:27Blackboard: Sprite Cards
47:27Blackboard: Sprite Cards
51:24Run the game to demo the squatness of the trees
51:24Run the game to demo the squatness of the trees
51:24Run the game to demo the squatness of the trees
53:41Blackboard: Producing the sprites' depth and height using the camera's relative position
53:41Blackboard: Producing the sprites' depth and height using the camera's relative position
53:41Blackboard: Producing the sprites' depth and height using the camera's relative position
55:18"Watch this point"α
55:18"Watch this point"α
55:18"Watch this point"α
59:14Blackboard: Approaching this problem using ray intersections
59:14Blackboard: Approaching this problem using ray intersections
59:14Blackboard: Approaching this problem using ray intersections
1:03:08Blackboard: Solving for ray intersects ray
1:03:08Blackboard: Solving for ray intersects ray
1:03:08Blackboard: Solving for ray intersects ray
1:09:02Blackboard: Simplifying this down
1:09:02Blackboard: Simplifying this down
1:09:02Blackboard: Simplifying this down
1:12:56Blackboard: Handling the case when the vectors are parallel
1:12:56Blackboard: Handling the case when the vectors are parallel
1:12:56Blackboard: Handling the case when the vectors are parallel
1:20:13Blackboard: Determining the conditions under which this equation is unsolvable
1:20:13Blackboard: Determining the conditions under which this equation is unsolvable
1:20:13Blackboard: Determining the conditions under which this equation is unsolvable
1:23:29handmade_math.h: Introduce RayIntersect2()
1:23:29handmade_math.h: Introduce RayIntersect2()
1:23:29handmade_math.h: Introduce RayIntersect2()
1:27:01Blackboard: Producing a ta that goes with the same denominator
1:27:01Blackboard: Producing a ta that goes with the same denominator
1:27:01Blackboard: Producing a ta that goes with the same denominator
1:39:43handmade_math.h: Make RayIntersect2() compute ta and tb using the same denominator
1:39:43handmade_math.h: Make RayIntersect2() compute ta and tb using the same denominator
1:39:43handmade_math.h: Make RayIntersect2() compute ta and tb using the same denominator
1:43:21Try to solve our equations using an online tool
1:43:21Try to solve our equations using an online tool
1:43:21Try to solve our equations using an online tool
1:48:07handmade_render_group.cpp: Make PushBitmap() compute and call RayIntersect2() on the camera and card positions
1:48:07handmade_render_group.cpp: Make PushBitmap() compute and call RayIntersect2() on the camera and card positions
1:48:07handmade_render_group.cpp: Make PushBitmap() compute and call RayIntersect2() on the camera and card positions
1:54:22handmade_render_group.h: Add CameraP, CameraX, CameraY and CameraZ to the render_group struct
1:54:22handmade_render_group.h: Add CameraP, CameraX, CameraY and CameraZ to the render_group struct
1:54:22handmade_render_group.h: Add CameraP, CameraX, CameraY and CameraZ to the render_group struct
1:57:56handmade_render_group.cpp: Make SetCameraTransform() take the Camera position values
1:57:56handmade_render_group.cpp: Make SetCameraTransform() take the Camera position values
1:57:56handmade_render_group.cpp: Make SetCameraTransform() take the Camera position values
2:01:17Run the game to see that it is not nearly as messed up as expected
2:01:17Run the game to see that it is not nearly as messed up as expected
2:01:17Run the game to see that it is not nearly as messed up as expected
2:02:07Q&A
🗩
2:02:07Q&A
🗩
2:02:07Q&A
🗩
2:03:09quikligames There was a lot of chat about Wolfram expecting 1-letter variable names and interpreting rbx as r * b * x
🗪
2:03:09quikligames There was a lot of chat about Wolfram expecting 1-letter variable names and interpreting rbx as r * b * x
🗪
2:03:09quikligames There was a lot of chat about Wolfram expecting 1-letter variable names and interpreting rbx as r * b * x
🗪
2:03:23billdstrong Didn't we do this math when doing the screen projection?
🗪
2:03:23billdstrong Didn't we do this math when doing the screen projection?
🗪
2:03:23billdstrong Didn't we do this math when doing the screen projection?
🗪
2:04:12Miblo Do you think we needed an epilepsy warning there?
🗪
2:04:12Miblo Do you think we needed an epilepsy warning there?
🗪
2:04:12Miblo Do you think we needed an epilepsy warning there?
🗪
2:04:44pepevel Hello, yesterday I was asking about shaders and the z-buffer. Could I rephrase the question? It will be the last time
🗪
2:04:44pepevel Hello, yesterday I was asking about shaders and the z-buffer. Could I rephrase the question? It will be the last time
🗪
2:04:44pepevel Hello, yesterday I was asking about shaders and the z-buffer. Could I rephrase the question? It will be the last time
🗪
2:05:00macielda Maybe if you swap the order of the sum on 'tb = ...' you get an equation more similar to 'ta = ...'?
🗪
2:05:00macielda Maybe if you swap the order of the sum on 'tb = ...' you get an equation more similar to 'ta = ...'?
🗪
2:05:00macielda Maybe if you swap the order of the sum on 'tb = ...' you get an equation more similar to 'ta = ...'?
🗪
2:05:26handmade_math.h: Try swapping the order of the sum in RayIntersect2()
2:05:26handmade_math.h: Try swapping the order of the sum in RayIntersect2()
2:05:26handmade_math.h: Try swapping the order of the sum in RayIntersect2()
2:06:03vaualbus Can you show again the equation?
🗪
2:06:03vaualbus Can you show again the equation?
🗪
2:06:03vaualbus Can you show again the equation?
🗪
2:07:11zennmystic Is the stream weekends only now or is it temp thing?
🗪
2:07:11zennmystic Is the stream weekends only now or is it temp thing?
🗪
2:07:11zennmystic Is the stream weekends only now or is it temp thing?
🗪
2:07:31insobot 1935 is Molly Rocket's upcoming volitional fiction game, set in the criminal underworld of New York City in the 1930s1
🗪
2:07:31insobot 1935 is Molly Rocket's upcoming volitional fiction game, set in the criminal underworld of New York City in the 1930s1
🗪
2:07:31insobot 1935 is Molly Rocket's upcoming volitional fiction game, set in the criminal underworld of New York City in the 1930s1
🗪
2:07:37pepevel As Handmade Hero is a 2D game, my idea would be to treat the z variable not as the z coordinate but as a variable that the pixel shader will use to kill hidden pixels and do alpha blending with the GPU power
🗪
2:07:37pepevel As Handmade Hero is a 2D game, my idea would be to treat the z variable not as the z coordinate but as a variable that the pixel shader will use to kill hidden pixels and do alpha blending with the GPU power
🗪
2:07:37pepevel As Handmade Hero is a 2D game, my idea would be to treat the z variable not as the z coordinate but as a variable that the pixel shader will use to kill hidden pixels and do alpha blending with the GPU power
🗪
2:10:28macielda Are you doing this so you can mix perspective projection and orthographic projection for game objects?
🗪
2:10:28macielda Are you doing this so you can mix perspective projection and orthographic projection for game objects?
🗪
2:10:28macielda Are you doing this so you can mix perspective projection and orthographic projection for game objects?
🗪
2:11:31rooctag Now we have the alpha issue with the 3D stuff, is this easier to fix than the 2D sort because you already know how to fix that?
🗪
2:11:31rooctag Now we have the alpha issue with the 3D stuff, is this easier to fix than the 2D sort because you already know how to fix that?
🗪
2:11:31rooctag Now we have the alpha issue with the 3D stuff, is this easier to fix than the 2D sort because you already know how to fix that?
🗪
2:13:32vaualbus This could be the solutiun at least for Matlab: [ta = -(Pax*rby - Pay*rbx - Pbx*rby + Pby*rbx)/(rax*rby - ray*rbx), tb = -(Pax*ray - Pay*rax - Pbx*ray + Pby*rax)/(rax*rby - ray*rbx)]
🗪
2:13:32vaualbus This could be the solutiun at least for Matlab: [ta = -(Pax*rby - Pay*rbx - Pbx*rby + Pby*rbx)/(rax*rby - ray*rbx), tb = -(Pax*ray - Pay*rax - Pbx*ray + Pby*rax)/(rax*rby - ray*rbx)]
🗪
2:13:32vaualbus This could be the solutiun at least for Matlab: [ta = -(Pax*rby - Pay*rbx - Pbx*rby + Pby*rbx)/(rax*rby - ray*rbx), tb = -(Pax*ray - Pay*rax - Pbx*ray + Pby*rax)/(rax*rby - ray*rbx)]
🗪
2:17:57handmade_render_group.cpp: Make PushBitmap() use CardRyz to set the YAxis
2:17:57handmade_render_group.cpp: Make PushBitmap() use CardRyz to set the YAxis
2:17:57handmade_render_group.cpp: Make PushBitmap() use CardRyz to set the YAxis
2:18:24Run the game to see that we're surprisingly good
2:18:24Run the game to see that we're surprisingly good
2:18:24Run the game to see that we're surprisingly good
2:20:01macielda It seems like vaualbus' solution is negated in relation to yours
🗪
2:20:01macielda It seems like vaualbus' solution is negated in relation to yours
🗪
2:20:01macielda It seems like vaualbus' solution is negated in relation to yours
🗪
2:23:14handmade_render_group.cpp: Enable PushBitmap() to produce a standard sprite card and run the game to see that
2:23:14handmade_render_group.cpp: Enable PushBitmap() to produce a standard sprite card and run the game to see that
2:23:14handmade_render_group.cpp: Enable PushBitmap() to produce a standard sprite card and run the game to see that
2:25:14handmade_opengl.cpp: Temporarily make OpenGLRenderCommands() clip out all transparent pixels, and run the game
2:25:14handmade_opengl.cpp: Temporarily make OpenGLRenderCommands() clip out all transparent pixels, and run the game
2:25:14handmade_opengl.cpp: Temporarily make OpenGLRenderCommands() clip out all transparent pixels, and run the game
2:27:47Consider addressing transparency in the sort, and close it down
🗩
2:27:47Consider addressing transparency in the sort, and close it down
🗩
2:27:47Consider addressing transparency in the sort, and close it down
🗩