Project2bW19

From Immersive Visualization Lab Wiki
Revision as of 19:44, 2 February 2019 by Jschulze (Talk | contribs)

Jump to: navigation, search

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.

You can do this project in Unity 3D, UE4, Lumberyard or C++ with OpenGL and optionally OpenSceneGraph.

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 pressed, 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.

9. Add multipliers for directional and rotational speed and carefully tweak them to allow precise control of both so that you can move and rotate very slowly, but also fast enough to move around the VR lab without being frustratingly slow.

Extra Credit (10 Points)

You can get a maximum of 10 points of extra credit.

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)

3. Add fly mode: add another travel mode to your collection by adding another icon to the mode selector, and implementing a mode that is similar to Walk, but without constraints for position or orientation: it should allow full 6 DOF motion through space, including barrel rolls etc. It should be similar to what is possible with a jet pack in weightless space, using the same vector span method that you used for Walk mode. This mode requires a visual wayfinding aid that indicates the up vector. It is your choice as to where and how you display the up direction. (5 points)