Because each applet takes some time to run, I've placed instances of the applets with different models on different pages.
In addition to the refraction and completing the triangle mesh, I added cylinder and disc primitives.
Ray - Triangle Intersection (Triangle.java)
based on Tomas Möller and Ben Trumbore. Fast, minimum storage ray-triangle
intersection. Journal of graphics tools, 2(1):21-28, 1997, see here
also explained well here
Ray - Cylinder Intersection (Cylinder.java)
based on the infinte cylinder intersection provided in Joseph M. Cychosz
and Warren N. Waggenspack, Jr., Intersecting a Ray with a Cylinder, Graphics
Gems IV, pp. 356-365, with sample C code available here
Ray - Plane Intersection (Disc.java)
based on May
2001 Algorithm