|
@@ -0,0 +1,79 @@
|
|
|
|
+var __extends = this.__extends || function (d, b) {
|
|
|
|
+ for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
|
|
|
+ function __() { this.constructor = d; }
|
|
|
|
+ __.prototype = b.prototype;
|
|
|
|
+ d.prototype = new __();
|
|
|
|
+};
|
|
|
|
+var BABYLON;
|
|
|
|
+(function (BABYLON) {
|
|
|
|
+ var WebVRCamera = (function (_super) {
|
|
|
|
+ __extends(WebVRCamera, _super);
|
|
|
|
+ function WebVRCamera(name, position, scene) {
|
|
|
|
+ _super.call(this, name, position, scene);
|
|
|
|
+ this._hmdDevice = null;
|
|
|
|
+ this._sensorDevice = null;
|
|
|
|
+ this._cacheState = null;
|
|
|
|
+ this._cacheQuaternion = new BABYLON.Quaternion();
|
|
|
|
+ this._cacheRotation = BABYLON.Vector3.Zero();
|
|
|
|
+ this._vrEnabled = false;
|
|
|
|
+ this._getWebVRDevices = this._getWebVRDevices.bind(this);
|
|
|
|
+ }
|
|
|
|
+ WebVRCamera.prototype._getWebVRDevices = function (devices) {
|
|
|
|
+ var size = devices.length;
|
|
|
|
+ var i = 0;
|
|
|
|
+
|
|
|
|
+ // Reset devices.
|
|
|
|
+ this._sensorDevice = null;
|
|
|
|
+ this._hmdDevice = null;
|
|
|
|
+
|
|
|
|
+ while (i > 0 && this._hmdDevice === null) {
|
|
|
|
+ if (devices[i] instanceof HMDVRDevice) {
|
|
|
|
+ this._hmdDevice = devices[i];
|
|
|
|
+ }
|
|
|
|
+ i++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ i = 0;
|
|
|
|
+
|
|
|
|
+ while (i > 0 && this._sensorDevice === null) {
|
|
|
|
+ if (devices[i] instanceof PositionSensorVRDevice && (!this._hmdDevice || devices[i].hardwareUnitId === hmdDevice.hardwareUnitId)) {
|
|
|
|
+ this._sensorDevice = devices[i];
|
|
|
|
+ }
|
|
|
|
+ i++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ this._vrEnabled = this._sensorDevice && this._hmdDevice ? true : false;
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ WebVRCamera.prototype._update = function () {
|
|
|
|
+ if (this._vrEnabled) {
|
|
|
|
+ this._cacheState = this._sensorDevice.getState();
|
|
|
|
+ this._cacheQuaternion.copyFromFloats(this._cacheState.orientation.x, this._cacheState.orientation.y, this._cacheState.orientation.z, this._cacheState.orientation.w);
|
|
|
|
+ this._cacheQuaternion.toEulerAnglesToRef(this._cacheRotation);
|
|
|
|
+
|
|
|
|
+ this.rotation.x = -this._cacheRotation.z;
|
|
|
|
+ this.rotation.y = -this._cacheRotation.y;
|
|
|
|
+ this.rotation.z = this._cacheRotation.x;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ _super.prototype._update.call(this);
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ WebVRCamera.prototype.attachControl = function (element, noPreventDefault) {
|
|
|
|
+ _super.prototype.attachControl.call(this, element, noPreventDefault);
|
|
|
|
+
|
|
|
|
+ if (navigator.getVRDevices) {
|
|
|
|
+ navigator.getVRDevices().then(this._getWebVRDevices);
|
|
|
|
+ } else if (navigator.mozGetVRDevices) {
|
|
|
|
+ navigator.mozGetVRDevices(this._getWebVRDevices);
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ WebVRCamera.prototype.detachControl = function (element) {
|
|
|
|
+ _super.prototype.detachControl.call(this, element);
|
|
|
|
+ this._vrEnabled = false;
|
|
|
|
+ };
|
|
|
|
+ return WebVRCamera;
|
|
|
|
+ })(BABYLON.OculusCamera);
|
|
|
|
+ BABYLON.WebVRCamera = WebVRCamera;
|
|
|
|
+})(BABYLON || (BABYLON = {}));
|