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 = {
DEBUG: false,
DPDB_URL: 'https://dpdb.webvr.rocks/dpdb.json',
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 the example 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 [https://googlevr.github.io/cardboard-vr-display/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.