The Ferris Wheel is the centerpiece of my amusement park and took the most time to model and animate. I started its model with one of the red cars as a PROTO. I first took a cylinder without the top and bottom as the lower side walls of the car, and a similar cylinder side as the top side wall. I then added a flattened sphere to both the top and bottom to make a rounded car. I then used another cylinder with just the top to make a floor for the car, so the passengers can stand on a flat surface instead of the rounded top of the sphere. Since no one stands on the ceiling, another cylinder was not required there. Finally, I made a PROTO for an individual bar to put in the gap between the top and bottom walls, and then made a series of these bars to make a viewing windows in each car. Finally, I added a support bar/axle thru the center of the ceiling to attach to the rest of the wheel. This is also the axis about which the car will rotate and its center is at location (0,0,0) in the local coordinate system. The big problem that I have at this stage is that when I use the side of the cylinder for a wall, it has no thickness and it is only visible from the outside. The latter is a bigger problem since it means that when you are sitting inside the car, you cannot see the walls at all. As for possible alternatives to this method, one possibility is to make the sphere solid, however then no rider can sit inside it at all. Also, I cannot make a cylinder wall with thickness since there is no way to make one cylinder and then subtract another from it (and still have it be solid) or anything like that. The only other option is to use an extrusion or indexed face set. The first of these requires modeling concentric circles which I could not figure out, and the latter would not make a smoothly rounded cylinder, so the cylinder primative is still the best available option and provides for the fastest rendering times.
The next step was to add supports to the car to make up the wheel part. For each car, this consists of a long support radially from the car to the center of the wheel, and a forward support to make up the circumference of the wheel. Both of these were needed on either side of the car. This support structure, along with the car itself, makeup another PROTO.
Next, I made a PROTO for the entire ferris wheel. This consists of 24 cars with supports, distributed evenly around the wheel. The angles and lengths of the forward supports I calculated mathematically so that they would line up with the other cars. Also, I had to set the length of the radial segments so that there would be enough room between cars so they could rotate freely. Also, at this level, a few more details of the supports are necessary. These include an axle at the center of the wheel, cylinders as bearings holding this axle (also acting as a cover plate), and 4 supports to the ground to hold up the structure. This proto also takes an eventIn of the rotation of the ferris wheel. This allows for the wheel to be animated. A key issue at this stage was that as the wheel turned, the cars had to counter-rotate so they would always be level with the ground, to simulate the effect of gravity. The easiest way to do this (that also demonstrates the various features of vrml) was to use Javascript. The incoming angle value had a direction of -1 0 0, while I had to add the angle in the 1 0 0 direction. To make this switch, I used javascript to take in the wheel rotation and output a car rotation which takes into account the wheel rotation and the offset of the individual car.
Finally, the ferris wheel includes one more PROTO for the platform that allows people to get on and off of the ride. I tried to model it as closely as possible to a real ferris wheel. Therefore there are angled platforms to make it easier to get in and out of the cars. I have also added stairs to the upper platform and a ramp to get to the ground. Finally all of this has been duplicated on the back side to serve as an exit. Parts of the platform extend below ground level. The reasoning for this is that often when a real platform is build, a foundation will be put in below ground to help support the structure.
I have also setup an animation of the ferris wheel as a ride. It starts with a 30 second loading time for the passengers to get in. Then it accellerates slowly until it gets to full speeds. After 3 times around, it slows down and then stops and repeats the ride. The entire ride is 371.25 seconds, and I calculated all the time intervals using windows calculator for precise results for a smooth animation.
I have setup multiple viewpoints in and around the ferris wheel. The first is far away from the ferris wheel, labeled "Ground" which lets you see the entire wheel and most of the platform. Next is one in front of the platform but closer. Next is one right on the loading platform to get on a car. Finally, I have setup a viewpoint from within each car for a good view.
To make the experience interactive, in addition to manually switching between viewpoints, I have added a proximity sensor to each of the cars. Once the user moves to within the car, they will be captured and can take a ride on the ferris wheel.
For faster rendering, I have added level of detail to the cars, since they have so many bars and rounded parts. Once the user is far away (150 meters), the detailed cars will be replaced with a set of 3 cylinders. I have chosen this distance since at the time of the switch, both versions look about the same and the loss of detail is acceptable.
For more realizm, I have taken two steps. First, I added 3D sound via a speaker on the platform. It plays music typical of an amusement park and the volume fades over distance. As one would experience on a real ferris wheel, the music is loud when your car is near the platform, but when you get near the top of the wheel, the music is barely audible. Secondly, I added textures to many of the objects, including a cement texture to the platform, aluminum for the supports, and grass for the ground. i have also included trees on billboard nodes to simulate a more wooded environment.
I have designed this scene to be used as an external proto. This way the ferris wheel amusement park could be incorporated into a larger amusement park. However, for this project, I have decided to include the instanciation of the Ferris Wheel, and the other objects (ground, trees, animation commands, sky, etc) in the same file for simplicity. The ground could also be left in, as if on top of another "ground" platform to be placed into another world.
Overall, the biggest problem that I've had has been alignment. The ferris wheel, supports, and platform all have many parts that must connect and line up correctly. Each of these alignments took a good deal of work, either through mathematical calculations or through actual placement. For example, lining up the outer supports to connect and make a complete circular wheel, or the calculations for the timing of the ride to provide smooth, seamless acceleration of the wheel throughout the ride.