-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Jungkwuen An edited this page Aug 31, 2022
·
22 revisions
- init rays
- init objects
- run ray-tracing
- display objects
- display ray paths
function ray_tracing()
for each #ray in #ray_bundle
[#reflect_ray,#refract_ray,#terminated] = find_next_ray(#ray)
unless (#terminated)
#ray_bundle.add_rays(#reflect_ray)
#ray_bundle.add_rays(#refract_ray)
end
end
function find_next_ray(#ray)
#terminated = true
for each #optics in #optics_list
for each #surface in #optics
[#distance, #missed] = hit_test(#ray, #surface)
unless (#missed)
#candidate.add([#surface, #distance])
#terminated = false
end
end
end
#closest_surface = find_shortest(#candidate)
#reflect_ray = do_reflect(#ray, #closest_surface)
#refract_ray = do_refract(#ray, #closest_surface)
return [#reflect_ray ,#reflect_ray, #terminated]
[#normal_vector] = get_normal(#hit_position, #surface)
#reflect_ray = refract(#ray, #normal_vector)
- Calculating a surface normal https://en.wikipedia.org/wiki/Normal_(geometry)
- Optics Book - https://users.physics.ox.ac.uk/~ewart/Optics%20Lectures%202007.pdf