(function(){
'use strict';
/**
* Cubemap-based panorama
* @constructor
* @param {array} images - An array of cubetexture containing six images
* @param {number} [edgeLength=10000] - The length of cube's edge
*/
PANOLENS.CubePanorama = function ( images, edgeLength ){
var shader, geometry, material;
this.images = images || [];
edgeLength = edgeLength || 10000;
shader = JSON.parse( JSON.stringify( THREE.ShaderLib[ 'cube' ] ) );
geometry = new THREE.BoxGeometry( edgeLength, edgeLength, edgeLength );
material = new THREE.ShaderMaterial( {
fragmentShader: shader.fragmentShader,
vertexShader: shader.vertexShader,
uniforms: shader.uniforms,
side: THREE.BackSide
} );
PANOLENS.Panorama.call( this, geometry, material );
}
PANOLENS.CubePanorama.prototype = Object.create( PANOLENS.Panorama.prototype );
PANOLENS.CubePanorama.prototype.constructor = PANOLENS.CubePanorama;
/**
* Load 6 images and bind listeners
*/
PANOLENS.CubePanorama.prototype.load = function () {
PANOLENS.Utils.CubeTextureLoader.load(
this.images,
this.onLoad.bind( this ),
this.onProgress.bind( this ),
this.onError.bind( this )
);
};
/**
* This will be called when 6 textures are ready
* @param {THREE.CubeTexture} texture - Cube texture
*/
PANOLENS.CubePanorama.prototype.onLoad = function ( texture ) {
this.material.uniforms[ 'tCube' ].value = texture;
PANOLENS.Panorama.prototype.onLoad.call( this );
};
})();