The goal of this assignment is to create a 3D application which can help with the design of a computer science classroom.
Imagine that you have been tasked with designing a classroom with computers on every desk. Write a 3D application which loads the 3D model of the room and displays it at 1:1 scale. This ZIP file contains the room, as well as the furniture needed for this project.
Put the user in the classroom and provide functionality to teleport from one location to another. To teleport, the user points with one of the controllers to a new location on the floor, to which the user is then moved.
Assuming an empty room: allow the user to spawn the following items: desks, chairs, locker cabinets, storage cabinets, and TVs on stands. You don't need to create a menu for this but it can be useful.
Implement two different interaction techniques to select any one of the items in the room and move it to a new location. Allow rotations of the furniture objects. In this course we covered the following interaction techniques: ray casting, two-handed pointing, flashlight, virtual hand, go-go hand, world-in-miniature.
Enforce that furniture cannot intersect with other furniture or the room's walls. It has to sit on the floor once placed, or on top of other furniture (i.e., nothing can float in space and it cannot penetrate the floor).
Create a method to select any number of objects to group them together and highlight them, then allow moving the group as a whole.
Add copy-paste methods for individual furniture objects, as well as groups.
Measurement tool: create a virtual tape measure tool which can measure the distance (in a physical unit like inches or centimeters) between any two points in the space the user clicks on, and will display the distance numerically.
Create 'save' and 'load' functions to store the furniture configuration to a file and retrieve it at a later point. Group information does not need to get saved.
Add an interaction mode for two-handed scaling. When active, the user can gradually scale up or down the entire room with all the furniture to work on a global scale (by scaling down) or to work more accurately (by scaling up). Add a way to reset to the initial 1:1 scale.