Implementing GPU-based ray tracing
To this point, all of the recipes rendered 3D geometry using rasterization. In this recipe, we will implement another method for rendering geometry, which is called ray tracing. Simply put, ray tracing uses a probing ray from the camera position into the graphical scene. The intersections of this ray are obtained for each geometry. The good thing with this method is that only the visible objects are rendered.
The ray tracing algorithm can be given in pseudocode as follows:
For each pixel on screen Get the eye ray origin and direction using camera position For the amount of traces required Cast the ray into scene For each object in the scene Check eye ray for intersection If intersection found Determine the hit point and surface normal For each light source Calculate diffuse and specular comp. at hit point Cast shadow ray from hit point to light End For Darken diffuse component...