(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o

* Allows to compute the original undistorted radius from a distorted one. * See also getApproximateInverseDistortion() for a faster but potentially * less accurate method. * * @param {Number} radius Distorted radius from the lens center in tan-angle units. * @return {Number} The undistorted radius in tan-angle units. */ Distortion.prototype.distortInverse = function(radius) { // Secant method. var r0 = radius / 0.9; var r1 = radius * 0.9; var dr0 = radius - this.distort(r0); while (Math.abs(r1 - r0) > 0.0001 /** 0.1mm */) { var dr1 = radius - this.distort(r1); var r2 = r1 - dr1 * ((r1 - r0) / (dr1 - dr0)); r0 = r1; r1 = r2; dr0 = dr1; } return r1; } /** * Distorts a radius by its distortion factor from the center of the lenses. * * @param {Number} radius Radius from the lens center in tan-angle units. * @return {Number} The distorted radius in tan-angle units. */ Distortion.prototype.distort = function(radius) { return radius * this.distortionFactor_(radius); } /** * Returns the distortion factor of a point. * * @param {Number} radius Radius of the point from the lens center in tan-angle units. * @return {Number} The distortion factor. Multiply by this factor to distort points. */ Distortion.prototype.distortionFactor_ = function(radius) { var result = 1.0; var rFactor = 1.0; var rSquared = radius * radius; for (var i = 0; i < this.coefficients.length; i++) { var ki = this.coefficients[i]; rFactor *= rSquared; result += ki * rFactor; } return result; } module.exports = Distortion; },{}],3:[function(require,module,exports){ /* * Copyright 2015 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 Util = {}; Util.base64 = function(mimeType, base64) { return 'data:' + mimeType + ';base64,' + base64; }; Util.isMobile = function() { var check = false; (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check = true})(navigator.userAgent||navigator.vendor||window.opera); return check; }; Util.isFirefox = function() { return /firefox/i.test(navigator.userAgent); }; Util.isIOS = function() { return /(iPad|iPhone|iPod)/g.test(navigator.userAgent); }; Util.isIFrame = function() { try { return window.self !== window.top; } catch (e) { return true; } }; Util.appendQueryParameter = function(url, key, value) { // Determine delimiter based on if the URL already GET parameters in it. var delimiter = (url.indexOf('?') < 0 ? '?' : '&'); url += delimiter + key + '=' + value; return url; }; // From http://goo.gl/4WX3tg Util.getQueryParameter = function(name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); }; Util.isLandscapeMode = function() { return (window.orientation == 90 || window.orientation == -90); }; Util.getScreenWidth = function() { return Math.max(window.screen.width, window.screen.height) * window.devicePixelRatio; }; Util.getScreenHeight = function() { return Math.min(window.screen.width, window.screen.height) * window.devicePixelRatio; }; /** * Utility to convert the projection matrix to a vector accepted by the shader. * * @param {Object} opt_params A rectangle to scale this vector by. */ Util.projectionMatrixToVector_ = function(matrix, opt_params) { var params = opt_params || {}; var xScale = params.xScale || 1; var yScale = params.yScale || 1; var xTrans = params.xTrans || 0; var yTrans = params.yTrans || 0; var elements = matrix.elements; var vec = new THREE.Vector4(); vec.set(elements[4*0 + 0] * xScale, elements[4*1 + 1] * yScale, elements[4*2 + 0] - 1 - xTrans, elements[4*2 + 1] - 1 - yTrans).divideScalar(2); return vec; }; Util.leftProjectionVectorToRight_ = function(left) { //projectionLeft + vec4(0.0, 0.0, 1.0, 0.0)) * vec4(1.0, 1.0, -1.0, 1.0); var out = new THREE.Vector4(0, 0, 1, 0); out.add(left); // out = left + (0, 0, 1, 0). out.z *= -1; // Flip z. return out; }; module.exports = Util; },{}],4:[function(require,module,exports){ var DeviceInfo = require('../src/device-info.js'); var di = new DeviceInfo(); var centroid = di.getLeftEyeCenter(); // Size the canvas. Render the centroid. var canvas = document.querySelector('canvas'); var w = window.innerWidth; var h = window.innerHeight; var x = centroid.x * w/2; var y = centroid.y * h; var size = 10; canvas.width = w; canvas.height = h; var ctx = canvas.getContext('2d'); ctx.clearRect(0, 0, w, h); ctx.fillStyle = 'black'; ctx.fillRect(x - size/2, y - size/2, size, size); console.log('Placing eye at (%d, %d).', x, y); },{"../src/device-info.js":1}]},{},[4]);