Making a Simple Raycaster
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
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 and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

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)
Welcome to Handmade Ray
0:05Welcome to the stream, with a few words on the new computers
0:05Welcome to the stream, with a few words on the new computers
0:05Welcome to the stream, with a few words on the new computers
4:09Embark on making a ray tracer, starting with a directory and build.bat
4:09Embark on making a ray tracer, starting with a directory and build.bat
4:09Embark on making a ray tracer, starting with a directory and build.bat
6:17ray.cpp: Implement Hello World!
6:17ray.cpp: Implement Hello World!
6:17ray.cpp: Implement Hello World!
7:42Build and run successfully
7:42Build and run successfully
7:42Build and run successfully
8:01Ray tracer
8:01Ray tracer
8:01Ray tracer
9:40ray.cpp: Introduce struct bitmap_header and a bitmap writer
9:40ray.cpp: Introduce struct bitmap_header and a bitmap writer
9:40ray.cpp: Introduce struct bitmap_header and a bitmap writer
13:22A few words on malloc()
13:22A few words on malloc()
13:22A few words on malloc()
14:51ray.cpp: Write colour values into memory, with a few words on our representation of this memory
14:51ray.cpp: Write colour values into memory, with a few words on our representation of this memory
14:51ray.cpp: Write colour values into memory, with a few words on our representation of this memory
18:35ray.cpp: Initialise a bitmap Header
18:35ray.cpp: Initialise a bitmap Header
18:35ray.cpp: Initialise a bitmap Header
23:18ray.cpp: Write to a file using fwrite()1
23:18ray.cpp: Write to a file using fwrite()1
23:18ray.cpp: Write to a file using fwrite()1
29:43ray.cpp: typedef our types
29:43ray.cpp: typedef our types
29:43ray.cpp: typedef our types
31:17Step through the code and try unsuccessfully to read our bitmap image
31:17Step through the code and try unsuccessfully to read our bitmap image
31:17Step through the code and try unsuccessfully to read our bitmap image
32:58ray.cpp: Fill in the bitmap Header2
32:58ray.cpp: Fill in the bitmap Header2
32:58ray.cpp: Fill in the bitmap Header2
37:39Run successfully, but receive find that our file is not well-formed
37:39Run successfully, but receive find that our file is not well-formed
37:39Run successfully, but receive find that our file is not well-formed
38:18Step through the code and inspect our header
38:18Step through the code and inspect our header
38:18Step through the code and inspect our header
38:49Draw a picture and save it out as a BMP file
38:49Draw a picture and save it out as a BMP file
38:49Draw a picture and save it out as a BMP file
39:45ray.cpp: Load reference.bmp
39:45ray.cpp: Load reference.bmp
39:45ray.cpp: Load reference.bmp
40:23Step through and inspect the header of the well-formed reference.bmp
40:23Step through and inspect the header of the well-formed reference.bmp
40:23Step through and inspect the header of the well-formed reference.bmp
42:02ray.cpp: Fix up our header to be closer to the well-formed file3
42:02ray.cpp: Fix up our header to be closer to the well-formed file3
42:02ray.cpp: Fix up our header to be closer to the well-formed file3
44:29Run and successfully read our bitmap file
44:29Run and successfully read our bitmap file
44:29Run and successfully read our bitmap file
45:09ray.cpp: Write to all pixels in the image, and succesfully view it
45:09ray.cpp: Write to all pixels in the image, and succesfully view it
45:09ray.cpp: Write to all pixels in the image, and succesfully view it
45:24ray.cpp: Add a red band to the image, to emphasise its directionality
45:24ray.cpp: Add a red band to the image, to emphasise its directionality
45:24ray.cpp: Add a red band to the image, to emphasise its directionality
45:52Run and view our image
45:52Run and view our image
45:52Run and view our image
46:30ray.cpp: Flip the sign of the Header.Height to draw the image from top to bottom
46:30ray.cpp: Flip the sign of the Header.Height to draw the image from top to bottom
46:30ray.cpp: Flip the sign of the Header.Height to draw the image from top to bottom
47:26ray.cpp: Introduce struct image_32, WriteImage(), GetTotalPixelSize() and AllocateImage()
47:26ray.cpp: Introduce struct image_32, WriteImage(), GetTotalPixelSize() and AllocateImage()
47:26ray.cpp: Introduce struct image_32, WriteImage(), GetTotalPixelSize() and AllocateImage()
53:20Run our program to recreate the bitmap file
53:20Run our program to recreate the bitmap file
53:20Run our program to recreate the bitmap file
54:04Consider the next logical step for our ray tracer
54:04Consider the next logical step for our ray tracer
54:04Consider the next logical step for our ray tracer
55:11ray.h: Pull out our types from ray.cpp and introduce structs material, plane, sphere and world
55:11ray.h: Pull out our types from ray.cpp and introduce structs material, plane, sphere and world
55:11ray.h: Pull out our types from ray.cpp and introduce structs material, plane, sphere and world
1:00:15ray.cpp: Initialise a world and two materials
1:00:15ray.cpp: Initialise a world and two materials
1:00:15ray.cpp: Initialise a world and two materials
1:03:19ray_math.h: Pull in structs v2, v3 and v4 from handmade_platform.h, and various functions from handmade_math.h
1:03:19ray_math.h: Pull in structs v2, v3 and v4 from handmade_platform.h, and various functions from handmade_math.h
1:03:19ray_math.h: Pull in structs v2, v3 and v4 from handmade_platform.h, and various functions from handmade_math.h
1:09:58ray.cpp: Determine to initialise a plane
1:09:58ray.cpp: Determine to initialise a plane
1:09:58ray.cpp: Determine to initialise a plane
1:10:51Blackboard: Defining planes, using the inner product
1:10:51Blackboard: Defining planes, using the inner product
1:10:51Blackboard: Defining planes, using the inner product
1:15:03ray.cpp: Define a plane
1:15:03ray.cpp: Define a plane
1:15:03ray.cpp: Define a plane
1:15:29ray.cpp: Introduce the notion of a camera
1:15:29ray.cpp: Introduce the notion of a camera
1:15:29ray.cpp: Introduce the notion of a camera
1:17:51Blackboard: Camera axis coordinate system
1:17:51Blackboard: Camera axis coordinate system
1:17:51Blackboard: Camera axis coordinate system
1:18:57ray.cpp: Continue to define the camera
1:18:57ray.cpp: Continue to define the camera
1:18:57ray.cpp: Continue to define the camera
1:21:35Step through and inspect the camera values
1:21:35Step through and inspect the camera values
1:21:35Step through and inspect the camera values
1:23:04ray.cpp: Hard set the CameraZ to 0, 1, 0 and step through to inspect the other axes
1:23:04ray.cpp: Hard set the CameraZ to 0, 1, 0 and step through to inspect the other axes
1:23:04ray.cpp: Hard set the CameraZ to 0, 1, 0 and step through to inspect the other axes
1:24:03Blackboard: 3D coordinate system, following the right-hand rule
1:24:03Blackboard: 3D coordinate system, following the right-hand rule
1:24:03Blackboard: 3D coordinate system, following the right-hand rule
1:27:37ray.cpp: Correctly define the camera axes
1:27:37ray.cpp: Correctly define the camera axes
1:27:37ray.cpp: Correctly define the camera axes
1:28:25Step through and inspect the camera values
1:28:25Step through and inspect the camera values
1:28:25Step through and inspect the camera values
1:28:53Blackboard: Shooting rays through a plane
1:28:53Blackboard: Shooting rays through a plane
1:28:53Blackboard: Shooting rays through a plane
1:30:42ray.cpp: Convert our pixel positions to ratios across a film plane
1:30:42ray.cpp: Convert our pixel positions to ratios across a film plane
1:30:42ray.cpp: Convert our pixel positions to ratios across a film plane
1:34:58ray.cpp: Shoot rays at our film
1:34:58ray.cpp: Shoot rays at our film
1:34:58ray.cpp: Shoot rays at our film
1:37:28ray.cpp: Introduce RayCast(), testing first that it outputs the colours we expect
1:37:28ray.cpp: Introduce RayCast(), testing first that it outputs the colours we expect
1:37:28ray.cpp: Introduce RayCast(), testing first that it outputs the colours we expect
1:40:06Blackboard: Ray hit detection
1:40:06Blackboard: Ray hit detection
1:40:06Blackboard: Ray hit detection
1:41:02ray.cpp: Continue to implement RayCast()
1:41:02ray.cpp: Continue to implement RayCast()
1:41:02ray.cpp: Continue to implement RayCast()
1:44:28Blackboard: Ray intersection
1:44:28Blackboard: Ray intersection
1:44:28Blackboard: Ray intersection
1:48:02ray.cpp: Compute our intersection distance
1:48:02ray.cpp: Compute our intersection distance
1:48:02ray.cpp: Compute our intersection distance
1:48:48Blackboard: Parallel ray and plane
1:48:48Blackboard: Parallel ray and plane
1:48:48Blackboard: Parallel ray and plane
1:49:49ray.cpp: Make RayCast() test the Denominator against our Tolerance value
1:49:49ray.cpp: Make RayCast() test the Denominator against our Tolerance value
1:49:49ray.cpp: Make RayCast() test the Denominator against our Tolerance value
1:50:52build.bat: Automatically open the image after building
1:50:52build.bat: Automatically open the image after building
1:50:52build.bat: Automatically open the image after building
1:52:22Build, see our image and check that we are producing what we expect
1:52:22Build, see our image and check that we are producing what we expect
1:52:22Build, see our image and check that we are producing what we expect
1:54:20Blackboard: Double-check our equations
1:54:20Blackboard: Double-check our equations
1:54:20Blackboard: Double-check our equations
1:56:47ray.cpp: Set one material colour to grey, consider that we are exactly backwards and investigate why
1:56:47ray.cpp: Set one material colour to grey, consider that we are exactly backwards and investigate why
1:56:47ray.cpp: Set one material colour to grey, consider that we are exactly backwards and investigate why
1:59:05Blackboard: Camera coordinates
1:59:05Blackboard: Camera coordinates
1:59:05Blackboard: Camera coordinates
1:59:32Continue to investigate our inversion bug
1:59:32Continue to investigate our inversion bug
1:59:32Continue to investigate our inversion bug
2:03:27Blackboard: Producing camera coordinates
2:03:27Blackboard: Producing camera coordinates
2:03:27Blackboard: Producing camera coordinates
2:04:18ray.cpp: Set CameraX by crossing 0, 0, 1 and CameraZ the other way
2:04:18ray.cpp: Set CameraX by crossing 0, 0, 1 and CameraZ the other way
2:04:18ray.cpp: Set CameraX by crossing 0, 0, 1 and CameraZ the other way
2:05:20View our correct image
2:05:20View our correct image
2:05:20View our correct image
2:05:38ray.cpp: Add a sphere
2:05:38ray.cpp: Add a sphere
2:05:38ray.cpp: Add a sphere
2:08:01ray.cpp: Enable RayCast() to handle spheres
2:08:01ray.cpp: Enable RayCast() to handle spheres
2:08:01ray.cpp: Enable RayCast() to handle spheres
2:08:48Blackboard: Sphere Intersection4
2:08:48Blackboard: Sphere Intersection4
2:08:48Blackboard: Sphere Intersection4
2:16:10ray.cpp: Enable RayCast() to compute the nearest sphere interesection point
2:16:10ray.cpp: Enable RayCast() to compute the nearest sphere interesection point
2:16:10ray.cpp: Enable RayCast() to compute the nearest sphere interesection point
2:23:14Run and view our image
2:23:14Run and view our image
2:23:14Run and view our image
2:23:36Blackboard: Sphere origin
2:23:36Blackboard: Sphere origin
2:23:36Blackboard: Sphere origin
2:24:40ray.cpp: Make RayCast() correctly account for the sphere origin
2:24:40ray.cpp: Make RayCast() correctly account for the sphere origin
2:24:40ray.cpp: Make RayCast() correctly account for the sphere origin
2:27:05ray.cpp: Correctly compute FilmX
2:27:05ray.cpp: Correctly compute FilmX
2:27:05ray.cpp: Correctly compute FilmX
2:27:30ray.cpp: Handle the aspect ratio
2:27:30ray.cpp: Handle the aspect ratio
2:27:30ray.cpp: Handle the aspect ratio
2:30:11Blackboard: Aspect ratio
2:30:11Blackboard: Aspect ratio
2:30:11Blackboard: Aspect ratio
2:30:42View our image in the correct aspect
2:30:42View our image in the correct aspect
2:30:42View our image in the correct aspect
2:31:42ray.cpp: Output stats
2:31:42ray.cpp: Output stats
2:31:42ray.cpp: Output stats
2:32:47Run our program in the console to see our stats
2:32:47Run our program in the console to see our stats
2:32:47Run our program in the console to see our stats
2:34:48ray.cpp: Enable RayCast() to cast multiple rays from different origins
2:34:48ray.cpp: Enable RayCast() to cast multiple rays from different origins
2:34:48ray.cpp: Enable RayCast() to cast multiple rays from different origins
2:45:05ray.h: Change the material struct to contain EmitColor and RefColor
2:45:05ray.h: Change the material struct to contain EmitColor and RefColor
2:45:05ray.h: Change the material struct to contain EmitColor and RefColor
2:46:17ray.cpp: Enable RayCast() to use both of those material colours
2:46:17ray.cpp: Enable RayCast() to use both of those material colours
2:46:17ray.cpp: Enable RayCast() to use both of those material colours
2:47:22Blackboard: Attenuating angles
2:47:22Blackboard: Attenuating angles
2:47:22Blackboard: Attenuating angles
2:48:30ray.cpp: Make RayCast() attenuate ray angles to correctly propagate light back to the camera
2:48:30ray.cpp: Make RayCast() attenuate ray angles to correctly propagate light back to the camera
2:48:30ray.cpp: Make RayCast() attenuate ray angles to correctly propagate light back to the camera
2:51:53View our scene
2:51:53View our scene
2:51:53View our scene
2:53:25Blackboard: Surface reflectance
2:53:25Blackboard: Surface reflectance
2:53:25Blackboard: Surface reflectance
2:56:18ray.h: Add Specular to the material struct
2:56:18ray.h: Add Specular to the material struct
2:56:18ray.h: Add Specular to the material struct
2:56:46Blackboard: Reflecting a vector
2:56:46Blackboard: Reflecting a vector
2:56:46Blackboard: Reflecting a vector
2:57:28ray.cpp: Enable RayCast() to bounce rays randomly (but not unbiased) around the scene, renaming Specular to Scatter
2:57:28ray.cpp: Enable RayCast() to bounce rays randomly (but not unbiased) around the scene, renaming Specular to Scatter
2:57:28ray.cpp: Enable RayCast() to bounce rays randomly (but not unbiased) around the scene, renaming Specular to Scatter
3:01:22ray.cpp: Introduce RandomUnilateral() and RandomBilateral()
3:01:22ray.cpp: Introduce RandomUnilateral() and RandomBilateral()
3:01:22ray.cpp: Introduce RandomUnilateral() and RandomBilateral()
3:03:35View our image, and see black dots around the scene
3:03:35View our image, and see black dots around the scene
3:03:35View our image, and see black dots around the scene
3:04:45ray.cpp: Set RayDirection to PureBounce, and correctly set the NextOrigin
3:04:45ray.cpp: Set RayDirection to PureBounce, and correctly set the NextOrigin
3:04:45ray.cpp: Set RayDirection to PureBounce, and correctly set the NextOrigin
3:06:10View our image, consider that it's not quite right and investigate why
3:06:10View our image, consider that it's not quite right and investigate why
3:06:10View our image, consider that it's not quite right and investigate why
3:07:32ray.cpp: Correctly set PureBounce and NextNormal
3:07:32ray.cpp: Correctly set PureBounce and NextNormal
3:07:32ray.cpp: Correctly set PureBounce and NextNormal
3:09:57View our image and consider that the sphere may be below the plane
3:09:57View our image and consider that the sphere may be below the plane
3:09:57View our image and consider that the sphere may be below the plane
3:12:09ray.cpp: Make RayCast() use the RandomBounce, and view our image
3:12:09ray.cpp: Make RayCast() use the RandomBounce, and view our image
3:12:09ray.cpp: Make RayCast() use the RandomBounce, and view our image
3:13:25ray.cpp: Enable RayCast() to cast multiple rays per pixel
3:13:25ray.cpp: Enable RayCast() to cast multiple rays per pixel
3:13:25ray.cpp: Enable RayCast() to cast multiple rays per pixel
3:14:50Blackboard: Angular attenuation
3:14:50Blackboard: Angular attenuation
3:14:50Blackboard: Angular attenuation
3:15:15ray.cpp: Enable RayCast() to account for cosine attenuation
3:15:15ray.cpp: Enable RayCast() to account for cosine attenuation
3:15:15ray.cpp: Enable RayCast() to account for cosine attenuation
3:17:32View the image, and consider that it's sort of correct
3:17:32View the image, and consider that it's sort of correct
3:17:32View the image, and consider that it's sort of correct
3:17:48ray.cpp: Toggle off the cosine attenuation in RayCast()
3:17:48ray.cpp: Toggle off the cosine attenuation in RayCast()
3:17:48ray.cpp: Toggle off the cosine attenuation in RayCast()
3:18:24ray.cpp: Add more spheres and materials
3:18:24ray.cpp: Add more spheres and materials
3:18:24ray.cpp: Add more spheres and materials
3:21:12View our image, with spheres reflecting light
3:21:12View our image, with spheres reflecting light
3:21:12View our image, with spheres reflecting light
3:22:34ray.cpp: Handle gamma correct sRGB
3:22:34ray.cpp: Handle gamma correct sRGB
3:22:34ray.cpp: Handle gamma correct sRGB
3:23:41View our gamma correct image
3:23:41View our gamma correct image
3:23:41View our gamma correct image
3:24:08ray.cpp: Introduce ExactLinearTosRGB()5
3:24:08ray.cpp: Introduce ExactLinearTosRGB()5
3:24:08ray.cpp: Introduce ExactLinearTosRGB()5
3:28:32ray_math.h: Introduce Pow()
3:28:32ray_math.h: Introduce Pow()
3:28:32ray_math.h: Introduce Pow()
3:28:54View our apparently correct sRGB image
3:28:54View our apparently correct sRGB image
3:28:54View our apparently correct sRGB image
3:29:44ray.cpp: Add a fourth sphere
3:29:44ray.cpp: Add a fourth sphere
3:29:44ray.cpp: Add a fourth sphere
3:30:36View our image
3:30:36View our image
3:30:36View our image
3:31:13ray.cpp: Re-enable RayCast() to perform cosine attenuation, and turn the red sphere into an emitter
3:31:13ray.cpp: Re-enable RayCast() to perform cosine attenuation, and turn the red sphere into an emitter
3:31:13ray.cpp: Re-enable RayCast() to perform cosine attenuation, and turn the red sphere into an emitter
3:32:57View our image and consider further developments
3:32:57View our image and consider further developments
3:32:57View our image and consider further developments
3:34:30ray.cpp: Compute the RayOrigin and RayDirection every time, to facilitate anti-aliasing at higher sampling rates
3:34:30ray.cpp: Compute the RayOrigin and RayDirection every time, to facilitate anti-aliasing at higher sampling rates
3:34:30ray.cpp: Compute the RayOrigin and RayDirection every time, to facilitate anti-aliasing at higher sampling rates
3:35:14View the aliasing where the spheres meet the planes
3:35:14View the aliasing where the spheres meet the planes
3:35:14View the aliasing where the spheres meet the planes
3:35:46ray.cpp: Jitter the ray direction
3:35:46ray.cpp: Jitter the ray direction
3:35:46ray.cpp: Jitter the ray direction
3:37:33View the image with less and less aliasing as the RaysPerPixel increases
3:37:33View the image with less and less aliasing as the RaysPerPixel increases
3:37:33View the image with less and less aliasing as the RaysPerPixel increases
3:38:41Consider optimisations
3:38:41Consider optimisations
3:38:41Consider optimisations
3:39:25Q&A
🗩
3:39:25Q&A
🗩
3:39:25Q&A
🗩
3:39:50mapem_87 Is this series for total beginners in game programming?
🗪
3:39:50mapem_87 Is this series for total beginners in game programming?
🗪
3:39:50mapem_87 Is this series for total beginners in game programming?
🗪
3:40:19Kknewkles Is it possible, or how hard is it, to have a debug system built-into your project that completely eliminates the need for a dedicated side debugger?
🗪
3:40:19Kknewkles Is it possible, or how hard is it, to have a debug system built-into your project that completely eliminates the need for a dedicated side debugger?
🗪
3:40:19Kknewkles Is it possible, or how hard is it, to have a debug system built-into your project that completely eliminates the need for a dedicated side debugger?
🗪
3:40:51macielda Your mic is bouncing on the metal ring on your hood
🗪
3:40:51macielda Your mic is bouncing on the metal ring on your hood
🗪
3:40:51macielda Your mic is bouncing on the metal ring on your hood
🗪
3:41:13byteblind So I just saw an old video where it says "Project will go at least until 2016". How far along towards the end are you?
🗪
3:41:13byteblind So I just saw an old video where it says "Project will go at least until 2016". How far along towards the end are you?
🗪
3:41:13byteblind So I just saw an old video where it says "Project will go at least until 2016". How far along towards the end are you?
🗪
3:42:02drive137 Is this going to be uploaded with the normal Handmade Hero code as well?
🗪
3:42:02drive137 Is this going to be uploaded with the normal Handmade Hero code as well?
🗪
3:42:02drive137 Is this going to be uploaded with the normal Handmade Hero code as well?
🗪
3:42:11bestalloys Bug in the denominator check
🗪
3:42:11bestalloys Bug in the denominator check
🗪
3:42:11bestalloys Bug in the denominator check
🗪
3:42:30ray.cpp: Fix Denom check
3:42:30ray.cpp: Fix Denom check
3:42:30ray.cpp: Fix Denom check
3:43:22bestalloys Shouldn't you initialize your materials so EmitColor and RefColor are initialized?
🗪
3:43:22bestalloys Shouldn't you initialize your materials so EmitColor and RefColor are initialized?
🗪
3:43:22bestalloys Shouldn't you initialize your materials so EmitColor and RefColor are initialized?
🗪
3:43:41desuused Maybe instead of reinventing BRDF (what you call reflectance), use some well-known BRDF, like Disney's? You can look at the implementation of one in e.g. Blender
🗪
3:43:41desuused Maybe instead of reinventing BRDF (what you call reflectance), use some well-known BRDF, like Disney's? You can look at the implementation of one in e.g. Blender
🗪
3:43:41desuused Maybe instead of reinventing BRDF (what you call reflectance), use some well-known BRDF, like Disney's? You can look at the implementation of one in e.g. Blender
🗪
3:44:11genos3 Could we use ray casting to determine a scene in real time that would allow infinite visibility, like with sparse voxel octree as opposed to a rasterizer?
🗪
3:44:11genos3 Could we use ray casting to determine a scene in real time that would allow infinite visibility, like with sparse voxel octree as opposed to a rasterizer?
🗪
3:44:11genos3 Could we use ray casting to determine a scene in real time that would allow infinite visibility, like with sparse voxel octree as opposed to a rasterizer?
🗪
3:45:39Miblo Whatever happened to owlbot?
🗪
3:45:39Miblo Whatever happened to owlbot?
🗪
3:45:39Miblo Whatever happened to owlbot?
🗪
3:45:44siltnamis why not use std::thread?
🗪
3:45:44siltnamis why not use std::thread?
🗪
3:45:44siltnamis why not use std::thread?
🗪
3:45:51pythor Is it just a coincidence that three of the spheres all have their top / bottom line up almost exactly on the horizon? Or is that an artifact of something we're doing?
🗪
3:45:51pythor Is it just a coincidence that three of the spheres all have their top / bottom line up almost exactly on the horizon? Or is that an artifact of something we're doing?
🗪
3:45:51pythor Is it just a coincidence that three of the spheres all have their top / bottom line up almost exactly on the horizon? Or is that an artifact of something we're doing?
🗪
3:46:16sirslani Could you just insert pragma omp on the raycaster loop?
🗪
3:46:16sirslani Could you just insert pragma omp on the raycaster loop?
🗪
3:46:16sirslani Could you just insert pragma omp on the raycaster loop?
🗪
3:46:36flyingsolomon Could you disable windows bells? I hate these sounds
🗪
3:46:36flyingsolomon Could you disable windows bells? I hate these sounds
🗪
3:46:36flyingsolomon Could you disable windows bells? I hate these sounds
🗪
3:47:04macielda The anti-alias has "roping" artifacts. Why?
🗪
3:47:04macielda The anti-alias has "roping" artifacts. Why?
🗪
3:47:04macielda The anti-alias has "roping" artifacts. Why?
🗪
3:48:06View the anti-aliasing of the image in Paint
3:48:06View the anti-aliasing of the image in Paint
3:48:06View the anti-aliasing of the image in Paint
3:49:24bouke285 Will the growing popularity of multi-threading make procedural programming harder?
🗪
3:49:24bouke285 Will the growing popularity of multi-threading make procedural programming harder?
🗪
3:49:24bouke285 Will the growing popularity of multi-threading make procedural programming harder?
🗪
3:50:08bestalloys Can you make one of the spheres a mirror?
🗪
3:50:08bestalloys Can you make one of the spheres a mirror?
🗪
3:50:08bestalloys Can you make one of the spheres a mirror?
🗪
3:50:23ray.cpp: Create a mirror ball
3:50:23ray.cpp: Create a mirror ball
3:50:23ray.cpp: Create a mirror ball
3:52:00bluebooger Is this source code included with $15 for Handmade Hero source?
🗪
3:52:00bluebooger Is this source code included with $15 for Handmade Hero source?
🗪
3:52:00bluebooger Is this source code included with $15 for Handmade Hero source?
🗪
3:52:30hoshoyo Materials[6] should be 7 now
🗪
3:52:30hoshoyo Materials[6] should be 7 now
🗪
3:52:30hoshoyo Materials[6] should be 7 now
🗪
3:53:18sir_pinecone Can you share the question prompter code too? I missed some of the stream and would like to see it
🗪
3:53:18sir_pinecone Can you share the question prompter code too? I missed some of the stream and would like to see it
🗪
3:53:18sir_pinecone Can you share the question prompter code too? I missed some of the stream and would like to see it
🗪
3:53:43genos3 I meant before if we could use traditional ray casting like Wolfenstein used to determine mesh visibility in the distance just using diffuse lighting
🗪
3:53:43genos3 I meant before if we could use traditional ray casting like Wolfenstein used to determine mesh visibility in the distance just using diffuse lighting
🗪
3:53:43genos3 I meant before if we could use traditional ray casting like Wolfenstein used to determine mesh visibility in the distance just using diffuse lighting
🗪
3:54:15View our mirror ball
3:54:15View our mirror ball
3:54:15View our mirror ball
3:54:33That's it, with plans for the future of our raycaster
🗩
3:54:33That's it, with plans for the future of our raycaster
🗩
3:54:33That's it, with plans for the future of our raycaster
🗩
3:58:20Recommend Physically Based Rendering6
📖
3:58:20Recommend Physically Based Rendering6
📖
3:58:20Recommend Physically Based Rendering6
📖
3:59:39Plug Miblo's Patreon7
📖
3:59:39Plug Miblo's Patreon7
📖
3:59:39Plug Miblo's Patreon7
📖