提交 70e4206d 编写于 作者: M Mr.doob

Merge branch 'unify_loaders' of https://github.com/zinefer/three.js into dev

Conflicts:
	examples/js/loaders/AWDLoader.js
	examples/js/loaders/BinaryLoader.js
	examples/js/loaders/ColladaLoader.js
	examples/js/loaders/MTLLoader.js
	examples/js/loaders/OBJMTLLoader.js
	examples/js/loaders/PVRLoader.js
	examples/js/loaders/STLLoader.js
	examples/js/loaders/UTF8Loader.js
	examples/webgl_loader_ply.html
	src/loaders/CompressedTextureLoader.js
	src/loaders/JSONLoader.js
	src/loaders/Loader.js
此差异已折叠。
......@@ -20,13 +20,11 @@ THREE.AssimpJSONLoader.prototype = {
constructor: THREE.AssimpJSONLoader,
texturePath : '',
load: function ( url, onLoad, onProgress, onError, texturePath ) {
load: function ( url, onLoad, onProgress, onError ) {
var scope = this;
this.texturePath = texturePath && ( typeof texturePath === "string" ) ? texturePath : this.extractUrlBase( url );
this.texturePath = this.texturePath && ( typeof this.texturePath === "string" ) ? this.texturePath : this.extractUrlBase( url );
var loader = new THREE.XHRLoader( this.manager );
loader.setCrossOrigin( this.crossOrigin );
......@@ -60,6 +58,10 @@ THREE.AssimpJSONLoader.prototype = {
this.crossOrigin = value;
},
setTexturePath: function ( value ) {
this.texturePath = value;
},
extractUrlBase: function ( url ) { // from three/src/loaders/Loader.js
var parts = url.split( '/' );
parts.pop();
......
此差异已折叠。
......@@ -4,11 +4,9 @@
* @author angelxuanchang
*/
THREE.MTLLoader = function( baseUrl, options, crossOrigin ) {
THREE.MTLLoader = function( manager ) {
this.baseUrl = baseUrl;
this.options = options;
this.crossOrigin = crossOrigin;
this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
};
......@@ -20,7 +18,7 @@ THREE.MTLLoader.prototype = {
var scope = this;
var loader = new THREE.XHRLoader();
var loader = new THREE.XHRLoader( this.manager );
loader.setCrossOrigin( this.crossOrigin );
loader.load( url, function ( text ) {
......@@ -30,6 +28,24 @@ THREE.MTLLoader.prototype = {
},
setBaseUrl: function( value ) {
this.baseUrl = value;
},
setCrossOrigin: function ( value ) {
this.crossOrigin = value;
},
setMaterialOptions: function ( value ) {
this.materialOptions = value;
},
/**
* Parses loaded MTL file
* @param text - Content of MTL file
......@@ -86,8 +102,9 @@ THREE.MTLLoader.prototype = {
}
var materialCreator = new THREE.MTLLoader.MaterialCreator( this.baseUrl, this.options );
materialCreator.crossOrigin = this.crossOrigin;
var materialCreator = new THREE.MTLLoader.MaterialCreator( this.baseUrl, this.materialOptions );
materialCreator.setCrossOrigin( this.crossOrigin );
materialCreator.setManager( this.manager );
materialCreator.setMaterials( materialsInfo );
return materialCreator;
......@@ -130,6 +147,18 @@ THREE.MTLLoader.MaterialCreator.prototype = {
constructor: THREE.MTLLoader.MaterialCreator,
setCrossOrigin: function ( value ) {
this.crossOrigin = value;
},
setManager: function ( value ) {
this.manager = value;
},
setMaterials: function( materialsInfo ) {
this.materialsInfo = this.convert( materialsInfo );
......@@ -372,10 +401,11 @@ THREE.MTLLoader.MaterialCreator.prototype = {
},
loadTexture: function ( url, mapping, onLoad, onError ) {
loadTexture: function ( url, mapping, onLoad, onProgress, onError ) {
var texture;
var loader = THREE.Loader.Handlers.get( url );
var manager = ( this.manager !== undefined ) ? this.manager : THREE.DefaultLoadingManager;
if ( loader !== null ) {
......@@ -385,8 +415,8 @@ THREE.MTLLoader.MaterialCreator.prototype = {
texture = new THREE.Texture();
loader = new THREE.ImageLoader();
loader.crossOrigin = this.crossOrigin;
loader = new THREE.ImageLoader( manager );
loader.setCrossOrigin( this.crossOrigin );
loader.load( url, function ( image ) {
texture.image = THREE.MTLLoader.ensurePowerOfTwo_( image );
......@@ -394,7 +424,7 @@ THREE.MTLLoader.MaterialCreator.prototype = {
if ( onLoad ) onLoad( texture );
} );
}, onProgress, onError );
}
......
......@@ -26,6 +26,12 @@ THREE.OBJLoader.prototype = {
},
setCrossOrigin: function ( value ) {
this.crossOrigin = value;
},
parse: function ( text ) {
console.time( 'OBJLoader' );
......
......@@ -19,8 +19,9 @@ THREE.OBJMTLLoader.prototype = {
var scope = this;
var mtlLoader = new THREE.MTLLoader( url.substr( 0, url.lastIndexOf( "/" ) + 1 ) );
mtlLoader.crossOrigin = scope.crossOrigin;
var mtlLoader = new THREE.MTLLoader( this.manager );
mtlLoader.setBaseUrl( url.substr( 0, url.lastIndexOf( "/" ) + 1 ) );
mtlLoader.setCrossOrigin( this.crossOrigin );
mtlLoader.load( mtlurl, function ( materials ) {
var materialsCreator = materials;
......@@ -56,6 +57,12 @@ THREE.OBJMTLLoader.prototype = {
},
setCrossOrigin: function ( value ) {
this.crossOrigin = value;
},
/**
* Parses loaded .obj file
* @param data - content of .obj file
......
......@@ -27,6 +27,12 @@ THREE.PDBLoader.prototype = {
},
setCrossOrigin: function ( value ) {
this.crossOrigin = value;
},
// Based on CanvasMol PDB parser
parsePDB: function ( text ) {
......
......@@ -27,7 +27,9 @@
*/
THREE.PLYLoader = function () {
THREE.PLYLoader = function ( manager ) {
this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
this.propertyNameMapping = {};
......@@ -37,42 +39,30 @@ THREE.PLYLoader.prototype = {
constructor: THREE.PLYLoader,
setPropertyNameMapping: function ( mapping ) {
this.propertyNameMapping = mapping;
},
load: function ( url, callback ) {
load: function ( url, onLoad, onProgress, onError ) {
var scope = this;
var request = new XMLHttpRequest();
request.addEventListener( 'load', function ( event ) {
var geometry = scope.parse( event.target.response );
var loader = new THREE.XHRLoader( this.manager );
loader.setCrossOrigin( this.crossOrigin );
loader.setResponseType( 'arraybuffer' );
loader.load( url, function ( text ) {
scope.dispatchEvent( { type: 'load', content: geometry } );
onLoad( scope.parse( text ) );
if ( callback ) callback( geometry );
}, onProgress, onError );
}, false );
request.addEventListener( 'progress', function ( event ) {
scope.dispatchEvent( { type: 'progress', loaded: event.loaded, total: event.total } );
},
}, false );
setCrossOrigin: function ( value ) {
request.addEventListener( 'error', function () {
this.crossOrigin = value;
scope.dispatchEvent( { type: 'error', message: 'Couldn\'t load URL [' + url + ']' } );
},
}, false );
setPropertyNameMapping: function ( mapping ) {
request.open( 'GET', url, true );
request.responseType = "arraybuffer";
request.send( null );
this.propertyNameMapping = mapping;
},
......@@ -477,6 +467,4 @@ THREE.PLYLoader.prototype = {
}
};
THREE.EventDispatcher.prototype.apply( THREE.PLYLoader.prototype );
};
\ No newline at end of file
......@@ -8,8 +8,10 @@
* TODO : implement loadMipmaps option
*/
THREE.PVRLoader = function ( manager ) {
this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
THREE.PVRLoader = function () {
this._parser = THREE.PVRLoader.parse;
};
......
......@@ -43,14 +43,19 @@ THREE.STLLoader.prototype = {
var loader = new THREE.XHRLoader( scope.manager );
loader.setCrossOrigin( this.crossOrigin );
loader.setResponseType('arraybuffer');
var request = loader.load( url, function ( text ) {
loader.setResponseType( 'arraybuffer' );
loader.load( url, function ( text ) {
onLoad( scope.parse( text ) );
}, onProgress, onError );
return request;
},
setCrossOrigin: function ( value ) {
this.crossOrigin = value;
},
parse: function ( data ) {
......
......@@ -11,7 +11,7 @@ THREE.SVGLoader = function ( manager ) {
THREE.SVGLoader.prototype = {
constructor: THREE.MaterialLoader,
constructor: THREE.SVGLoader,
load: function ( url, onLoad, onProgress, onError ) {
......@@ -29,5 +29,12 @@ THREE.SVGLoader.prototype = {
}, onProgress, onError );
},
setCrossOrigin: function ( value ) {
this.crossOrigin = value;
}
};
......@@ -2,7 +2,11 @@
* @author mrdoob / http://mrdoob.com/
*/
THREE.VRMLLoader = function () {};
THREE.VRMLLoader = function ( manager ) {
this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
};
THREE.VRMLLoader.prototype = {
......@@ -22,35 +26,23 @@ THREE.VRMLLoader.prototype = {
recordingFieldname: null,
load: function ( url, callback ) {
load: function ( url, onLoad, onProgress, onError ) {
var scope = this;
var request = new XMLHttpRequest();
request.addEventListener( 'load', function ( event ) {
var object = scope.parse( event.target.responseText );
scope.dispatchEvent( { type: 'load', content: object } );
if ( callback ) callback( object );
}, false );
var loader = new THREE.XHRLoader( this.manager );
loader.setCrossOrigin( this.crossOrigin );
loader.load( url, function ( text ) {
request.addEventListener( 'progress', function ( event ) {
onLoad( scope.parse( text ) );
scope.dispatchEvent( { type: 'progress', loaded: event.loaded, total: event.total } );
}, onProgress, onError );
}, false );
request.addEventListener( 'error', function () {
scope.dispatchEvent( { type: 'error', message: 'Couldn\'t load URL [' + url + ']' } );
},
}, false );
setCrossOrigin: function ( value ) {
request.open( 'GET', url, true );
request.send( null );
this.crossOrigin = value;
},
......@@ -833,7 +825,4 @@ THREE.VRMLLoader.prototype = {
}
};
THREE.EventDispatcher.prototype.apply( THREE.VRMLLoader.prototype );
};
\ No newline at end of file
......@@ -26,6 +26,12 @@ THREE.VTKLoader.prototype = {
},
setCrossOrigin: function ( value ) {
this.crossOrigin = value;
},
parse: function ( data ) {
var indices = [];
......
......@@ -68,8 +68,7 @@
scene = new THREE.Scene();
loader = new THREE.BinaryLoader( true );
document.body.appendChild( loader.statusDomElement );
loader = new THREE.BinaryLoader();
var callback = function( geometry ) {
......@@ -77,8 +76,6 @@
object.scale.x = object.scale.y = object.scale.z = 0.80;
scene.add( object );
loader.statusDomElement.style.display = "none";
};
loader.load( "obj/walt/WaltHead_bin.js", callback );
......
......@@ -90,9 +90,8 @@
// PLY file
var loader = new THREE.PLYLoader();
loader.addEventListener( 'load', function ( event ) {
loader.load( './models/ply/ascii/dolphins.ply', function ( geometry ) {
var geometry = event.content;
var material = new THREE.MeshPhongMaterial( { color: 0x0055ff, specular: 0x111111, shininess: 200 } );
var mesh = new THREE.Mesh( geometry, material );
......@@ -106,7 +105,6 @@
scene.add( mesh );
} );
loader.load( './models/ply/ascii/dolphins.ply' );
// Lights
......
......@@ -79,12 +79,11 @@
camera.add( dirLight.target );
var loader = new THREE.VRMLLoader();
loader.addEventListener( 'load', function ( event ) {
loader.load( 'models/vrml/house.wrl', function ( object ) {
scene.add(event.content);
scene.add( object );
} );
loader.load( "models/vrml/house.wrl" );
// renderer
......
......@@ -4,7 +4,9 @@
* Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)
*/
THREE.DataTextureLoader = THREE.BinaryTextureLoader = function () {
THREE.DataTextureLoader = THREE.BinaryTextureLoader = function ( manager ) {
this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
// override in sub classes
this._parser = null;
......@@ -21,7 +23,8 @@ THREE.BinaryTextureLoader.prototype = {
var texture = new THREE.DataTexture( );
var loader = new THREE.XHRLoader();
var loader = new THREE.XHRLoader( this.manager );
loader.setCrossOrigin( this.crossOrigin );
loader.setResponseType( 'arraybuffer' );
loader.load( url, function ( buffer ) {
......@@ -82,6 +85,12 @@ THREE.BinaryTextureLoader.prototype = {
return texture;
},
setCrossOrigin: function ( value ) {
this.crossOrigin = value;
}
};
......@@ -4,7 +4,9 @@
* Abstract Base class to block based textures loader (dds, pvr, ...)
*/
THREE.CompressedTextureLoader = function () {
THREE.CompressedTextureLoader = function ( manager ) {
this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
// override in sub classes
this._parser = null;
......@@ -16,7 +18,7 @@ THREE.CompressedTextureLoader.prototype = {
constructor: THREE.CompressedTextureLoader,
load: function ( url, onLoad, onError ) {
load: function ( url, onLoad, onProgress, onError ) {
var scope = this;
......@@ -25,7 +27,8 @@ THREE.CompressedTextureLoader.prototype = {
var texture = new THREE.CompressedTexture();
texture.image = images;
var loader = new THREE.XHRLoader();
var loader = new THREE.XHRLoader( this.manager );
loader.setCrossOrigin( this.crossOrigin );
loader.setResponseType( 'arraybuffer' );
if ( Array.isArray( url ) ) {
......@@ -59,7 +62,7 @@ THREE.CompressedTextureLoader.prototype = {
}
} );
}, onProgress, onError );
};
......@@ -115,12 +118,18 @@ THREE.CompressedTextureLoader.prototype = {
if ( onLoad ) onLoad( texture );
} );
}, onProgress, onError );
}
return texture;
},
setCrossOrigin: function ( value ) {
this.crossOrigin = value;
}
};
......@@ -16,7 +16,7 @@ THREE.GeometryLoader.prototype = {
var scope = this;
var loader = new THREE.XHRLoader();
var loader = new THREE.XHRLoader( this.manager );
loader.setCrossOrigin( this.crossOrigin );
loader.load( url, function ( text ) {
......
此差异已折叠。
此差异已折叠。
......@@ -6,7 +6,7 @@ THREE.LoadingManager = function ( onLoad, onProgress, onError ) {
var scope = this;
var loaded = 0, total = 0;
var isLoading = false, itemsLoaded = 0, itemsTotal = 0;
this.onLoad = onLoad;
this.onProgress = onProgress;
......@@ -14,23 +14,41 @@ THREE.LoadingManager = function ( onLoad, onProgress, onError ) {
this.itemStart = function ( url ) {
total ++;
itemsTotal ++;
if ( isLoading === false ) {
if ( scope.onStart !== undefined ) {
scope.onStart( url, itemsLoaded, itemsTotal );
}
}
isLoading = true;
};
this.itemEnd = function ( url ) {
loaded ++;
itemsLoaded ++;
if ( scope.onProgress !== undefined ) {
scope.onProgress( url, loaded, total );
scope.onProgress( url, itemsLoaded, itemsTotal );
}
if ( loaded === total && scope.onLoad !== undefined ) {
if ( itemsLoaded === itemsTotal ) {
isLoading = false;
if ( scope.onLoad !== undefined ) {
scope.onLoad();
scope.onLoad();
}
}
......
......@@ -69,6 +69,7 @@ THREE.XHRLoader.prototype = {
if ( this.crossOrigin !== undefined ) request.crossOrigin = this.crossOrigin;
if ( this.responseType !== undefined ) request.responseType = this.responseType;
if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;
request.send( null );
......@@ -88,6 +89,12 @@ THREE.XHRLoader.prototype = {
this.crossOrigin = value;
},
setWithCredentials: function ( value ) {
this.withCredentials = value;
}
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册