Files
old-allhands-vr/node_modules/webvr-polyfill/src/display-wrappers.js
2017-11-19 15:16:07 +01:00

91 lines
3.3 KiB
JavaScript

/*
* Copyright 2016 Google Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var VRDisplay = require('./base.js').VRDisplay;
var HMDVRDevice = require('./base.js').HMDVRDevice;
var PositionSensorVRDevice = require('./base.js').PositionSensorVRDevice;
/**
* Wraps a VRDisplay and exposes it as a HMDVRDevice
*/
function VRDisplayHMDDevice(display) {
this.display = display;
this.hardwareUnitId = display.displayId;
this.deviceId = 'webvr-polyfill:HMD:' + display.displayId;
this.deviceName = display.displayName + ' (HMD)';
}
VRDisplayHMDDevice.prototype = new HMDVRDevice();
VRDisplayHMDDevice.prototype.getEyeParameters = function(whichEye) {
var eyeParameters = this.display.getEyeParameters(whichEye);
return {
currentFieldOfView: eyeParameters.fieldOfView,
maximumFieldOfView: eyeParameters.fieldOfView,
minimumFieldOfView: eyeParameters.fieldOfView,
recommendedFieldOfView: eyeParameters.fieldOfView,
eyeTranslation: { x: eyeParameters.offset[0], y: eyeParameters.offset[1], z: eyeParameters.offset[2] },
renderRect: {
x: (whichEye == 'right') ? eyeParameters.renderWidth : 0,
y: 0,
width: eyeParameters.renderWidth,
height: eyeParameters.renderHeight
}
};
};
VRDisplayHMDDevice.prototype.setFieldOfView =
function(opt_fovLeft, opt_fovRight, opt_zNear, opt_zFar) {
// Not supported. getEyeParameters reports that the min, max, and recommended
// FoV is all the same, so no adjustment can be made.
};
// TODO: Need to hook requestFullscreen to see if a wrapped VRDisplay was passed
// in as an option. If so we should prevent the default fullscreen behavior and
// call VRDisplay.requestPresent instead.
/**
* Wraps a VRDisplay and exposes it as a PositionSensorVRDevice
*/
function VRDisplayPositionSensorDevice(display) {
this.display = display;
this.hardwareUnitId = display.displayId;
this.deviceId = 'webvr-polyfill:PositionSensor: ' + display.displayId;
this.deviceName = display.displayName + ' (PositionSensor)';
}
VRDisplayPositionSensorDevice.prototype = new PositionSensorVRDevice();
VRDisplayPositionSensorDevice.prototype.getState = function() {
var pose = this.display.getPose();
return {
position: pose.position ? { x: pose.position[0], y: pose.position[1], z: pose.position[2] } : null,
orientation: pose.orientation ? { x: pose.orientation[0], y: pose.orientation[1], z: pose.orientation[2], w: pose.orientation[3] } : null,
linearVelocity: null,
linearAcceleration: null,
angularVelocity: null,
angularAcceleration: null
};
};
VRDisplayPositionSensorDevice.prototype.resetState = function() {
return this.positionDevice.resetPose();
};
module.exports.VRDisplayHMDDevice = VRDisplayHMDDevice;
module.exports.VRDisplayPositionSensorDevice = VRDisplayPositionSensorDevice;