|
@@ -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( "/" );
|
|
|
-
|
|
|
}
|
|
|
|
|
|
};
|