提交 a71b541c 编写于 作者: A alteredq

Refactored common methods out of JSONLoader into base Loader.

上级 fb953393
......@@ -5,10 +5,7 @@
THREE.JSONLoader = function ( showStatus ) {
THREE.Loader.call( this );
this.showStatus = showStatus;
this.statusDomElement = showStatus ? this.addStatusElement() : null;
THREE.Loader.call( this, showStatus );
};
......@@ -19,47 +16,6 @@ THREE.JSONLoader.prototype.supr = THREE.Loader.prototype;
THREE.JSONLoader.prototype = {
addStatusElement: function ( ) {
var e = document.createElement( "div" );
e.style.fontSize = "0.8em";
e.style.textAlign = "left";
e.style.background = "#b00";
e.style.color = "#fff";
e.style.width = "140px";
e.style.padding = "0.25em 0.25em 0.25em 0.5em";
e.style.position = "absolute";
e.style.right = "0px";
e.style.top = "0px";
e.style.zIndex = 1000;
e.innerHTML = "Loading ...";
return e;
},
updateProgress: function ( progress ) {
var message = "Loaded ";
if ( progress.total ) {
message += ( 100 * progress.loaded / progress.total ).toFixed(0) + "%";
} else {
message += ( progress.loaded / 1000 ).toFixed(2) + " KB";
}
this.statusDomElement.innerHTML = message;
},
// Load models generated by slim OBJ converter with ASCII option (converter_obj_three_slim.py -t ascii)
// - parameters
// - model (required)
......@@ -70,7 +26,7 @@ THREE.JSONLoader.prototype = {
var url = parameters.model,
callback = parameters.callback,
texture_path = parameters.texture_path ? parameters.texture_path : THREE.JSONLoader.prototype.extractUrlbase( url ),
texture_path = parameters.texture_path ? parameters.texture_path : THREE.Loader.prototype.extractUrlbase( url ),
s = (new Date).getTime(),
worker = new Worker( url );
......@@ -93,7 +49,7 @@ THREE.JSONLoader.prototype = {
THREE.Geometry.call( this );
THREE.JSONLoader.prototype.init_materials( scope, json.materials, texture_path );
THREE.Loader.prototype.init_materials( scope, json.materials, texture_path );
parse();
init_skin();
......@@ -110,6 +66,12 @@ THREE.JSONLoader.prototype = {
}
function isBitSet( value, position ) {
return value & ( 1 << position );
};
var i, j,
type, offset,
......@@ -341,124 +303,6 @@ THREE.JSONLoader.prototype = {
}
},
init_materials: function( scope, materials, texture_path ) {
scope.materials = [];
for ( var i = 0; i < materials.length; ++i ) {
scope.materials[ i ] = [ THREE.JSONLoader.prototype.createMaterial( materials[ i ], texture_path ) ];
}
},
createMaterial: function ( m, texture_path ) {
function is_pow2( n ) {
var l = Math.log(n) / Math.LN2;
return Math.floor(l) == l;
}
function nearest_pow2( n ) {
var l = Math.log(n) / Math.LN2;
return Math.pow( 2, Math.round(l) );
}
function load_image( where, url ) {
var image = new Image();
image.onload = function () {
if ( !is_pow2( this.width ) || !is_pow2( this.height ) ) {
var w = nearest_pow2( this.width ),
h = nearest_pow2( this.height );
where.image.width = w;
where.image.height = h;
where.image.getContext("2d").drawImage( this, 0, 0, w, h );
} else {
where.image = this;
}
where.needsUpdate = true;
};
image.src = url;
}
var material, mtype, mpars, texture, color;
// defaults
mtype = "MeshLambertMaterial";
mpars = { color: 0xeeeeee, opacity: 1.0, map: null, lightMap: null, vertexColors: m.vertexColors };
// parameters from model file
if ( m.shading ) {
if ( m.shading == "Phong" ) mtype = "MeshPhongMaterial";
}
if ( m.mapDiffuse && texture_path ) {
texture = document.createElement( 'canvas' );
mpars.map = new THREE.Texture( texture );
mpars.map.sourceFile = m.mapDiffuse;
load_image( mpars.map, texture_path + "/" + m.mapDiffuse );
} else if ( m.colorDiffuse ) {
color = ( m.colorDiffuse[0] * 255 << 16 ) + ( m.colorDiffuse[1] * 255 << 8 ) + m.colorDiffuse[2] * 255;
mpars.color = color;
mpars.opacity = m.transparency;
} else if ( m.DbgColor ) {
mpars.color = m.DbgColor;
}
if ( m.mapLightmap && texture_path ) {
texture = document.createElement( 'canvas' );
mpars.lightMap = new THREE.Texture( texture );
mpars.lightMap.sourceFile = m.mapLightmap;
load_image( mpars.lightMap, texture_path + "/" + m.mapLightmap );
}
material = new THREE[ mtype ]( mpars );
return material;
},
extractUrlbase: function( url ) {
var chunks = url.split( "/" );
chunks.pop();
return chunks.join( "/" );
}
};
\ No newline at end of file
......@@ -4,4 +4,171 @@
THREE.Loader = function () {
this.showStatus = showStatus;
this.statusDomElement = showStatus ? this.addStatusElement() : null;
};
THREE.Loader.prototype = {
addStatusElement: function ( ) {
var e = document.createElement( "div" );
e.style.fontSize = "0.8em";
e.style.textAlign = "left";
e.style.background = "#b00";
e.style.color = "#fff";
e.style.width = "140px";
e.style.padding = "0.25em 0.25em 0.25em 0.5em";
e.style.position = "absolute";
e.style.right = "0px";
e.style.top = "0px";
e.style.zIndex = 1000;
e.innerHTML = "Loading ...";
return e;
},
updateProgress: function ( progress ) {
var message = "Loaded ";
if ( progress.total ) {
message += ( 100 * progress.loaded / progress.total ).toFixed(0) + "%";
} else {
message += ( progress.loaded / 1000 ).toFixed(2) + " KB";
}
this.statusDomElement.innerHTML = message;
},
extractUrlbase: function( url ) {
var chunks = url.split( "/" );
chunks.pop();
return chunks.join( "/" );
},
init_materials: function( scope, materials, texture_path ) {
scope.materials = [];
for ( var i = 0; i < materials.length; ++i ) {
scope.materials[ i ] = [ THREE.Loader.prototype.createMaterial( materials[ i ], texture_path ) ];
}
},
createMaterial: function ( m, texture_path ) {
function is_pow2( n ) {
var l = Math.log( n ) / Math.LN2;
return Math.floor( l ) == l;
}
function nearest_pow2( n ) {
var l = Math.log( n ) / Math.LN2;
return Math.pow( 2, Math.round( l ) );
}
function load_image( where, url ) {
var image = new Image();
image.onload = function () {
if ( !is_pow2( this.width ) || !is_pow2( this.height ) ) {
var w = nearest_pow2( this.width ),
h = nearest_pow2( this.height );
where.image.width = w;
where.image.height = h;
where.image.getContext("2d").drawImage( this, 0, 0, w, h );
} else {
where.image = this;
}
where.needsUpdate = true;
};
image.src = url;
}
var material, mtype, mpars, texture, color;
// defaults
mtype = "MeshLambertMaterial";
mpars = { color: 0xeeeeee, opacity: 1.0, map: null, lightMap: null, vertexColors: m.vertexColors };
// parameters from model file
if ( m.shading ) {
if ( m.shading == "Phong" ) mtype = "MeshPhongMaterial";
}
if ( m.mapDiffuse && texture_path ) {
texture = document.createElement( 'canvas' );
mpars.map = new THREE.Texture( texture );
mpars.map.sourceFile = m.mapDiffuse;
load_image( mpars.map, texture_path + "/" + m.mapDiffuse );
} else if ( m.colorDiffuse ) {
color = ( m.colorDiffuse[0] * 255 << 16 ) + ( m.colorDiffuse[1] * 255 << 8 ) + m.colorDiffuse[2] * 255;
mpars.color = color;
mpars.opacity = m.transparency;
} else if ( m.DbgColor ) {
mpars.color = m.DbgColor;
}
if ( m.mapLightmap && texture_path ) {
texture = document.createElement( 'canvas' );
mpars.lightMap = new THREE.Texture( texture );
mpars.lightMap.sourceFile = m.mapLightmap;
load_image( mpars.lightMap, texture_path + "/" + m.mapLightmap );
}
material = new THREE[ mtype ]( mpars );
return material;
}
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册