91 lines
3.3 KiB
JavaScript
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;
|
|
|