cardboard-vr-display
A JavaScript implementation of a WebVR 1.1 VRDisplay. This is the magic
behind rendering distorted stereoscopic views for browsers that do not support the WebVR API
with the webvr-polyfill.
Unless you're building a WebVR wrapper, you probably want to use webvr-polyfill directly
rather than this. This component does not polyfill interfaces like VRFrameData
and
navigator.getVRDisplays
, and up to the consumer, although trivial (see examples).
How It Works
CardboardVRDisplay
uses DeviceMotionEvents to implement a complementary
filter which does sensor fusion and pose prediction to provide
orientation tracking. It can also render in stereo mode, and includes mesh-based
lens distortion. This display also includes user interface elements in VR mode
to make the VR experience more intuitive, including:
- A gear icon to select your VR viewer.
- A back button to exit VR mode.
- An interstitial which only appears in portrait orientation, requesting you switch
into landscape orientation (if orientation lock is not available).
Installation
$ npm install --save cardboard-vr-display
Usage
cardboard-vr-display
exposes a constructor for a CardboardVRDisplay
that takes
a single options configuration, detailed below. Check out running the demo
to try the different options.
import CardboardVRDisplay from 'cardboard-vr-display';
const options = {
K_FILTER: 0.98,
PREDICTION_TIME_S: 0.040,
TOUCH_PANNER_DISABLED: true,
CARDBOARD_UI_DISABLED: false,
ROTATE_INSTRUCTIONS_DISABLED: false,
YAW_ONLY: false,
BUFFER_SCALE: 0.5,
DIRTY_SUBMIT_FRAME_BINDINGS: false,
};
const display = new CardboardVRDisplay(options);
function MockVRFrameData () {
this.leftViewMatrix = new Float32Array(16);
this.rightViewMatrix = new Float32Array(16);
this.leftProjectionMatrix = new Float32Array(16);
this.rightProjectionMatrix = new Float32Array(16);
this.pose = null;
};
const frame = new (window.VRFrameData || MockVRFrameData)();
display.isConnected;
display.getFrameData(frame);
frame.rightViewMatrix;
frame.pose;
Development
npm install
: installs the dependencies.npm run build
: builds the distributable.
Running The Demo
View [examples/index.html] to see a demo running the CardboardVRDisplay. This executes
a minimal WebVR 1.1 polyfill and parses query params to inject configuration parameters.
View some premade links at [index.html]. For example, to set the buffer scale to 1.0
and limit rotation to yaw, go to [examples/index.html?YAW_ONLY=true&BUFFER_SCALE=1.0].
View all config options at [src/options.js].
License
This program is free software for both commercial and non-commercial use,
distributed under the Apache 2.0 License.