||A new algorithm for ray tracing surfaces of revolution is presented. The objective is to improve the computation cost and data structure during the intersection determination between a ray and a surface of revolution. As a preprocessing step, a surface of revolution is subdivided into a series of simple primitives. We experimented our method with two subdivision schemes. In the first subdivision scheme, a surface of revolution is approximated by bounded cones. The offset curve of a surface of revolution is subdivided into linear segments. A series of bounded cones is produced by revolving these linear segments around the axis of rotation. The second subdivision scheme uses revolute quadric surfaces to reconstruct a surface of revolution. The offset curve is approximated by connected conic sections. These conic sections are converted to a series of coaxial revolute quadric surfaces by revolving the conic sections around the axis of rotation. After a surface of revolution is subdivided into bounded cones or revolute quadric surfaces, a binary bounding volume tree structure is built and used for finding the intersection between a ray and the surface of revolution. Calculating the intersection of a ray and a surface of revolution is then reduced to a simple tree searching routine with the data structure. Further reduction of the processing time can be achieved by using range searching and adaptive bounding volumes for the surfaces.