UNPKG

panolens

Version:
82 lines (60 loc) 1.91 kB
import { Panorama } from './Panorama'; import { Media } from '../media/Media'; import * as THREE from 'three'; /** * @classdesc Camera panorama * @description See {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamConstraints|MediaStreamConstraints} for constraints * @param {object} - camera constraints * @constructor */ function CameraPanorama ( constraints ) { const radius = 5000; const geometry = new THREE.SphereBufferGeometry( radius, 60, 40 ); const material = new THREE.MeshBasicMaterial( { visible: false }); Panorama.call( this, geometry, material ); this.media = new Media( constraints ); this.radius = radius; this.addEventListener( 'enter', this.start.bind( this ) ); this.addEventListener( 'leave', this.stop.bind( this ) ); this.addEventListener( 'panolens-container', this.onPanolensContainer.bind( this ) ); this.addEventListener( 'panolens-scene', this.onPanolensScene.bind( this ) ); } CameraPanorama.prototype = Object.assign( Object.create( Panorama.prototype ), { constructor: CameraPanorama, /** * On container event * @param {object} event * @memberOf CameraPanorama * @instance */ onPanolensContainer: function ( { container } ) { this.media.setContainer( container ); }, /** * On scene event * @param {object} event * @memberOf CameraPanorama * @instance */ onPanolensScene: function ( { scene } ) { this.media.setScene( scene ); }, /** * Start camera streaming * @memberOf CameraPanorama * @instance * @returns {Promise} */ start: function () { return this.media.start(); }, /** * Stop camera streaming * @memberOf CameraPanorama * @instance */ stop: function () { this.media.stop(); }, } ); export { CameraPanorama };