提交 0284cb95 编写于 作者: A alteredq

Refactored BinaryLoader to follow new JSONLoader style simpler API.

Also updated corresponding examples.
上级 942a6c89
此差异已折叠。
此差异已折叠。
......@@ -48,7 +48,7 @@
<script>
var camera, cameraTarget, scene, renderer, info, mouse2d, sun, loader, sphere;
var camera, cameraTarget, scene, renderer, info, mouse2d, sun, sphere;
var range = 400, speed = 1, sphereSize = 4;
......@@ -66,8 +66,6 @@
mouse2d = new THREE.Vector3( 0, 0, 1 );
loader = new THREE.Loader( true );
scene = new THREE.Scene();
sphere = new THREE.Mesh( new THREE.SphereGeometry( sphereSize, 10, 10 ), new THREE.MeshLambertMaterial( { color: 0xff0000 } ) );
......
......@@ -169,8 +169,8 @@
var s = Date.now(),
callback = function( geometry ) { createScene( geometry, s ) };
//loader.load( { model: 'obj/lucy/Lucy100k_slim.js', callback: callback } );
loader.load( { model: 'obj/lucy/Lucy100k_bin.js', callback: callback } );
//loader.load( 'obj/lucy/Lucy100k_slim.js', callback );
loader.load( 'obj/lucy/Lucy100k_bin.js', callback );
}
......
......@@ -78,7 +78,7 @@
};
loader.load( { model: "obj/walt/WaltHead_bin.js", callback: callback } );
loader.load( "obj/walt/WaltHead_bin.js", callback );
scene.add( new THREE.AmbientLight( 0x000000 ) );
......
......@@ -458,7 +458,7 @@
}
loader.load( { model: CARS[ "veyron" ].url, callback: function( geometry ) { createScene( geometry, "veyron" ) } } );
loader.load( CARS[ "veyron" ].url, function( geometry ) { createScene( geometry, "veyron" ) } );
for( var c in CARS ) initCarButton( c );
......@@ -471,7 +471,7 @@
if ( ! CARS[ car ].object ) {
loader.statusDomElement.style.display = "block";
loader.load( { model: CARS[ car ].url, callback: function( geometry ) { createScene( geometry, car ) } } );
loader.load( CARS[ car ].url, function( geometry ) { createScene( geometry, car ) } );
} else {
......@@ -479,7 +479,7 @@
}
}, false);
}, false );
}
......@@ -510,13 +510,13 @@
var buttons, i, src = "";
for( i = 0; i < materials.length; i++ ) {
for( i = 0; i < materials.length; i ++ ) {
src += '<button id="' + button_name( car, i ) + '">' + materials[ i ][ 0 ] + '</button> ';
}
buttons = document.createElement("div");
buttons = document.createElement( "div" );
buttons.innerHTML = src;
$( "buttons_materials" ).appendChild( buttons );
......@@ -527,7 +527,7 @@
function attachButtonMaterials( materials, geometry, material_indices, car ) {
for( var i = 0; i < materials.length; i++ ) {
for( var i = 0; i < materials.length; i ++ ) {
$( button_name( car, i ) ).counter = i;
$( button_name( car, i ) ).addEventListener( 'click', function() {
......
......@@ -451,7 +451,7 @@
}
loader.load( { model: CARS[ "veyron" ].url, callback: function( geometry ) { createScene( geometry, "veyron" ) } } );
loader.load( CARS[ "veyron" ].url, function( geometry ) { createScene( geometry, "veyron" ) } );
for( var c in CARS ) initCarButton( c );
......@@ -464,7 +464,7 @@
if ( ! CARS[ car ].object ) {
loader.statusDomElement.style.display = "block";
loader.load( { model: CARS[ car ].url, callback: function( geometry ) { createScene( geometry, car ) } } );
loader.load( CARS[ car ].url, function( geometry ) { createScene( geometry, car ) } );
} else {
......
......@@ -136,7 +136,7 @@
camaroMaterials.body.push( [ "Chrome", new THREE.MeshPhongMaterial( { color: 0xffffff, specular:0xffffff, envMap: textureCube, combine: THREE.MultiplyOperation } ) ] );
var loader = new THREE.BinaryLoader();
loader.load( { model: "obj/camaro/CamaroNoUv_bin.js", callback: function( geometry ) { createScene( geometry, camaroMaterials ) } } );
loader.load( "obj/camaro/CamaroNoUv_bin.js", function( geometry ) { createScene( geometry, camaroMaterials ) } );
}
......@@ -155,7 +155,7 @@
parent.innerHTML = src;
for( i = 0; i < materials.length; i++ ) {
for( i = 0; i < materials.length; i ++ ) {
$( "m" + i ).counter = i;
$( "m" + i ).addEventListener( 'click', function() { geometry.materials[ 0 ][ 0 ] = materials[ this.counter ][ 1 ] }, false );
......
......@@ -143,7 +143,7 @@
camaroMaterials.body.push( [ "Chrome", new THREE.MeshPhongMaterial( { color: 0xffffff, specular:0xffffff, envMap: textureCube, combine: THREE.MultiplyOperation } ) ] );
var loader = new THREE.BinaryLoader();
loader.load( { model: "obj/camaro/CamaroNoUv_bin.js", callback: function( geometry ) { createScene( geometry, camaroMaterials ) } } );
loader.load( "obj/camaro/CamaroNoUv_bin.js", function( geometry ) { createScene( geometry, camaroMaterials ) } );
}
......
......@@ -452,7 +452,7 @@
}
loader.load( { model: CARS[ "veyron" ].url, callback: function( geometry ) { createScene( geometry, "veyron" ) } } );
loader.load( CARS[ "veyron" ].url, function( geometry ) { createScene( geometry, "veyron" ) } );
for( var c in CARS ) initCarButton( c );
......@@ -465,7 +465,7 @@
if ( ! CARS[ car ].object ) {
loader.statusDomElement.style.display = "block";
loader.load( { model: CARS[ car ].url, callback: function( geometry ) { createScene( geometry, car ) } } );
loader.load( CARS[ car ].url, function( geometry ) { createScene( geometry, car ) } );
} else {
......
......@@ -152,7 +152,7 @@
loader = new THREE.BinaryLoader( true );
document.body.appendChild( loader.statusDomElement );
loader.load( { model: "obj/walt/WaltHead_bin.js", callback: function( geometry ) { createScene( geometry, cubeMaterial1, cubeMaterial2, cubeMaterial3 ) } } );
loader.load( "obj/walt/WaltHead_bin.js", function( geometry ) { createScene( geometry, cubeMaterial1, cubeMaterial2, cubeMaterial3 ) } );
}
......
......@@ -143,7 +143,7 @@
loader = new THREE.BinaryLoader( true );
document.body.appendChild( loader.statusDomElement );
loader.load( { model: 'obj/lucy/Lucy100k_bin.js', callback: function( geometry ) { createScene( geometry, cubeMaterial1, cubeMaterial2, cubeMaterial3 ) } } );
loader.load( 'obj/lucy/Lucy100k_bin.js', function( geometry ) { createScene( geometry, cubeMaterial1, cubeMaterial2, cubeMaterial3 ) } );
document.addEventListener('mousemove', onDocumentMouseMove, false);
......
......@@ -183,7 +183,7 @@
loader = new THREE.BinaryLoader( true );
document.body.appendChild( loader.statusDomElement );
loader.load( { model: "obj/ninja/NinjaLo_bin.js", callback: function( geometry ) { createScene( geometry, scale, material1, material2 ) } } );
loader.load( "obj/ninja/NinjaLo_bin.js", function( geometry ) { createScene( geometry, scale, material1, material2 ) } );
//
......
......@@ -62,13 +62,13 @@
scene.add( light );
var loader = new THREE.JSONLoader( true );
loader.load( { model: "models/animated/horse.js", callback: function( geometry ) {
loader.load( "models/animated/horse.js", function( geometry ) {
mesh = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { color: 0x606060, morphTargets: true } ) );
mesh.scale.set( 1.5, 1.5, 1.5 );
scene.add( mesh );
} } );
} );
//
......
......@@ -190,11 +190,11 @@
callbackMale = function( geometry ) { createScene( geometry, 90, FLOOR, 50, 105 ) },
callbackFemale = function( geometry ) { createScene( geometry, -80, FLOOR, 50, 0 ) };
loader.load( { model: "obj/male02/Male02_slim.js", callback: callbackMale } );
loader.load( { model: "obj/female02/Female02_slim.js", callback: callbackFemale } );
loader.load( "obj/male02/Male02_slim.js", callbackMale );
loader.load( "obj/female02/Female02_slim.js", callbackFemale );
//loader.load( { model: "obj/male02/Male02_bin.js", callback: callbackMale } );
//loader.load( { model: "obj/female02/Female02_bin.js", callback: callbackFemale } );
//loader.load( "obj/male02/Male02_bin.js", callbackMale );
//loader.load( "obj/female02/Female02_bin.js", callbackFemale );
}
......
......@@ -113,9 +113,9 @@
} );
bloader.load( { model: "obj/veyron/VeyronNoUv_bin.js", callback: function( geometry ) { createMesh( geometry, scene, 6.8, 2200, -200, -100, 0x0055ff, false ) } } );
bloader.load( "obj/veyron/VeyronNoUv_bin.js", function( geometry ) { createMesh( geometry, scene, 6.8, 2200, -200, -100, 0x0055ff, false ) } );
bloader.load( { model: "obj/female02/Female02_bin.js", callback: function( geometry ) {
bloader.load( "obj/female02/Female02_bin.js", function( geometry ) {
createMesh( geometry, scene, 4.05, -1000, -350, 0, 0xffdd44, true );
createMesh( geometry, scene, 4.05, 0, -350, 0, 0xffffff, true );
......@@ -123,16 +123,16 @@
createMesh( geometry, scene, 4.05, 250, -350, 1500, 0xff9955, true );
createMesh( geometry, scene, 4.05, 250, -350, 2500, 0xff77dd, true );
} } );
} );
bloader.load( { model: "obj/male02/Male02_bin.js", callback: function( geometry ) {
bloader.load( "obj/male02/Male02_bin.js", function( geometry ) {
createMesh( geometry, scene, 4.05, -500, -350, 600, 0xff7744, true );
createMesh( geometry, scene, 4.05, 500, -350, 0, 0xff5522, true );
createMesh( geometry, scene, 4.05, -250, -350, 1500, 0xff9922, true );
createMesh( geometry, scene, 4.05, -250, -350, -1500, 0xff99ff, true );
} } );
} );
//
......
......@@ -16,26 +16,37 @@ THREE.BinaryLoader.prototype.supr = THREE.Loader.prototype;
// Load models generated by slim OBJ converter with BINARY option (converter_obj_three_slim.py -t binary)
// - binary models consist of two files: JS and BIN
// - parameters
// - model (required)
// - url (required)
// - callback (required)
// - bin_path (optional: if not specified, binary file will be assumed to be in the same folder as JS model file)
// - texture_path (optional: if not specified, textures will be assumed to be in the same folder as JS model file)
// - texturePath (optional: if not specified, textures will be assumed to be in the same folder as JS model file)
// - binaryPath (optional: if not specified, binary file will be assumed to be in the same folder as JS model file)
THREE.BinaryLoader.prototype.load = function( parameters ) {
THREE.BinaryLoader.prototype.load = function( url, callback, texturePath, binaryPath ) {
if ( url instanceof Object ) {
console.warn( 'DEPRECATED: BinaryLoader( parameters ) is now BinaryLoader( url, callback, texturePath, binaryPath ).' );
var parameters = url;
url = parameters.model;
callback = parameters.callback;
texturePath = parameters.texture_path;
binaryPath = parameters.bin_path;
}
// #1 load JS part via web worker
// This isn't really necessary, JS part is tiny,
// could be done by more ordinary means.
var url = parameters.model,
callback = parameters.callback,
texture_path = parameters.texture_path ? parameters.texture_path : THREE.Loader.prototype.extractUrlbase( url ),
bin_path = parameters.bin_path ? parameters.bin_path : THREE.Loader.prototype.extractUrlbase( url ),
texturePath = texturePath ? texturePath : this.extractUrlbase( url );
binaryPath = binaryPath ? binaryPath : this.extractUrlbase( url );
s = (new Date).getTime(),
var s = Date.now(),
worker = new Worker( url ),
callback_progress = this.showProgress ? THREE.Loader.prototype.updateProgress : null;
callbackProgress = this.showProgress ? THREE.Loader.prototype.updateProgress : null;
worker.onmessage = function( event ) {
......@@ -49,11 +60,11 @@ THREE.BinaryLoader.prototype.load = function( parameters ) {
// Also, worker loading huge data by Ajax still freezes browser. Go figure,
// worker with baked ascii JSON data keeps browser more responsive.
THREE.BinaryLoader.prototype.loadAjaxBuffers( buffers, materials, callback, bin_path, texture_path, callback_progress );
THREE.BinaryLoader.prototype.loadAjaxBuffers( buffers, materials, callback, binaryPath, texturePath, callbackProgress );
};
worker.onerror = function (event) {
worker.onerror = function ( event ) {
alert( "worker.onerror: " + event.message + "\n" + event.data );
event.preventDefault();
......@@ -71,10 +82,10 @@ THREE.BinaryLoader.prototype.load = function( parameters ) {
// See also other suggestions by Gregg Tavares
// https://groups.google.com/group/o3d-discuss/browse_thread/thread/a8967bc9ce1e0978
THREE.BinaryLoader.prototype.loadAjaxBuffers = function( buffers, materials, callback, bin_path, texture_path, callback_progress ) {
THREE.BinaryLoader.prototype.loadAjaxBuffers = function( buffers, materials, callback, binaryPath, texturePath, callbackProgress ) {
var xhr = new XMLHttpRequest(),
url = bin_path + "/" + buffers;
url = binaryPath + "/" + buffers;
var length = 0;
......@@ -84,7 +95,7 @@ THREE.BinaryLoader.prototype.loadAjaxBuffers = function( buffers, materials, cal
if ( xhr.status == 200 || xhr.status == 0 ) {
THREE.BinaryLoader.prototype.createBinModel( xhr.responseText, callback, texture_path, materials );
THREE.BinaryLoader.prototype.createBinModel( xhr.responseText, callback, texturePath, materials );
} else {
......@@ -94,7 +105,7 @@ THREE.BinaryLoader.prototype.loadAjaxBuffers = function( buffers, materials, cal
} else if ( xhr.readyState == 3 ) {
if ( callback_progress ) {
if ( callbackProgress ) {
if ( length == 0 ) {
......@@ -102,7 +113,7 @@ THREE.BinaryLoader.prototype.loadAjaxBuffers = function( buffers, materials, cal
}
callback_progress( { total: length, loaded: xhr.responseText.length } );
callbackProgress( { total: length, loaded: xhr.responseText.length } );
}
......@@ -121,9 +132,9 @@ THREE.BinaryLoader.prototype.loadAjaxBuffers = function( buffers, materials, cal
};
THREE.BinaryLoader.prototype.createBinModel = function ( data, callback, texture_path, materials ) {
THREE.BinaryLoader.prototype.createBinModel = function ( data, callback, texturePath, materials ) {
var Model = function ( texture_path ) {
var Model = function ( texturePath ) {
//var s = (new Date).getTime();
......@@ -144,7 +155,7 @@ THREE.BinaryLoader.prototype.createBinModel = function ( data, callback, texture
THREE.Geometry.call( this );
THREE.Loader.prototype.init_materials( scope, materials, texture_path );
THREE.Loader.prototype.initMaterials( scope, materials, texturePath );
md = parseMetaData( data, currentOffset );
currentOffset += md.header_bytes;
......@@ -765,6 +776,6 @@ THREE.BinaryLoader.prototype.createBinModel = function ( data, callback, texture
Model.prototype = new THREE.Geometry();
Model.prototype.constructor = Model;
callback( new Model( texture_path ) );
callback( new Model( texturePath ) );
};
......@@ -13,19 +13,19 @@ THREE.JSONLoader.prototype = new THREE.Loader();
THREE.JSONLoader.prototype.constructor = THREE.JSONLoader;
THREE.JSONLoader.prototype.supr = THREE.Loader.prototype;
THREE.JSONLoader.prototype.load = function ( url, callback, texturePath ) {
var scope = this, worker;
var worker, scope = this;
if ( url instanceof Object ) {
console.warn( 'DEPRECATED: JSONLoader( parameters ) is now JSONLoader( url, callback, texturePath ).' );
var object = url;
url = object.model;
callback = object.callback;
texturePath = object.texture_path;
var parameters = url;
url = parameters.model;
callback = parameters.callback;
texturePath = parameters.texture_path;
}
......@@ -40,7 +40,7 @@ THREE.JSONLoader.prototype.load = function ( url, callback, texturePath ) {
};
this.onLoadStart();
worker.postMessage( new Date().getTime() );
worker.postMessage( Date.now() );
};
......@@ -50,7 +50,7 @@ THREE.JSONLoader.prototype.createModel = function ( json, callback, texture_path
geometry = new THREE.Geometry(),
scale = ( json.scale !== undefined ) ? 1.0 / json.scale : 1.0;
this.init_materials( geometry, json.materials, texture_path );
this.initMaterials( geometry, json.materials, texture_path );
parseModel( scale );
......
......@@ -65,7 +65,7 @@ THREE.Loader.prototype = {
},
init_materials: function ( scope, materials, texture_path ) {
initMaterials: function ( scope, materials, texture_path ) {
scope.materials = [];
......
......@@ -516,15 +516,11 @@ THREE.SceneLoader.prototype = {
} else if ( g.type == "bin_mesh" ) {
binLoader.load( { model: get_url( g.url, data.urlBaseType ),
callback: create_callback( dg )
} );
binLoader.load( get_url( g.url, data.urlBaseType ), create_callback( dg ) );
} else if ( g.type == "ascii_mesh" ) {
jsonLoader.load( { model: get_url( g.url, data.urlBaseType ),
callback: create_callback( dg )
} );
jsonLoader.load( get_url( g.url, data.urlBaseType ), create_callback( dg ) );
} else if ( g.type == "embedded_mesh" ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册