-
Notifications
You must be signed in to change notification settings - Fork 6
Flexible Pointer
Overview
Flexible pointer is an extension of the ray cast. It allows the user to manipulate and bend the projected ray to select obscured objects. It utilises two controllers to control it and the curvature is based on a quadratic bezier curve.

The quadratic bezier curve utilizes two positions and a control point as shown below:
.png)
- Position 1 is controlled via one VR controller which the laser will project from.
- Position 2 is controller via the other VR controller which you point ahead of yourself.
- The position of the control point is manipulated by the location of the users finger on the touch pads of each controller.
- A scaling factor can be set to configure how far you want the pointer to be able to reach.
This may be changed later
Source paper of the technique:
Olwal, Alex & Feiner, Steven. (2012). The Flexible Pointer: An Interaction Technique for Augmented and Virtual Reality.
Use by manually attaching
To manually attach the Flexible Pointer to the Camerarig VR components if the auto-attach fails for each hand:
- Drag onto Flexible Pointer script:
- Drag Left and Right VR Controllers onto Tracked Obj L and R
Inspector parameters
For Flexible Pointer Script:
| Parameter | Default | Description |
|---|---|---|
| Interaction Layers | PickableObject | The layers that the technique can interact with |
| Interaction Type | Selection | When selected an object will go into a public variable for the player to use. Currently nothing happens on manipulation. |
| Control Point Visible | True | If true a red sphere will indicate the location of the control point that is used to bend the bezier |
| Laser Container | Laser | Container for all the lasers generated for the Bezier Curve |
| Scale Factor | 2 | The scale of which the Flexible pointer extends past the pointing controller |
| Currently Pointing at | None | The currently hovered over object |
| Selection | None | The currently selected object |
| Selected Object() | Empty | Event Invoked when an object is selected |
| Hovered() | Empty | Event Invoked when an object is hovered over |
| UnHovered() | Empty | Event Invoked when an object ceases being hovered over |
Test/Example scenes
Major example scene under:
- Assets/Technique Example Scenes/Scenes/FlexiblePointerExample
Wiki
Hand Grasping
Enhanced Grasping
Volume-based Pointing
Enhanced Pointing
Symmetric Bi-manual
Asymmetric Bi-manual
Progressive refinement