/* * 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;