Browse Source

Merge remote-tracking branch 'remotes/mrdoob/dev' into morph_normals

alteredq 13 years ago
parent
commit
8367e2b17f
4 changed files with 31 additions and 36 deletions
  1. 13 13
      build/Three.js
  2. 10 10
      build/custom/ThreeExtras.js
  3. 2 2
      src/extras/loaders/JSONLoader.js
  4. 6 11
      src/extras/loaders/SceneLoader.js

+ 13 - 13
build/Three.js

@@ -518,8 +518,8 @@ c.target.addSelf(b);c.staticMoving?k=p:k.addSelf(a.sub(p,k).multiplyScalar(c.dyn
 c.object.position.add(c.target,g);c.checkDistances();c.object.lookAt(c.target)};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},!1);this.domElement.addEventListener("mousemove",function(a){c.enabled&&(d&&(e=h=c.getMouseProjectionOnBall(a.clientX,a.clientY),i=l=c.getMouseOnScreen(a.clientX,a.clientY),k=p=c.getMouseOnScreen(a.clientX,a.clientY),d=!1),-1!==f&&(0===f&&!c.noRotate?h=c.getMouseProjectionOnBall(a.clientX,a.clientY):1===f&&!c.noZoom?l=c.getMouseOnScreen(a.clientX,
 a.clientY):2===f&&!c.noPan&&(p=c.getMouseOnScreen(a.clientX,a.clientY))))},!1);this.domElement.addEventListener("mousedown",function(a){if(c.enabled&&(a.preventDefault(),a.stopPropagation(),-1===f))f=a.button,0===f&&!c.noRotate?e=h=c.getMouseProjectionOnBall(a.clientX,a.clientY):1===f&&!c.noZoom?i=l=c.getMouseOnScreen(a.clientX,a.clientY):this.noPan||(k=p=c.getMouseOnScreen(a.clientX,a.clientY))},!1);this.domElement.addEventListener("mouseup",function(a){c.enabled&&(a.preventDefault(),a.stopPropagation(),
 f=-1)},!1);window.addEventListener("keydown",function(a){c.enabled&&-1===f&&(a.keyCode===c.keys[0]&&!c.noRotate?f=0:a.keyCode===c.keys[1]&&!c.noZoom?f=1:a.keyCode===c.keys[2]&&!c.noPan&&(f=2),-1!==f&&(d=!0))},!1);window.addEventListener("keyup",function(){c.enabled&&-1!==f&&(f=-1)},!1)};
-THREE.CubeGeometry=function(a,b,c,d,f,g,e,h){function i(a,b,c,e,h,i,k,n){var m,o=d||1,p=f||1,q=h/2,r=i/2,s=l.vertices.length;if("x"===a&&"y"===b||"y"===a&&"x"===b)m="z";else if("x"===a&&"z"===b||"z"===a&&"x"===b)m="y",p=g||1;else if("z"===a&&"y"===b||"y"===a&&"z"===b)m="x",o=g||1;var j=o+1,t=p+1,w=h/o,F=i/p,P=new THREE.Vector3;P[m]=0<k?1:-1;for(h=0;h<t;h++)for(i=0;i<j;i++){var Q=new THREE.Vector3;Q[a]=(i*w-q)*c;Q[b]=(h*F-r)*e;Q[m]=k;l.vertices.push(new THREE.Vertex(Q))}for(h=0;h<p;h++)for(i=0;i<o;i++)a=
-new THREE.Face4(i+j*h+s,i+j*(h+1)+s,i+1+j*(h+1)+s,i+1+j*h+s),a.normal.copy(P),a.vertexNormals.push(P.clone(),P.clone(),P.clone(),P.clone()),a.materialIndex=n,l.faces.push(a),l.faceVertexUvs[0].push([new THREE.UV(i/o,h/p),new THREE.UV(i/o,(h+1)/p),new THREE.UV((i+1)/o,(h+1)/p),new THREE.UV((i+1)/o,h/p)])}THREE.Geometry.call(this);var l=this,k=a/2,p=b/2,n=c/2,o,q,m,r,s,t;if(void 0!==e){if(e instanceof Array)this.materials=e;else{this.materials=[];for(o=0;6>o;o++)this.materials.push(e)}o=0;r=1;q=2;s=
+THREE.CubeGeometry=function(a,b,c,d,f,g,e,h){function i(a,b,c,e,h,i,k,m){var n,o=d||1,p=f||1,q=h/2,r=i/2,s=l.vertices.length;if("x"===a&&"y"===b||"y"===a&&"x"===b)n="z";else if("x"===a&&"z"===b||"z"===a&&"x"===b)n="y",p=g||1;else if("z"===a&&"y"===b||"y"===a&&"z"===b)n="x",o=g||1;var j=o+1,t=p+1,w=h/o,F=i/p,P=new THREE.Vector3;P[n]=0<k?1:-1;for(h=0;h<t;h++)for(i=0;i<j;i++){var Q=new THREE.Vector3;Q[a]=(i*w-q)*c;Q[b]=(h*F-r)*e;Q[n]=k;l.vertices.push(new THREE.Vertex(Q))}for(h=0;h<p;h++)for(i=0;i<o;i++)a=
+new THREE.Face4(i+j*h+s,i+j*(h+1)+s,i+1+j*(h+1)+s,i+1+j*h+s),a.normal.copy(P),a.vertexNormals.push(P.clone(),P.clone(),P.clone(),P.clone()),a.materialIndex=m,l.faces.push(a),l.faceVertexUvs[0].push([new THREE.UV(i/o,h/p),new THREE.UV(i/o,(h+1)/p),new THREE.UV((i+1)/o,(h+1)/p),new THREE.UV((i+1)/o,h/p)])}THREE.Geometry.call(this);var l=this,k=a/2,p=b/2,n=c/2,o,q,m,r,s,t;if(void 0!==e){if(e instanceof Array)this.materials=e;else{this.materials=[];for(o=0;6>o;o++)this.materials.push(e)}o=0;r=1;q=2;s=
 3;m=4;t=5}else this.materials=[];this.sides={px:!0,nx:!0,py:!0,ny:!0,pz:!0,nz:!0};if(void 0!=h)for(var w in h)void 0!==this.sides[w]&&(this.sides[w]=h[w]);this.sides.px&&i("z","y",-1,-1,c,b,k,o);this.sides.nx&&i("z","y",1,-1,c,b,-k,r);this.sides.py&&i("x","z",1,1,a,c,p,q);this.sides.ny&&i("x","z",1,-1,a,c,-p,s);this.sides.pz&&i("x","y",1,-1,a,b,n,m);this.sides.nz&&i("x","y",-1,-1,a,b,-n,t);this.computeCentroids();this.mergeVertices()};THREE.CubeGeometry.prototype=new THREE.Geometry;
 THREE.CubeGeometry.prototype.constructor=THREE.CubeGeometry;
 THREE.CylinderGeometry=function(a,b,c,d,f,g){THREE.Geometry.call(this);var a=void 0!==a?a:20,b=void 0!==b?b:20,c=void 0!==c?c:100,e=c/2,d=d||8,f=f||1,h,i,l=[],k=[];for(i=0;i<=f;i++){var p=[],n=[],o=i/f,q=o*(b-a)+a;for(h=0;h<=d;h++){var m=h/d,r=q*Math.sin(2*m*Math.PI),s=-o*c+e,t=q*Math.cos(2*m*Math.PI);this.vertices.push(new THREE.Vertex(new THREE.Vector3(r,s,t)));p.push(this.vertices.length-1);n.push(new THREE.UV(m,o))}l.push(p);k.push(n)}for(i=0;i<f;i++)for(h=0;h<d;h++){var c=l[i][h],p=l[i+1][h],
@@ -529,7 +529,7 @@ n=l[i+1][h+1],o=l[i][h+1],q=this.vertices[c].position.clone().setY(0).normalize(
 THREE.ExtrudeGeometry=function(a,b){if("undefined"!==typeof a){THREE.Geometry.call(this);var a=a instanceof Array?a:[a],c,d,f=a.length;this.shapebb=a[f-1].getBoundingBox();for(d=0;d<f;d++)c=a[d],this.addShape(c,b);this.computeCentroids();this.computeFaceNormals()}};THREE.ExtrudeGeometry.prototype=new THREE.Geometry;THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;
 THREE.ExtrudeGeometry.prototype.addShape=function(a,b){function c(a,b,c){b||console.log("die");return b.clone().multiplyScalar(c).addSelf(a)}function d(a,b,c){var d=THREE.ExtrudeGeometry.__v1,e=THREE.ExtrudeGeometry.__v2,f=THREE.ExtrudeGeometry.__v3,g=THREE.ExtrudeGeometry.__v4,h=THREE.ExtrudeGeometry.__v5,j=THREE.ExtrudeGeometry.__v6;d.set(a.x-b.x,a.y-b.y);e.set(a.x-c.x,a.y-c.y);d=d.normalize();e=e.normalize();f.set(-d.y,d.x);g.set(e.y,-e.x);h.copy(a).addSelf(f);j.copy(a).addSelf(g);if(h.equals(j))return g.clone();
 h.copy(b).addSelf(f);j.copy(c).addSelf(g);f=d.dot(g);g=j.subSelf(h).dot(g);0===f&&(console.log("Either infinite or no solutions!"),0===g?console.log("Its finite solutions."):console.log("Too bad, no solutions."));g/=f;return 0>g?(b=Math.atan2(b.y-a.y,b.x-a.x),a=Math.atan2(c.y-a.y,c.x-a.x),b>a&&(a+=2*Math.PI),c=(b+a)/2,a=-Math.cos(c),c=-Math.sin(c),new THREE.Vector2(a,c)):d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function f(a){for(j=a.length;0<=--j;){A=j;F=j-1;0>F&&(F=a.length-1);for(var b=
-0,c=o+2*k,b=0;b<c;b++){var d=O*b,e=O*(b+1),f=ha+A+d,g=ha+A+e,l=f,d=ha+F+d,e=ha+F+e,m=g,l=l+E,d=d+E,e=e+E,m=m+E;B.faces.push(new THREE.Face4(l,d,e,m,null,null,u));void 0!==u&&(l=b/c,d=(b+1)/c,e=h+2*i,f=(B.vertices[f].position.z+i)/e,g=(B.vertices[g].position.z+i)/e,B.faceVertexUvs[0].push([new THREE.UV(f,l),new THREE.UV(g,l),new THREE.UV(g,d),new THREE.UV(f,d)]))}}}function g(a,b,c){B.vertices.push(new THREE.Vertex(new THREE.Vector3(a,b,c)))}function e(a,b,c){a+=E;b+=E;c+=E;B.faces.push(new THREE.Face3(a,
+0,c=o+2*k,b=0;b<c;b++){var d=O*b,e=O*(b+1),f=ha+A+d,g=ha+A+e,l=f,d=ha+F+d,e=ha+F+e,n=g,l=l+E,d=d+E,e=e+E,n=n+E;B.faces.push(new THREE.Face4(l,d,e,n,null,null,u));void 0!==u&&(l=b/c,d=(b+1)/c,e=h+2*i,f=(B.vertices[f].position.z+i)/e,g=(B.vertices[g].position.z+i)/e,B.faceVertexUvs[0].push([new THREE.UV(f,l),new THREE.UV(g,l),new THREE.UV(g,d),new THREE.UV(f,d)]))}}}function g(a,b,c){B.vertices.push(new THREE.Vertex(new THREE.Vector3(a,b,c)))}function e(a,b,c){a+=E;b+=E;c+=E;B.faces.push(new THREE.Face3(a,
 b,c,null,null,w));if(void 0!==w){var d=v.minX,e=v.minY,f=v.maxY,g=v.maxX,h=B.vertices[b].position.x-d,b=B.vertices[b].position.y-e,j=B.vertices[c].position.x-d,c=B.vertices[c].position.y-e;B.faceVertexUvs[0].push([new THREE.UV((B.vertices[a].position.x-d)/g,(B.vertices[a].position.y-e)/f),new THREE.UV(h/g,b/f),new THREE.UV(j/g,c/f)])}}var h=void 0!==b.amount?b.amount:100,i=void 0!==b.bevelThickness?b.bevelThickness:6,l=void 0!==b.bevelSize?b.bevelSize:i-2,k=void 0!==b.bevelSegments?b.bevelSegments:
 3,p=void 0!==b.bevelEnabled?b.bevelEnabled:!0,n=void 0!==b.curveSegments?b.curveSegments:12,o=void 0!==b.steps?b.steps:1,q=b.bendPath,m=b.extrudePath,r,s=!1,t=void 0!==b.useSpacedPoints?b.useSpacedPoints:!1,w=b.material,u=b.extrudeMaterial,v=this.shapebb;if(m)r=m.getPoints(n),o=r.length,s=!0,p=!1;p||(l=i=k=0);var y,D,C,B=this,E=this.vertices.length;q&&a.addWrapPath(q);n=t?a.extractAllSpacedPoints(n):a.extractAllPoints(n);q=n.shape;n=n.holes;if(m=!THREE.Shape.Utils.isClockWise(q)){q=q.reverse();for(D=
 0,C=n.length;D<C;D++)y=n[D],THREE.Shape.Utils.isClockWise(y)&&(n[D]=y.reverse());m=!1}m=THREE.Shape.Utils.triangulateShape(q,n);t=q;for(D=0,C=n.length;D<C;D++)y=n[D],q=q.concat(y);for(var J,N,R,K,O=q.length,M=m.length,H=[],j=0,Y=t.length,A=Y-1,F=j+1;j<Y;j++,A++,F++)A===Y&&(A=0),F===Y&&(F=0),H[j]=d(t[j],t[A],t[F]);var P=[],Q,da=H.concat();for(D=0,C=n.length;D<C;D++){y=n[D];Q=[];for(j=0,Y=y.length,A=Y-1,F=j+1;j<Y;j++,A++,F++)A===Y&&(A=0),F===Y&&(F=0),Q[j]=d(y[j],y[A],y[F]);P.push(Q);da=da.concat(Q)}for(J=
@@ -682,8 +682,8 @@ d.morphNormals[c].faceNormals=[];d.morphNormals[c].vertexNormals=[];o=d.morphTar
 d:new THREE.Vector3},m.push(k),r.push(p)}}if(void 0!==a.morphColors)for(c=0,f=a.morphColors.length;c<f;c++){d.morphColors[c]={};d.morphColors[c].name=a.morphColors[c].name;d.morphColors[c].colors=[];r=d.morphColors[c].colors;i=a.morphColors[c].colors;for(b=0,m=i.length;b<m;b+=3)l=new THREE.Color(16755200),l.setRGB(i[b],i[b+1],i[b+2]),r.push(l)}})(f);d.computeCentroids();(function(){var a,b,c,f,l;for(c=0,f=d.faces.length;c<f;c++){l=d.faces[c];l.__originalVertexNormals=[];for(a=0,b=l.vertexNormals.length;a<
 b;a++)l.__originalVertexNormals[a]=l.vertexNormals[a].clone()}var k=new THREE.Geometry;k.faces=d.faces;for(a=0,b=d.morphTargets.length;a<b;a++){var p=d.morphNormals[a];k.vertices=d.morphTargets[a].vertices;k.computeFaceNormals();k.computeVertexNormals();var n,o;for(c=0,f=d.faces.length;c<f;c++)l=d.faces[c],n=p.faceNormals[c],o=p.vertexNormals[c],n.copy(l.normal),l instanceof THREE.Face3?(o.a.copy(l.vertexNormals[0]),o.b.copy(l.vertexNormals[1]),o.c.copy(l.vertexNormals[2])):(o.a.copy(l.vertexNormals[0]),
 o.b.copy(l.vertexNormals[1]),o.c.copy(l.vertexNormals[2]),o.d.copy(l.vertexNormals[3]))}for(c=0,f=d.faces.length;c<f;c++)l=d.faces[c],l.vertexNormals=l.__originalVertexNormals})();d.computeFaceNormals();this.hasNormals(d)&&d.computeTangents();b(d)};THREE.SceneLoader=function(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){};this.callbackSync=function(){};this.callbackProgress=function(){}};THREE.SceneLoader.prototype.constructor=THREE.SceneLoader;
-THREE.SceneLoader.prototype.load=function(a,b){var c=this,d=new XMLHttpRequest;d.onreadystatechange=function(){if(4==d.readyState)if(200==d.status||0==d.status)try{var f=JSON.parse(d.responseText);void 0===f.metadata||void 0===f.metadata.formatVersion||3!==f.metadata.formatVersion?console.error("Deprecated file format."):c.createScene(f,b,a)}catch(g){console.error(g),console.warn("DEPRECATED: ["+a+"] seems to be using old model format")}else console.error("Couldn't load ["+a+"] ["+d.status+"]")};
-d.open("GET",a,!0);d.overrideMimeType&&d.overrideMimeType("text/plain; charset=x-user-defined");d.setRequestHeader("Content-Type","text/plain");d.send(null)};
+THREE.SceneLoader.prototype.load=function(a,b){var c=this,d=new XMLHttpRequest;d.onreadystatechange=function(){if(4==d.readyState)if(200==d.status||0==d.status){try{var f=JSON.parse(d.responseText)}catch(g){console.warn("DEPRECATED: ["+a+"] seems to be using old model format")}c.createScene(f,b,a)}else console.error("Couldn't load ["+a+"] ["+d.status+"]")};d.open("GET",a,!0);d.overrideMimeType&&d.overrideMimeType("text/plain; charset=x-user-defined");d.setRequestHeader("Content-Type","text/plain");
+d.send(null)};
 THREE.SceneLoader.prototype.createScene=function(a,b,c){function d(a,b){return"relativeToHTML"==b?a:l+"/"+a}function f(){var a;for(n in K.objects)if(!A.objects[n])if(s=K.objects[n],void 0!==s.geometry){if(E=A.geometries[s.geometry]){a=!1;J=A.materials[s.materials[0]];(a=J instanceof THREE.ShaderMaterial)&&E.computeTangents();u=s.position;v=s.rotation;y=s.quaternion;D=s.scale;y=0;0==s.materials.length&&(J=new THREE.MeshFaceMaterial);1<s.materials.length&&(J=new THREE.MeshFaceMaterial);a=new THREE.Mesh(E,
 J);a.name=n;a.position.set(u[0],u[1],u[2]);y?(a.quaternion.set(y[0],y[1],y[2],y[3]),a.useQuaternion=!0):a.rotation.set(v[0],v[1],v[2]);a.scale.set(D[0],D[1],D[2]);a.visible=s.visible;A.scene.add(a);A.objects[n]=a;if(s.meshCollider){var b=THREE.CollisionUtils.MeshColliderWBox(a);A.scene.collisions.colliders.push(b)}if(s.castsShadow)b=new THREE.ShadowVolume(E),A.scene.add(b),b.position=a.position,b.rotation=a.rotation,b.scale=a.scale;s.trigger&&"none"!=s.trigger.toLowerCase()&&(b={type:s.trigger,object:s},
 A.triggers[a.name]=b)}}else u=s.position,v=s.rotation,y=s.quaternion,D=s.scale,y=0,a=new THREE.Object3D,a.name=n,a.position.set(u[0],u[1],u[2]),y?(a.quaternion.set(y[0],y[1],y[2],y[3]),a.useQuaternion=!0):a.rotation.set(v[0],v[1],v[2]),a.scale.set(D[0],D[1],D[2]),a.visible=void 0!==s.visible?s.visible:!1,A.scene.add(a),A.objects[n]=a,A.empties[n]=a,s.trigger&&"none"!=s.trigger.toLowerCase()&&(b={type:s.trigger,object:s},A.triggers[a.name]=b)}function g(a){return function(b){A.geometries[a]=b;f();
@@ -691,14 +691,14 @@ M-=1;i.onLoadComplete();h()}}function e(a){return function(b){A.geometries[a]=b}
 empties:{}};a=!1;for(n in K.objects)if(s=K.objects[n],s.meshCollider){a=!0;break}if(a)A.scene.collisions=new THREE.CollisionSystem;if(K.transform)a=K.transform.position,t=K.transform.rotation,C=K.transform.scale,a&&A.scene.position.set(a[0],a[1],a[2]),t&&A.scene.rotation.set(t[0],t[1],t[2]),C&&A.scene.scale.set(C[0],C[1],C[2]),(a||t||C)&&A.scene.updateMatrix();a=function(){H-=1;h();i.onLoadComplete()};for(q in K.cameras)C=K.cameras[q],"perspective"==C.type?N=new THREE.PerspectiveCamera(C.fov,C.aspect,
 C.near,C.far):"ortho"==C.type&&(N=new THREE.OrthographicCamera(C.left,C.right,C.top,C.bottom,C.near,C.far)),u=C.position,t=C.target,C=C.up,N.position.set(u[0],u[1],u[2]),N.target=new THREE.Vector3(t[0],t[1],t[2]),C&&N.up.set(C[0],C[1],C[2]),A.cameras[q]=N;for(o in K.lights)t=K.lights[o],q=void 0!==t.color?t.color:16777215,N=void 0!==t.intensity?t.intensity:1,"directional"==t.type?(u=t.direction,w=new THREE.DirectionalLight(q,N),w.position.set(u[0],u[1],u[2]),w.position.normalize()):"point"==t.type?
 (u=t.position,w=t.distance,w=new THREE.PointLight(q,N,w),w.position.set(u[0],u[1],u[2])):"ambient"==t.type&&(w=new THREE.AmbientLight(q)),A.scene.add(w),A.lights[o]=w;for(m in K.fogs)o=K.fogs[m],"linear"==o.type?R=new THREE.Fog(0,o.near,o.far):"exp2"==o.type&&(R=new THREE.FogExp2(0,o.density)),C=o.color,R.color.setRGB(C[0],C[1],C[2]),A.fogs[m]=R;if(A.cameras&&K.defaults.camera)A.currentCamera=A.cameras[K.defaults.camera];if(A.fogs&&K.defaults.fog)A.scene.fog=A.fogs[K.defaults.fog];C=K.defaults.bgcolor;
-A.bgColor=new THREE.Color;A.bgColor.setRGB(C[0],C[1],C[2]);A.bgColorAlpha=K.defaults.bgalpha;for(k in K.geometries)if(m=K.geometries[k],"bin_mesh"==m.type||"ascii_mesh"==m.type)M+=1,i.onLoadStart();j=M;for(k in K.geometries)m=K.geometries[k],"cube"==m.type?(E=new THREE.CubeGeometry(m.width,m.height,m.depth,m.segmentsWidth,m.segmentsHeight,m.segmentsDepth,null,m.flipped,m.sides),A.geometries[k]=E):"plane"==m.type?(E=new THREE.PlaneGeometry(m.width,m.height,m.segmentsWidth,m.segmentsHeight),A.geometries[k]=
-E):"sphere"==m.type?(E=new THREE.SphereGeometry(m.radius,m.segmentsWidth,m.segmentsHeight),A.geometries[k]=E):"cylinder"==m.type?(E=new THREE.CylinderGeometry(m.topRad,m.botRad,m.height,m.radSegs,m.heightSegs),A.geometries[k]=E):"torus"==m.type?(E=new THREE.TorusGeometry(m.radius,m.tube,m.segmentsR,m.segmentsT),A.geometries[k]=E):"icosahedron"==m.type?(E=new THREE.IcosahedronGeometry(m.radius,m.subdivisions),A.geometries[k]=E):"bin_mesh"==m.type?c.load(d(m.url,K.urlBaseType),g(k)):"ascii_mesh"==m.type?
-O.load(d(m.url,K.urlBaseType),g(k)):"embedded_mesh"==m.type&&(m=K.embeds[m.id])&&O.createModel(m,e(k),"");for(r in K.textures)if(k=K.textures[r],k.url instanceof Array){H+=k.url.length;for(m=0;m<k.url.length;m++)i.onLoadStart()}else H+=1,i.onLoadStart();Y=H;for(r in K.textures){k=K.textures[r];if(void 0!=k.mapping&&void 0!=THREE[k.mapping])k.mapping=new THREE[k.mapping];if(k.url instanceof Array){m=[];for(R=0;R<k.url.length;R++)m[R]=d(k.url[R],K.urlBaseType);m=THREE.ImageUtils.loadTextureCube(m,k.mapping,
-a)}else{m=THREE.ImageUtils.loadTexture(d(k.url,K.urlBaseType),k.mapping,a);if(void 0!=THREE[k.minFilter])m.minFilter=THREE[k.minFilter];if(void 0!=THREE[k.magFilter])m.magFilter=THREE[k.magFilter];if(k.repeat){m.repeat.set(k.repeat[0],k.repeat[1]);if(1!=k.repeat[0])m.wrapS=THREE.RepeatWrapping;if(1!=k.repeat[1])m.wrapT=THREE.RepeatWrapping}k.offset&&m.offset.set(k.offset[0],k.offset[1]);if(k.wrap){R={repeat:THREE.RepeatWrapping,mirror:THREE.MirroredRepeatWrapping};if(void 0!==R[k.wrap[0]])m.wrapS=
-R[k.wrap[0]];if(void 0!==R[k.wrap[1]])m.wrapT=R[k.wrap[1]]}}A.textures[r]=m}for(p in K.materials){r=K.materials[p];for(B in r.parameters)if("envMap"==B||"map"==B||"lightMap"==B)r.parameters[B]=A.textures[r.parameters[B]];else if("shading"==B)r.parameters[B]="flat"==r.parameters[B]?THREE.FlatShading:THREE.SmoothShading;else if("blending"==B)r.parameters[B]=THREE[r.parameters[B]]?THREE[r.parameters[B]]:THREE.NormalBlending;else if("combine"==B)r.parameters[B]="MixOperation"==r.parameters[B]?THREE.MixOperation:
-THREE.MultiplyOperation;else if("vertexColors"==B)if("face"==r.parameters[B])r.parameters[B]=THREE.FaceColors;else if(r.parameters[B])r.parameters[B]=THREE.VertexColors;if(void 0!==r.parameters.opacity&&1>r.parameters.opacity)r.parameters.transparent=!0;if(r.parameters.normalMap){k=THREE.ShaderUtils.lib.normal;a=THREE.UniformsUtils.clone(k.uniforms);m=r.parameters.color;R=r.parameters.specular;c=r.parameters.ambient;O=r.parameters.shininess;a.tNormal.texture=A.textures[r.parameters.normalMap];if(r.parameters.normalMapFactor)a.uNormalScale.value=
-r.parameters.normalMapFactor;if(r.parameters.map)a.tDiffuse.texture=r.parameters.map,a.enableDiffuse.value=!0;if(r.parameters.lightMap)a.tAO.texture=r.parameters.lightMap,a.enableAO.value=!0;if(r.parameters.specularMap)a.tSpecular.texture=A.textures[r.parameters.specularMap],a.enableSpecular.value=!0;a.uDiffuseColor.value.setHex(m);a.uSpecularColor.value.setHex(R);a.uAmbientColor.value.setHex(c);a.uShininess.value=O;if(r.parameters.opacity)a.uOpacity.value=r.parameters.opacity;J=new THREE.ShaderMaterial({fragmentShader:k.fragmentShader,
-vertexShader:k.vertexShader,uniforms:a,lights:!0,fog:!0})}else J=new THREE[r.type](r.parameters);A.materials[p]=J}f();i.callbackSync(A);h()};THREE.UTF8Loader=function(){};THREE.UTF8Loader.prototype=new THREE.UTF8Loader;THREE.UTF8Loader.prototype.constructor=THREE.UTF8Loader;
+A.bgColor=new THREE.Color;A.bgColor.setRGB(C[0],C[1],C[2]);A.bgColorAlpha=K.defaults.bgalpha;for(k in K.geometries)if(m=K.geometries[k],"bin_mesh"==m.type||"ascii_mesh"==m.type)M+=1,i.onLoadStart();j=M;for(k in K.geometries)if(m=K.geometries[k],"cube"==m.type)E=new THREE.CubeGeometry(m.width,m.height,m.depth,m.segmentsWidth,m.segmentsHeight,m.segmentsDepth,null,m.flipped,m.sides),A.geometries[k]=E;else if("plane"==m.type)E=new THREE.PlaneGeometry(m.width,m.height,m.segmentsWidth,m.segmentsHeight),
+A.geometries[k]=E;else if("sphere"==m.type)E=new THREE.SphereGeometry(m.radius,m.segmentsWidth,m.segmentsHeight),A.geometries[k]=E;else if("cylinder"==m.type)E=new THREE.CylinderGeometry(m.topRad,m.botRad,m.height,m.radSegs,m.heightSegs),A.geometries[k]=E;else if("torus"==m.type)E=new THREE.TorusGeometry(m.radius,m.tube,m.segmentsR,m.segmentsT),A.geometries[k]=E;else if("icosahedron"==m.type)E=new THREE.IcosahedronGeometry(m.radius,m.subdivisions),A.geometries[k]=E;else if("bin_mesh"==m.type)c.load(d(m.url,
+K.urlBaseType),g(k));else if("ascii_mesh"==m.type)O.load(d(m.url,K.urlBaseType),g(k));else if("embedded_mesh"==m.type)m=K.embeds[m.id],m.metadata=K.metadata,m&&O.createModel(m,e(k),"");for(r in K.textures)if(k=K.textures[r],k.url instanceof Array){H+=k.url.length;for(m=0;m<k.url.length;m++)i.onLoadStart()}else H+=1,i.onLoadStart();Y=H;for(r in K.textures){k=K.textures[r];if(void 0!=k.mapping&&void 0!=THREE[k.mapping])k.mapping=new THREE[k.mapping];if(k.url instanceof Array){m=[];for(R=0;R<k.url.length;R++)m[R]=
+d(k.url[R],K.urlBaseType);m=THREE.ImageUtils.loadTextureCube(m,k.mapping,a)}else{m=THREE.ImageUtils.loadTexture(d(k.url,K.urlBaseType),k.mapping,a);if(void 0!=THREE[k.minFilter])m.minFilter=THREE[k.minFilter];if(void 0!=THREE[k.magFilter])m.magFilter=THREE[k.magFilter];if(k.repeat){m.repeat.set(k.repeat[0],k.repeat[1]);if(1!=k.repeat[0])m.wrapS=THREE.RepeatWrapping;if(1!=k.repeat[1])m.wrapT=THREE.RepeatWrapping}k.offset&&m.offset.set(k.offset[0],k.offset[1]);if(k.wrap){R={repeat:THREE.RepeatWrapping,
+mirror:THREE.MirroredRepeatWrapping};if(void 0!==R[k.wrap[0]])m.wrapS=R[k.wrap[0]];if(void 0!==R[k.wrap[1]])m.wrapT=R[k.wrap[1]]}}A.textures[r]=m}for(p in K.materials){r=K.materials[p];for(B in r.parameters)if("envMap"==B||"map"==B||"lightMap"==B)r.parameters[B]=A.textures[r.parameters[B]];else if("shading"==B)r.parameters[B]="flat"==r.parameters[B]?THREE.FlatShading:THREE.SmoothShading;else if("blending"==B)r.parameters[B]=THREE[r.parameters[B]]?THREE[r.parameters[B]]:THREE.NormalBlending;else if("combine"==
+B)r.parameters[B]="MixOperation"==r.parameters[B]?THREE.MixOperation:THREE.MultiplyOperation;else if("vertexColors"==B)if("face"==r.parameters[B])r.parameters[B]=THREE.FaceColors;else if(r.parameters[B])r.parameters[B]=THREE.VertexColors;if(void 0!==r.parameters.opacity&&1>r.parameters.opacity)r.parameters.transparent=!0;if(r.parameters.normalMap){k=THREE.ShaderUtils.lib.normal;a=THREE.UniformsUtils.clone(k.uniforms);m=r.parameters.color;R=r.parameters.specular;c=r.parameters.ambient;O=r.parameters.shininess;
+a.tNormal.texture=A.textures[r.parameters.normalMap];if(r.parameters.normalMapFactor)a.uNormalScale.value=r.parameters.normalMapFactor;if(r.parameters.map)a.tDiffuse.texture=r.parameters.map,a.enableDiffuse.value=!0;if(r.parameters.lightMap)a.tAO.texture=r.parameters.lightMap,a.enableAO.value=!0;if(r.parameters.specularMap)a.tSpecular.texture=A.textures[r.parameters.specularMap],a.enableSpecular.value=!0;a.uDiffuseColor.value.setHex(m);a.uSpecularColor.value.setHex(R);a.uAmbientColor.value.setHex(c);
+a.uShininess.value=O;if(r.parameters.opacity)a.uOpacity.value=r.parameters.opacity;J=new THREE.ShaderMaterial({fragmentShader:k.fragmentShader,vertexShader:k.vertexShader,uniforms:a,lights:!0,fog:!0})}else J=new THREE[r.type](r.parameters);A.materials[p]=J}f();i.callbackSync(A);h()};THREE.UTF8Loader=function(){};THREE.UTF8Loader.prototype=new THREE.UTF8Loader;THREE.UTF8Loader.prototype.constructor=THREE.UTF8Loader;
 THREE.UTF8Loader.prototype.load=function(a,b,c){if(a instanceof Object)console.warn("DEPRECATED: UTF8Loader( parameters ) is now UTF8Loader( url, callback, metaData )."),c=a,a=c.model,b=c.callback,c={scale:c.scale,offsetX:c.offsetX,offsetY:c.offsetY,offsetZ:c.offsetZ};var d=new XMLHttpRequest,f=void 0!==c.scale?c.scale:1,g=void 0!==c.offsetX?c.offsetX:0,e=void 0!==c.offsetY?c.offsetY:0,h=void 0!==c.offsetZ?c.offsetZ:0;d.onreadystatechange=function(){4==d.readyState?200==d.status||0==d.status?THREE.UTF8Loader.prototype.createModel(d.responseText,
 b,f,g,e,h):alert("Couldn't load ["+a+"] ["+d.status+"]"):3!=d.readyState&&2==d.readyState&&d.getResponseHeader("Content-Length")};d.open("GET",a,!0);d.send(null)};THREE.UTF8Loader.prototype.decompressMesh=function(a){var b=a.charCodeAt(0);57344<=b&&(b-=2048);b++;for(var c=new Float32Array(8*b),d=1,f=0;8>f;f++){for(var g=0,e=0;e<b;++e){var h=a.charCodeAt(e+d),g=g+(h>>1^-(h&1));c[8*e+f]=g}d+=b}b=a.length-d;g=new Uint16Array(b);for(f=e=0;f<b;f++)h=a.charCodeAt(f+d),g[f]=e-h,0==h&&e++;return[c,g]};
 THREE.UTF8Loader.prototype.createModel=function(a,b,c,d,f,g){var e=function(){var b=this;b.materials=[];THREE.Geometry.call(this);var e=THREE.UTF8Loader.prototype.decompressMesh(a),l=[],k=[];(function(a,e,i){for(var l,k,r,s=a.length;i<s;i+=e)l=a[i],k=a[i+1],r=a[i+2],l=l/16383*c,k=k/16383*c,r=r/16383*c,l+=d,k+=f,r+=g,b.vertices.push(new THREE.Vertex(new THREE.Vector3(l,k,r)))})(e[0],8,0);(function(a,b,c){for(var d,e,f=a.length;c<f;c+=b)d=a[c],e=a[c+1],d/=1023,e/=1023,k.push(d,1-e)})(e[0],8,3);(function(a,

+ 10 - 10
build/custom/ThreeExtras.js

@@ -321,8 +321,8 @@ d.morphNormals[c].faceNormals=[];d.morphNormals[c].vertexNormals=[];n=d.morphTar
 d:new THREE.Vector3},m.push(k),o.push(q)}}if(void 0!==a.morphColors)for(c=0,f=a.morphColors.length;c<f;c++){d.morphColors[c]={};d.morphColors[c].name=a.morphColors[c].name;d.morphColors[c].colors=[];o=d.morphColors[c].colors;i=a.morphColors[c].colors;for(b=0,m=i.length;b<m;b+=3)j=new THREE.Color(16755200),j.setRGB(i[b],i[b+1],i[b+2]),o.push(j)}})(f);d.computeCentroids();(function(){var a,b,c,f,j;for(c=0,f=d.faces.length;c<f;c++){j=d.faces[c];j.__originalVertexNormals=[];for(a=0,b=j.vertexNormals.length;a<
 b;a++)j.__originalVertexNormals[a]=j.vertexNormals[a].clone()}var k=new THREE.Geometry;k.faces=d.faces;for(a=0,b=d.morphTargets.length;a<b;a++){var q=d.morphNormals[a];k.vertices=d.morphTargets[a].vertices;k.computeFaceNormals();k.computeVertexNormals();var l,n;for(c=0,f=d.faces.length;c<f;c++)j=d.faces[c],l=q.faceNormals[c],n=q.vertexNormals[c],l.copy(j.normal),j instanceof THREE.Face3?(n.a.copy(j.vertexNormals[0]),n.b.copy(j.vertexNormals[1]),n.c.copy(j.vertexNormals[2])):(n.a.copy(j.vertexNormals[0]),
 n.b.copy(j.vertexNormals[1]),n.c.copy(j.vertexNormals[2]),n.d.copy(j.vertexNormals[3]))}for(c=0,f=d.faces.length;c<f;c++)j=d.faces[c],j.vertexNormals=j.__originalVertexNormals})();d.computeFaceNormals();this.hasNormals(d)&&d.computeTangents();b(d)};THREE.SceneLoader=function(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){};this.callbackSync=function(){};this.callbackProgress=function(){}};THREE.SceneLoader.prototype.constructor=THREE.SceneLoader;
-THREE.SceneLoader.prototype.load=function(a,b){var c=this,d=new XMLHttpRequest;d.onreadystatechange=function(){if(4==d.readyState)if(200==d.status||0==d.status)try{var f=JSON.parse(d.responseText);void 0===f.metadata||void 0===f.metadata.formatVersion||3!==f.metadata.formatVersion?console.error("Deprecated file format."):c.createScene(f,b,a)}catch(g){console.error(g),console.warn("DEPRECATED: ["+a+"] seems to be using old model format")}else console.error("Couldn't load ["+a+"] ["+d.status+"]")};
-d.open("GET",a,!0);d.overrideMimeType&&d.overrideMimeType("text/plain; charset=x-user-defined");d.setRequestHeader("Content-Type","text/plain");d.send(null)};
+THREE.SceneLoader.prototype.load=function(a,b){var c=this,d=new XMLHttpRequest;d.onreadystatechange=function(){if(4==d.readyState)if(200==d.status||0==d.status){try{var f=JSON.parse(d.responseText)}catch(g){console.warn("DEPRECATED: ["+a+"] seems to be using old model format")}c.createScene(f,b,a)}else console.error("Couldn't load ["+a+"] ["+d.status+"]")};d.open("GET",a,!0);d.overrideMimeType&&d.overrideMimeType("text/plain; charset=x-user-defined");d.setRequestHeader("Content-Type","text/plain");
+d.send(null)};
 THREE.SceneLoader.prototype.createScene=function(a,b,c){function d(a,b){return"relativeToHTML"==b?a:j+"/"+a}function f(){var a;for(l in B.objects)if(!C.objects[l])if(p=B.objects[l],void 0!==p.geometry){if(F=C.geometries[p.geometry]){a=!1;E=C.materials[p.materials[0]];(a=E instanceof THREE.ShaderMaterial)&&F.computeTangents();u=p.position;v=p.rotation;w=p.quaternion;z=p.scale;w=0;0==p.materials.length&&(E=new THREE.MeshFaceMaterial);1<p.materials.length&&(E=new THREE.MeshFaceMaterial);a=new THREE.Mesh(F,
 E);a.name=l;a.position.set(u[0],u[1],u[2]);w?(a.quaternion.set(w[0],w[1],w[2],w[3]),a.useQuaternion=!0):a.rotation.set(v[0],v[1],v[2]);a.scale.set(z[0],z[1],z[2]);a.visible=p.visible;C.scene.add(a);C.objects[l]=a;if(p.meshCollider){var b=THREE.CollisionUtils.MeshColliderWBox(a);C.scene.collisions.colliders.push(b)}if(p.castsShadow)b=new THREE.ShadowVolume(F),C.scene.add(b),b.position=a.position,b.rotation=a.rotation,b.scale=a.scale;p.trigger&&"none"!=p.trigger.toLowerCase()&&(b={type:p.trigger,object:p},
 C.triggers[a.name]=b)}}else u=p.position,v=p.rotation,w=p.quaternion,z=p.scale,w=0,a=new THREE.Object3D,a.name=l,a.position.set(u[0],u[1],u[2]),w?(a.quaternion.set(w[0],w[1],w[2],w[3]),a.useQuaternion=!0):a.rotation.set(v[0],v[1],v[2]),a.scale.set(z[0],z[1],z[2]),a.visible=void 0!==p.visible?p.visible:!1,C.scene.add(a),C.objects[l]=a,C.empties[l]=a,p.trigger&&"none"!=p.trigger.toLowerCase()&&(b={type:p.trigger,object:p},C.triggers[a.name]=b)}function g(a){return function(b){C.geometries[a]=b;f();
@@ -330,14 +330,14 @@ D-=1;i.onLoadComplete();h()}}function e(a){return function(b){C.geometries[a]=b}
 empties:{}};a=!1;for(l in B.objects)if(p=B.objects[l],p.meshCollider){a=!0;break}if(a)C.scene.collisions=new THREE.CollisionSystem;if(B.transform)a=B.transform.position,s=B.transform.rotation,x=B.transform.scale,a&&C.scene.position.set(a[0],a[1],a[2]),s&&C.scene.rotation.set(s[0],s[1],s[2]),x&&C.scene.scale.set(x[0],x[1],x[2]),(a||s||x)&&C.scene.updateMatrix();a=function(){I-=1;h();i.onLoadComplete()};for(r in B.cameras)x=B.cameras[r],"perspective"==x.type?J=new THREE.PerspectiveCamera(x.fov,x.aspect,
 x.near,x.far):"ortho"==x.type&&(J=new THREE.OrthographicCamera(x.left,x.right,x.top,x.bottom,x.near,x.far)),u=x.position,s=x.target,x=x.up,J.position.set(u[0],u[1],u[2]),J.target=new THREE.Vector3(s[0],s[1],s[2]),x&&J.up.set(x[0],x[1],x[2]),C.cameras[r]=J;for(n in B.lights)s=B.lights[n],r=void 0!==s.color?s.color:16777215,J=void 0!==s.intensity?s.intensity:1,"directional"==s.type?(u=s.direction,t=new THREE.DirectionalLight(r,J),t.position.set(u[0],u[1],u[2]),t.position.normalize()):"point"==s.type?
 (u=s.position,t=s.distance,t=new THREE.PointLight(r,J,t),t.position.set(u[0],u[1],u[2])):"ambient"==s.type&&(t=new THREE.AmbientLight(r)),C.scene.add(t),C.lights[n]=t;for(m in B.fogs)n=B.fogs[m],"linear"==n.type?G=new THREE.Fog(0,n.near,n.far):"exp2"==n.type&&(G=new THREE.FogExp2(0,n.density)),x=n.color,G.color.setRGB(x[0],x[1],x[2]),C.fogs[m]=G;if(C.cameras&&B.defaults.camera)C.currentCamera=C.cameras[B.defaults.camera];if(C.fogs&&B.defaults.fog)C.scene.fog=C.fogs[B.defaults.fog];x=B.defaults.bgcolor;
-C.bgColor=new THREE.Color;C.bgColor.setRGB(x[0],x[1],x[2]);C.bgColorAlpha=B.defaults.bgalpha;for(k in B.geometries)if(m=B.geometries[k],"bin_mesh"==m.type||"ascii_mesh"==m.type)D+=1,i.onLoadStart();y=D;for(k in B.geometries)m=B.geometries[k],"cube"==m.type?(F=new THREE.CubeGeometry(m.width,m.height,m.depth,m.segmentsWidth,m.segmentsHeight,m.segmentsDepth,null,m.flipped,m.sides),C.geometries[k]=F):"plane"==m.type?(F=new THREE.PlaneGeometry(m.width,m.height,m.segmentsWidth,m.segmentsHeight),C.geometries[k]=
-F):"sphere"==m.type?(F=new THREE.SphereGeometry(m.radius,m.segmentsWidth,m.segmentsHeight),C.geometries[k]=F):"cylinder"==m.type?(F=new THREE.CylinderGeometry(m.topRad,m.botRad,m.height,m.radSegs,m.heightSegs),C.geometries[k]=F):"torus"==m.type?(F=new THREE.TorusGeometry(m.radius,m.tube,m.segmentsR,m.segmentsT),C.geometries[k]=F):"icosahedron"==m.type?(F=new THREE.IcosahedronGeometry(m.radius,m.subdivisions),C.geometries[k]=F):"bin_mesh"==m.type?c.load(d(m.url,B.urlBaseType),g(k)):"ascii_mesh"==m.type?
-H.load(d(m.url,B.urlBaseType),g(k)):"embedded_mesh"==m.type&&(m=B.embeds[m.id])&&H.createModel(m,e(k),"");for(o in B.textures)if(k=B.textures[o],k.url instanceof Array){I+=k.url.length;for(m=0;m<k.url.length;m++)i.onLoadStart()}else I+=1,i.onLoadStart();K=I;for(o in B.textures){k=B.textures[o];if(void 0!=k.mapping&&void 0!=THREE[k.mapping])k.mapping=new THREE[k.mapping];if(k.url instanceof Array){m=[];for(G=0;G<k.url.length;G++)m[G]=d(k.url[G],B.urlBaseType);m=THREE.ImageUtils.loadTextureCube(m,k.mapping,
-a)}else{m=THREE.ImageUtils.loadTexture(d(k.url,B.urlBaseType),k.mapping,a);if(void 0!=THREE[k.minFilter])m.minFilter=THREE[k.minFilter];if(void 0!=THREE[k.magFilter])m.magFilter=THREE[k.magFilter];if(k.repeat){m.repeat.set(k.repeat[0],k.repeat[1]);if(1!=k.repeat[0])m.wrapS=THREE.RepeatWrapping;if(1!=k.repeat[1])m.wrapT=THREE.RepeatWrapping}k.offset&&m.offset.set(k.offset[0],k.offset[1]);if(k.wrap){G={repeat:THREE.RepeatWrapping,mirror:THREE.MirroredRepeatWrapping};if(void 0!==G[k.wrap[0]])m.wrapS=
-G[k.wrap[0]];if(void 0!==G[k.wrap[1]])m.wrapT=G[k.wrap[1]]}}C.textures[o]=m}for(q in B.materials){o=B.materials[q];for(A in o.parameters)if("envMap"==A||"map"==A||"lightMap"==A)o.parameters[A]=C.textures[o.parameters[A]];else if("shading"==A)o.parameters[A]="flat"==o.parameters[A]?THREE.FlatShading:THREE.SmoothShading;else if("blending"==A)o.parameters[A]=THREE[o.parameters[A]]?THREE[o.parameters[A]]:THREE.NormalBlending;else if("combine"==A)o.parameters[A]="MixOperation"==o.parameters[A]?THREE.MixOperation:
-THREE.MultiplyOperation;else if("vertexColors"==A)if("face"==o.parameters[A])o.parameters[A]=THREE.FaceColors;else if(o.parameters[A])o.parameters[A]=THREE.VertexColors;if(void 0!==o.parameters.opacity&&1>o.parameters.opacity)o.parameters.transparent=!0;if(o.parameters.normalMap){k=THREE.ShaderUtils.lib.normal;a=THREE.UniformsUtils.clone(k.uniforms);m=o.parameters.color;G=o.parameters.specular;c=o.parameters.ambient;H=o.parameters.shininess;a.tNormal.texture=C.textures[o.parameters.normalMap];if(o.parameters.normalMapFactor)a.uNormalScale.value=
-o.parameters.normalMapFactor;if(o.parameters.map)a.tDiffuse.texture=o.parameters.map,a.enableDiffuse.value=!0;if(o.parameters.lightMap)a.tAO.texture=o.parameters.lightMap,a.enableAO.value=!0;if(o.parameters.specularMap)a.tSpecular.texture=C.textures[o.parameters.specularMap],a.enableSpecular.value=!0;a.uDiffuseColor.value.setHex(m);a.uSpecularColor.value.setHex(G);a.uAmbientColor.value.setHex(c);a.uShininess.value=H;if(o.parameters.opacity)a.uOpacity.value=o.parameters.opacity;E=new THREE.ShaderMaterial({fragmentShader:k.fragmentShader,
-vertexShader:k.vertexShader,uniforms:a,lights:!0,fog:!0})}else E=new THREE[o.type](o.parameters);C.materials[q]=E}f();i.callbackSync(C);h()};THREE.UTF8Loader=function(){};THREE.UTF8Loader.prototype=new THREE.UTF8Loader;THREE.UTF8Loader.prototype.constructor=THREE.UTF8Loader;
+C.bgColor=new THREE.Color;C.bgColor.setRGB(x[0],x[1],x[2]);C.bgColorAlpha=B.defaults.bgalpha;for(k in B.geometries)if(m=B.geometries[k],"bin_mesh"==m.type||"ascii_mesh"==m.type)D+=1,i.onLoadStart();y=D;for(k in B.geometries)if(m=B.geometries[k],"cube"==m.type)F=new THREE.CubeGeometry(m.width,m.height,m.depth,m.segmentsWidth,m.segmentsHeight,m.segmentsDepth,null,m.flipped,m.sides),C.geometries[k]=F;else if("plane"==m.type)F=new THREE.PlaneGeometry(m.width,m.height,m.segmentsWidth,m.segmentsHeight),
+C.geometries[k]=F;else if("sphere"==m.type)F=new THREE.SphereGeometry(m.radius,m.segmentsWidth,m.segmentsHeight),C.geometries[k]=F;else if("cylinder"==m.type)F=new THREE.CylinderGeometry(m.topRad,m.botRad,m.height,m.radSegs,m.heightSegs),C.geometries[k]=F;else if("torus"==m.type)F=new THREE.TorusGeometry(m.radius,m.tube,m.segmentsR,m.segmentsT),C.geometries[k]=F;else if("icosahedron"==m.type)F=new THREE.IcosahedronGeometry(m.radius,m.subdivisions),C.geometries[k]=F;else if("bin_mesh"==m.type)c.load(d(m.url,
+B.urlBaseType),g(k));else if("ascii_mesh"==m.type)H.load(d(m.url,B.urlBaseType),g(k));else if("embedded_mesh"==m.type)m=B.embeds[m.id],m.metadata=B.metadata,m&&H.createModel(m,e(k),"");for(o in B.textures)if(k=B.textures[o],k.url instanceof Array){I+=k.url.length;for(m=0;m<k.url.length;m++)i.onLoadStart()}else I+=1,i.onLoadStart();K=I;for(o in B.textures){k=B.textures[o];if(void 0!=k.mapping&&void 0!=THREE[k.mapping])k.mapping=new THREE[k.mapping];if(k.url instanceof Array){m=[];for(G=0;G<k.url.length;G++)m[G]=
+d(k.url[G],B.urlBaseType);m=THREE.ImageUtils.loadTextureCube(m,k.mapping,a)}else{m=THREE.ImageUtils.loadTexture(d(k.url,B.urlBaseType),k.mapping,a);if(void 0!=THREE[k.minFilter])m.minFilter=THREE[k.minFilter];if(void 0!=THREE[k.magFilter])m.magFilter=THREE[k.magFilter];if(k.repeat){m.repeat.set(k.repeat[0],k.repeat[1]);if(1!=k.repeat[0])m.wrapS=THREE.RepeatWrapping;if(1!=k.repeat[1])m.wrapT=THREE.RepeatWrapping}k.offset&&m.offset.set(k.offset[0],k.offset[1]);if(k.wrap){G={repeat:THREE.RepeatWrapping,
+mirror:THREE.MirroredRepeatWrapping};if(void 0!==G[k.wrap[0]])m.wrapS=G[k.wrap[0]];if(void 0!==G[k.wrap[1]])m.wrapT=G[k.wrap[1]]}}C.textures[o]=m}for(q in B.materials){o=B.materials[q];for(A in o.parameters)if("envMap"==A||"map"==A||"lightMap"==A)o.parameters[A]=C.textures[o.parameters[A]];else if("shading"==A)o.parameters[A]="flat"==o.parameters[A]?THREE.FlatShading:THREE.SmoothShading;else if("blending"==A)o.parameters[A]=THREE[o.parameters[A]]?THREE[o.parameters[A]]:THREE.NormalBlending;else if("combine"==
+A)o.parameters[A]="MixOperation"==o.parameters[A]?THREE.MixOperation:THREE.MultiplyOperation;else if("vertexColors"==A)if("face"==o.parameters[A])o.parameters[A]=THREE.FaceColors;else if(o.parameters[A])o.parameters[A]=THREE.VertexColors;if(void 0!==o.parameters.opacity&&1>o.parameters.opacity)o.parameters.transparent=!0;if(o.parameters.normalMap){k=THREE.ShaderUtils.lib.normal;a=THREE.UniformsUtils.clone(k.uniforms);m=o.parameters.color;G=o.parameters.specular;c=o.parameters.ambient;H=o.parameters.shininess;
+a.tNormal.texture=C.textures[o.parameters.normalMap];if(o.parameters.normalMapFactor)a.uNormalScale.value=o.parameters.normalMapFactor;if(o.parameters.map)a.tDiffuse.texture=o.parameters.map,a.enableDiffuse.value=!0;if(o.parameters.lightMap)a.tAO.texture=o.parameters.lightMap,a.enableAO.value=!0;if(o.parameters.specularMap)a.tSpecular.texture=C.textures[o.parameters.specularMap],a.enableSpecular.value=!0;a.uDiffuseColor.value.setHex(m);a.uSpecularColor.value.setHex(G);a.uAmbientColor.value.setHex(c);
+a.uShininess.value=H;if(o.parameters.opacity)a.uOpacity.value=o.parameters.opacity;E=new THREE.ShaderMaterial({fragmentShader:k.fragmentShader,vertexShader:k.vertexShader,uniforms:a,lights:!0,fog:!0})}else E=new THREE[o.type](o.parameters);C.materials[q]=E}f();i.callbackSync(C);h()};THREE.UTF8Loader=function(){};THREE.UTF8Loader.prototype=new THREE.UTF8Loader;THREE.UTF8Loader.prototype.constructor=THREE.UTF8Loader;
 THREE.UTF8Loader.prototype.load=function(a,b,c){if(a instanceof Object)console.warn("DEPRECATED: UTF8Loader( parameters ) is now UTF8Loader( url, callback, metaData )."),c=a,a=c.model,b=c.callback,c={scale:c.scale,offsetX:c.offsetX,offsetY:c.offsetY,offsetZ:c.offsetZ};var d=new XMLHttpRequest,f=void 0!==c.scale?c.scale:1,g=void 0!==c.offsetX?c.offsetX:0,e=void 0!==c.offsetY?c.offsetY:0,h=void 0!==c.offsetZ?c.offsetZ:0;d.onreadystatechange=function(){4==d.readyState?200==d.status||0==d.status?THREE.UTF8Loader.prototype.createModel(d.responseText,
 b,f,g,e,h):alert("Couldn't load ["+a+"] ["+d.status+"]"):3!=d.readyState&&2==d.readyState&&d.getResponseHeader("Content-Length")};d.open("GET",a,!0);d.send(null)};THREE.UTF8Loader.prototype.decompressMesh=function(a){var b=a.charCodeAt(0);57344<=b&&(b-=2048);b++;for(var c=new Float32Array(8*b),d=1,f=0;8>f;f++){for(var g=0,e=0;e<b;++e){var h=a.charCodeAt(e+d),g=g+(h>>1^-(h&1));c[8*e+f]=g}d+=b}b=a.length-d;g=new Uint16Array(b);for(f=e=0;f<b;f++)h=a.charCodeAt(f+d),g[f]=e-h,0==h&&e++;return[c,g]};
 THREE.UTF8Loader.prototype.createModel=function(a,b,c,d,f,g){var e=function(){var b=this;b.materials=[];THREE.Geometry.call(this);var e=THREE.UTF8Loader.prototype.decompressMesh(a),j=[],k=[];(function(a,e,i){for(var j,k,o,p=a.length;i<p;i+=e)j=a[i],k=a[i+1],o=a[i+2],j=j/16383*c,k=k/16383*c,o=o/16383*c,j+=d,k+=f,o+=g,b.vertices.push(new THREE.Vertex(new THREE.Vector3(j,k,o)))})(e[0],8,0);(function(a,b,c){for(var d,e,f=a.length;c<f;c+=b)d=a[c],e=a[c+1],d/=1023,e/=1023,k.push(d,1-e)})(e[0],8,3);(function(a,

+ 2 - 2
src/extras/loaders/JSONLoader.js

@@ -50,7 +50,7 @@ THREE.JSONLoader.prototype.loadAjaxJSON = function( context, url, callback, text
 
 				try {
 
-					var jsonObject = JSON.parse( xhr.responseText );
+					var json = JSON.parse( xhr.responseText );
 
 				} catch ( error ) {
 
@@ -58,7 +58,7 @@ THREE.JSONLoader.prototype.loadAjaxJSON = function( context, url, callback, text
 
 				}
 
-				context.createModel( jsonObject, callback, texturePath );
+				context.createModel( json, callback, texturePath );
 				context.onLoadComplete();
 
 			} else {

+ 6 - 11
src/extras/loaders/SceneLoader.js

@@ -21,7 +21,7 @@ THREE.SceneLoader.prototype.load = function( url, callbackFinished ) {
 
 	var xhr = new XMLHttpRequest();
 
-	xhr.onreadystatechange = function() {
+	xhr.onreadystatechange = function () {
 
 		if ( xhr.readyState == 4 ) {
 
@@ -31,22 +31,14 @@ THREE.SceneLoader.prototype.load = function( url, callbackFinished ) {
 
 					var json = JSON.parse( xhr.responseText );
 
-					if ( json.metadata === undefined || json.metadata.formatVersion === undefined || json.metadata.formatVersion !== 3 ) {
-
-						console.error( 'Deprecated file format.' );
-						return;
-
-					}
-
-					context.createScene( json, callbackFinished, url );
-
 				} catch ( error ) {
 
-					console.error( error );
 					console.warn( "DEPRECATED: [" + url + "] seems to be using old model format" );
 
 				}
 
+				context.createScene( json, callbackFinished, url );
+
 			} else {
 
 				console.error( "Couldn't load [" + url + "] [" + xhr.status + "]" );
@@ -572,6 +564,9 @@ THREE.SceneLoader.prototype.createScene = function ( json, callbackFinished, url
 
 			var modelJson = data.embeds[ g.id ],
 				texture_path = "";
+			
+			// Pass metadata along to jsonLoader so it knows the format version.
+			modelJson.metadata = data.metadata;
 
 			if ( modelJson ) {