diff --git a/src/loaders/ObjectLoader.js b/src/loaders/ObjectLoader.js index f7adc4efe875e5..4a71df0ebbed4b 100644 --- a/src/loaders/ObjectLoader.js +++ b/src/loaders/ObjectLoader.js @@ -42,6 +42,7 @@ import { RectAreaLight } from '../lights/RectAreaLight.js'; import { OrthographicCamera } from '../cameras/OrthographicCamera.js'; import { PerspectiveCamera } from '../cameras/PerspectiveCamera.js'; import { Scene } from '../scenes/Scene.js'; +import { CubeTexture } from '../textures/CubeTexture.js'; import { Texture } from '../textures/Texture.js'; import { ImageLoader } from './ImageLoader.js'; import { LoadingManager, DefaultLoadingManager } from './LoadingManager.js'; @@ -532,12 +533,36 @@ Object.assign( ObjectLoader.prototype, { var loader = new ImageLoader( manager ); loader.setCrossOrigin( this.crossOrigin ); - for ( var i = 0, l = json.length; i < l; i ++ ) { + for ( var i = 0, il = json.length; i < il; i ++ ) { var image = json[ i ]; - var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url; + var url = image.url; + + if ( Array.isArray( url ) ) { + + // load array of images e.g CubeTexture + + images[ image.uuid ] = []; + + for ( var j = 0, jl = url.length; j < jl; j ++ ) { + + var currentUrl = url[ j ]; + + var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( currentUrl ) ? currentUrl : scope.texturePath + currentUrl; + + images[ image.uuid ].push( loadImage( path ) ); + + } + + } else { - images[ image.uuid ] = loadImage( path ); + // load single image + + var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url; + + images[ image.uuid ] = loadImage( path ); + + } } @@ -579,7 +604,18 @@ Object.assign( ObjectLoader.prototype, { } - var texture = new Texture( images[ data.image ] ); + var texture; + + if ( Array.isArray( images[ data.image ] ) ) { + + texture = new CubeTexture( images[ data.image ] ); + + } else { + + texture = new Texture( images[ data.image ] ); + + } + texture.needsUpdate = true; texture.uuid = data.uuid; diff --git a/src/textures/Texture.js b/src/textures/Texture.js index e88e52a826d4be..ca6992171195a1 100644 --- a/src/textures/Texture.js +++ b/src/textures/Texture.js @@ -213,9 +213,31 @@ Texture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { if ( ! isRootObject && meta.images[ image.uuid ] === undefined ) { + var url; + + if ( Array.isArray( image ) ) { + + // process array of images e.g. CubeTexture + + url = []; + + for ( var i = 0, l = image.length; i < l; i ++ ) { + + url.push( getDataURL( image[ i ] ) ); + + } + + } else { + + // process single image + + url = getDataURL( image ); + + } + meta.images[ image.uuid ] = { uuid: image.uuid, - url: getDataURL( image ) + url: url }; }