Using freeglut inside visual studio c++, create a 3D model with multiples of it at different positions with a ground and 3 walls. Please code in c++ a complete source file that can do these things: Local Illumination and Shading generate several 3D objects at different positions with a ground and three walls, extend the system to support the following features: Support for several light sources. Interactively turn lights on and off. Support flat/gouraud shading models. interactive change the (RGBA) values associated with the global ambient light. interactive change the (RGBA) values associated with the specular material properties of the objects. Global Illumination with Ray Tracing To facilitate global illumination, you need to consider the interactions among all the objects and lights attenuated along ray distance to enable shadows and reflections. You can demo a low resolution ray tracing image if your hardware resource is limited. Shadows. Is there an object between the surface position and the light? If so, a shadow should be generated. You need to define a function to compute these shadow rays. Reflections. Set some cows material to be reflective. If material is set to be reflective, you need to define a recursive function to traverse a ray from the camera to the surface position to find the color of light, and continue this process until the maximum number of recursions or the maximum distance of the ray path is reached..