Homework Assignment 2b: VR Classroom Design Tool - Travel Methods
For this assignment you can obtain 100 points, plus up to 10 points of extra credit.
The goal of this assignment is to add the ability to move around the classroom to your classroom design tool.
This assignment is part 2 of a 2 part project. You should start with your project for 2a and add new features to support travel to it. In part 2b we only grade you for the new features you are asked to implement. You won't need to demonstrate the selection and manipulation method from part 2a again.
The assignment is to be done individually, not in teams. The due date for this project is Friday, February 8th at 3pm.
This project is to be done with the Oculus Rift head mounted display along with at least one Oculus Touch controller. Unless you have your own VR equipment, you should do the project in the VR lab, room B210.
This project will be covered in discussion on Monday, February 4th.
Note that you aren't allowed to use any Unity or other frameworks' assets other than the Oculus integration, 3D models and textures without explicit permission by a course staff member.
In this project, the only permitted interaction devices are the Oculus Rift HMD and the Oculus Touch controllers. Keyboard, mouse and other input devices cannot be used once the application runs.
Travel (100 Points)
Start off with your application from part 2a. At a minimum you need to load in the VR classroom model and place the user roughly in the center of it. For part 2b you need to implement two travel techniques: teleport and continuous motion.
1. Implement a teleportation method to allow the user to move around the classroom: put the laserpointer-like ray from project 2a in the user's controller - it will be used to point at the destination. Display a destination indicator at the intersection point of the ray with the floor.
2. Use the dominant hand's hand trigger (the button on the middle finger) to have the user teleport to the destination. After the teleport only the user's position should have changed, not their orientation (head orientation excepted). The teleport should immediately switch the user's location to where they pointed (not gradually transition to it).
Now add a continuous motion travel technique as an alternate option to teleporting:
3. Allow the user to switch (toggle) between the two modes with the non-dominant hand's hand trigger.
4. Add a visual display to indicate which mode is active (teleport or continuous motion) to the non-dominant hand's controller - the display should be in that controller's coordinate space but doesn't need to have a visual connection to the controller. The continuous motion technique you need to implement could be called Walk Mode. For the visual display use images you get from the internet. You can find them by googling "teleport" and "walking", for instance. You can have both mode icons shown next to each other and highlight the active one, or only show the active one.
Implement Walk Mode: In this mode the user's orientation is always up, so the only rotations allowed are around the up axis (to change the heading). The motion should be fluid, no jumps to new locations are allowed like when teleporting. The speed of the motion should be gradually adjustable, and it should also be possible to change the user's orientation with the same method as well. Even turning in place should be possible. And the user should always stay on the floor. Use the following steps for the implementation:
5. When the user pulls the hand trigger with the dominant hand, both position (3D) and orientation (using a quaternion) of the controller are stored.
6. While the user keeps the hand trigger depressed, for every frame the software queries position and orientation of the controller, and calculates the deltas between that initial position and orientation and the current ones. The delta in position is interpreted as a velocity vector, which determines the direction and distance the user travels. The delta in orientations determines the amount of rotation that is applied to the user's orientation.
7. Constrain the position to always remain on the floor of the VR lab model (eliminate any up or down component of the velocity vector).
8. Constrain orientation changes to rotations about the up axis - no pitch or roll are allowed.
Extra Credit (10 Points)
1. Teleport with arc shaped line: instead of a straight line to point to the destination, use an arc: you point the controller up at an angle and compute the arc that an object would follow if you threw it in the air at this angle. The point it would hit the floor is the destination for the teleport. Draw the arc as a solid, dotted or dashed line. Add this mode as a third option to your travel modes, including adding another icon to the non-dominant controller. (5 points)
2. Control teleport orientation: Come up with a way to control the orientation the user will find themselves in after the teleport. For example, by using the controller's rotation angle around the pointing ray and indicating the direction as part of the destination indicator on the floor. Many other options are possible here, but it is required that there be a visual indication of the target orientation as part of the floor indicator. (5 points)