ソースを参照

Synced with mrdoob's branch.

alteredq 14 年 前
コミット
cf6e2de8c9

+ 2 - 2
README.md

@@ -138,14 +138,14 @@ This code creates a camera, then creates a scene object, adds a bunch of random
 
 ### Change Log ###
 
-2011 03 14 - **r36** (194.524 KB, gzip: 48.597 KB)
+2011 03 14 - **r36** (194.547 KB, gzip: 48.608 KB)
 
 * Added 3DSMAX exporter. ([alteredq](http://github.com/alteredq))
 * Fixed `WebGLRenderer` aspect ratio bug when scene had only one material. ([mrdoob](http://github.com/mrdoob))
 * Added `sizeAttenuation` property to `ParticleBasicMaterial`. ([mrdoob](http://github.com/mrdoob))
 * Added `PathCamera`. ([alteredq](http://github.com/alteredq))
 * Fixed `WebGLRenderer` bug when Camera has a parent. Camera`Camera.updateMatrix` method. ([empaempa](http://github.com/empaempa))
-* Fixed `Camera.updateMatrix` method. ([mrdoob](http://github.com/mrdoob))
+* Fixed `Camera.updateMatrix` method and `Object3D.updateMatrix`. ([mrdoob](http://github.com/mrdoob))
 
 
 2011 03 06 - **r35** (187.875 KB, gzip: 46.433 KB)

+ 4 - 4
build/Three.js

@@ -43,8 +43,8 @@ THREE.Object3D=function(){this.parent=undefined;this.children=[];this.up=new THR
 !0;this._vector=new THREE.Vector3};
 THREE.Object3D.prototype={translate:function(a,c){this.matrix.rotateAxis(c);this.position.addSelf(c.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a,this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},lookAt:function(a){this.matrix.lookAt(this.position,a,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)},addChild:function(a){if(this.children.indexOf(a)===-1){a.parent!==
 undefined&&a.parent.removeChild(a);a.parent=this;this.children.push(a);for(var c=this;c instanceof THREE.Scene===!1&&c!==undefined;)c=c.parent;c!==undefined&&c.addChildRecurse(a)}},removeChild:function(a){var c=this.children.indexOf(a);if(c!==-1){a.parent=undefined;this.children.splice(c,1)}},updateMatrix:function(){this.matrix.setPosition(this.position);this.useQuaternion?this.matrix.setRotationFromQuaternion(this.quaternion):this.matrix.setRotationFromEuler(this.rotation);if(this.scale.x!==1||this.scale.y!==
-1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}return!0},update:function(a,c,b){if(this.visible){this.matrixAutoUpdate&&(c|=this.updateMatrix());if(c||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;c=!0}a=0;for(var d=this.children.length;a<d;a++)this.children[a].update(this.matrixWorld,
-c,b)}}};THREE.Quaternion=function(a,c,b,d){this.set(a||0,c||0,b||0,d!==undefined?d:1)};
+1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}this.matrixWorldNeedsUpdate=!0},update:function(a,c,b){if(this.visible){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||c){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;c=!0}a=0;for(var d=this.children.length;a<
+d;a++)this.children[a].update(this.matrixWorld,c,b)}}};THREE.Quaternion=function(a,c,b,d){this.set(a||0,c||0,b||0,d!==undefined?d:1)};
 THREE.Quaternion.prototype={set:function(a,c,b,d){this.x=a;this.y=c;this.z=b;this.w=d;return this},setFromEuler:function(a){var c=0.5*Math.PI/360,b=a.x*c,d=a.y*c,e=a.z*c;a=Math.cos(d);d=Math.sin(d);c=Math.cos(-e);e=Math.sin(-e);var g=Math.cos(b);b=Math.sin(b);var h=a*c,j=d*e;this.w=h*g-j*b;this.x=h*b+j*g;this.y=d*c*g+a*e*b;this.z=a*e*g-d*c*b;return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=
 -1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);if(a==0)this.w=this.z=this.y=this.x=0;else{a=1/a;this.x*=a;this.y*=a;this.z*=a;this.w*=a}return this},multiplySelf:function(a){var c=this.x,b=this.y,d=this.z,e=this.w,g=a.x,h=a.y,j=a.z;a=a.w;this.x=c*a+e*g+b*j-d*h;this.y=b*a+e*h+d*g-c*j;this.z=d*a+e*j+c*h-b*g;this.w=e*a-c*g-b*h-d*j;return this},
 multiplyVector3:function(a,c){c||(c=a);var b=a.x,d=a.y,e=a.z,g=this.x,h=this.y,j=this.z,k=this.w,n=k*b+h*e-j*d,t=k*d+j*b-g*e,z=k*e+g*d-h*b;b=-g*b-h*d-j*e;c.x=n*k+b*-g+t*-j-z*-h;c.y=t*k+b*-h+z*-g-n*-j;c.z=z*k+b*-j+n*-h-t*-g;return c}};
@@ -156,8 +156,8 @@ THREE.Scene.prototype.removeChild=function(a){this.supr.removeChild.call(this,a)
 THREE.Scene.prototype.addObject=THREE.Scene.prototype.addChild;THREE.Scene.prototype.removeObject=THREE.Scene.prototype.removeChild;THREE.Scene.prototype.addLight=THREE.Scene.prototype.addChild;THREE.Scene.prototype.removeLight=THREE.Scene.prototype.removeChild;THREE.Fog=function(a,c,b){this.color=new THREE.Color(a);this.near=c||1;this.far=b||1E3};THREE.FogExp2=function(a,c){this.color=new THREE.Color(a);this.density=c!==undefined?c:2.5E-4};
 THREE.Projector=function(){function a(N,f){return f.z-N.z}function c(N,f){var V=0,T=1,da=N.z+N.w,fa=f.z+f.w,J=-N.z+N.w,ca=-f.z+f.w;if(da>=0&&fa>=0&&J>=0&&ca>=0)return!0;else if(da<0&&fa<0||J<0&&ca<0)return!1;else{if(da<0)V=Math.max(V,da/(da-fa));else fa<0&&(T=Math.min(T,da/(da-fa)));if(J<0)V=Math.max(V,J/(J-ca));else ca<0&&(T=Math.min(T,J/(J-ca)));if(T<V)return!1;else{N.lerpSelf(f,V);f.lerpSelf(N,1-T);return!0}}}var b,d,e=[],g,h,j,k=[],n,t,z=[],v,o,w=[],y=new THREE.Vector4,B=new THREE.Vector4,u=new THREE.Matrix4,
 E=new THREE.Matrix4,x=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],M=new THREE.Vector4,I=new THREE.Vector4,W;this.projectObjects=function(N,f,V){f=[];var T,da,fa;d=0;da=N.objects;N=0;for(T=da.length;N<T;N++){fa=da[N];var J;if(!(J=!fa.visible))if(J=fa instanceof THREE.Mesh){a:{J=void 0;for(var ca=fa.matrixWorld,xa=-fa.geometry.boundingSphere.radius*Math.max(fa.scale.x,Math.max(fa.scale.y,fa.scale.z)),ea=0;ea<6;ea++){J=x[ea].x*ca.n14+
-x[ea].y*ca.n24+x[ea].z*ca.n34+x[ea].w;if(J<=xa){J=!1;break a}}J=!0}J=!J}if(!J){b=e[d]=e[d]||new THREE.RenderableObject;y.copy(fa.position);u.multiplyVector3(y);b.object=fa;b.z=y.z;f.push(b);d++}}V&&f.sort(a);return f};this.projectScene=function(N,f,V){var T=[],da=f.near,fa=f.far,J,ca,xa,ea,va,ia,ga,ta,ya,ha,aa,ma,na,R,ja,qa;j=t=o=0;f.matrixAutoUpdate&&f.update();u.multiply(f.projectionMatrix,f.matrixWorldInverse);x[0].set(u.n41-u.n11,u.n42-u.n12,u.n43-u.n13,u.n44-u.n14);x[1].set(u.n41+u.n11,u.n42+
-u.n12,u.n43+u.n13,u.n44+u.n14);x[2].set(u.n41+u.n21,u.n42+u.n22,u.n43+u.n23,u.n44+u.n24);x[3].set(u.n41-u.n21,u.n42-u.n22,u.n43-u.n23,u.n44-u.n24);x[4].set(u.n41-u.n31,u.n42-u.n32,u.n43-u.n33,u.n44-u.n34);x[5].set(u.n41+u.n31,u.n42+u.n32,u.n43+u.n33,u.n44+u.n34);for(J=0;J<6;J++){ia=x[J];ia.divideScalar(Math.sqrt(ia.x*ia.x+ia.y*ia.y+ia.z*ia.z))}N.update(undefined,!1,f);ia=this.projectObjects(N,f,!0);N=0;for(J=ia.length;N<J;N++){ga=ia[N].object;if(ga.visible){ta=ga.matrixWorld;aa=ga.matrixRotationWorld;
+x[ea].y*ca.n24+x[ea].z*ca.n34+x[ea].w;if(J<=xa){J=!1;break a}}J=!0}J=!J}if(!J){b=e[d]=e[d]||new THREE.RenderableObject;y.copy(fa.position);u.multiplyVector3(y);b.object=fa;b.z=y.z;f.push(b);d++}}V&&f.sort(a);return f};this.projectScene=function(N,f,V){var T=[],da=f.near,fa=f.far,J,ca,xa,ea,va,ia,ga,ta,ya,ha,aa,ma,na,R,ja,qa;j=t=o=0;f.matrixAutoUpdate&&f.updateMatrix();N.update(undefined,!1,f);u.multiply(f.projectionMatrix,f.matrixWorldInverse);x[0].set(u.n41-u.n11,u.n42-u.n12,u.n43-u.n13,u.n44-u.n14);
+x[1].set(u.n41+u.n11,u.n42+u.n12,u.n43+u.n13,u.n44+u.n14);x[2].set(u.n41+u.n21,u.n42+u.n22,u.n43+u.n23,u.n44+u.n24);x[3].set(u.n41-u.n21,u.n42-u.n22,u.n43-u.n23,u.n44-u.n24);x[4].set(u.n41-u.n31,u.n42-u.n32,u.n43-u.n33,u.n44-u.n34);x[5].set(u.n41+u.n31,u.n42+u.n32,u.n43+u.n33,u.n44+u.n34);for(J=0;J<6;J++){ia=x[J];ia.divideScalar(Math.sqrt(ia.x*ia.x+ia.y*ia.y+ia.z*ia.z))}ia=this.projectObjects(N,f,!0);N=0;for(J=ia.length;N<J;N++){ga=ia[N].object;if(ga.visible){ta=ga.matrixWorld;aa=ga.matrixRotationWorld;
 ya=ga.materials;ha=ga.overdraw;if(ga instanceof THREE.Mesh){ma=ga.geometry;na=ma.vertices;ca=0;for(xa=na.length;ca<xa;ca++){R=na[ca];R.positionWorld.copy(R.position);ta.multiplyVector3(R.positionWorld);ea=R.positionScreen;ea.copy(R.positionWorld);u.multiplyVector4(ea);ea.x/=ea.w;ea.y/=ea.w;R.__visible=ea.z>da&&ea.z<fa}ma=ma.faces;ca=0;for(xa=ma.length;ca<xa;ca++){R=ma[ca];if(R instanceof THREE.Face3){ea=na[R.a];va=na[R.b];ja=na[R.c];if(ea.__visible&&va.__visible&&ja.__visible&&(ga.doubleSided||ga.flipSided!=
 (ja.positionScreen.x-ea.positionScreen.x)*(va.positionScreen.y-ea.positionScreen.y)-(ja.positionScreen.y-ea.positionScreen.y)*(va.positionScreen.x-ea.positionScreen.x)<0)){g=k[j]=k[j]||new THREE.RenderableFace3;g.v1.positionWorld.copy(ea.positionWorld);g.v2.positionWorld.copy(va.positionWorld);g.v3.positionWorld.copy(ja.positionWorld);g.v1.positionScreen.copy(ea.positionScreen);g.v2.positionScreen.copy(va.positionScreen);g.v3.positionScreen.copy(ja.positionScreen);g.normalWorld.copy(R.normal);aa.multiplyVector3(g.normalWorld);
 g.centroidWorld.copy(R.centroid);ta.multiplyVector3(g.centroidWorld);g.centroidScreen.copy(g.centroidWorld);u.multiplyVector3(g.centroidScreen);ja=R.vertexNormals;W=g.vertexNormalsWorld;ea=0;for(va=ja.length;ea<va;ea++){qa=W[ea]=W[ea]||new THREE.Vector3;qa.copy(ja[ea]);aa.multiplyVector3(qa)}g.z=g.centroidScreen.z;g.meshMaterials=ya;g.faceMaterials=R.materials;g.overdraw=ha;if(ga.geometry.uvs[ca]){g.uvs[0]=ga.geometry.uvs[ca][0];g.uvs[1]=ga.geometry.uvs[ca][1];g.uvs[2]=ga.geometry.uvs[ca][2]}T.push(g);

+ 4 - 4
build/custom/ThreeCanvas.js

@@ -43,8 +43,8 @@ THREE.Object3D=function(){this.parent=undefined;this.children=[];this.up=new THR
 !0;this._vector=new THREE.Vector3};
 THREE.Object3D.prototype={translate:function(a,b){this.matrix.rotateAxis(b);this.position.addSelf(b.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a,this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},lookAt:function(a){this.matrix.lookAt(this.position,a,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)},addChild:function(a){if(this.children.indexOf(a)===-1){a.parent!==
 undefined&&a.parent.removeChild(a);a.parent=this;this.children.push(a);for(var b=this;b instanceof THREE.Scene===!1&&b!==undefined;)b=b.parent;b!==undefined&&b.addChildRecurse(a)}},removeChild:function(a){var b=this.children.indexOf(a);if(b!==-1){a.parent=undefined;this.children.splice(b,1)}},updateMatrix:function(){this.matrix.setPosition(this.position);this.useQuaternion?this.matrix.setRotationFromQuaternion(this.quaternion):this.matrix.setRotationFromEuler(this.rotation);if(this.scale.x!==1||this.scale.y!==
-1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}return!0},update:function(a,b,c){if(this.visible){this.matrixAutoUpdate&&(b|=this.updateMatrix());if(b||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;b=!0}a=0;for(var d=this.children.length;a<d;a++)this.children[a].update(this.matrixWorld,
-b,c)}}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==undefined?d:1)};
+1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}this.matrixWorldNeedsUpdate=!0},update:function(a,b,c){if(this.visible){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||b){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;b=!0}a=0;for(var d=this.children.length;a<
+d;a++)this.children[a].update(this.matrixWorld,b,c)}}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==undefined?d:1)};
 THREE.Quaternion.prototype={set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setFromEuler:function(a){var b=0.5*Math.PI/360,c=a.x*b,d=a.y*b,e=a.z*b;a=Math.cos(d);d=Math.sin(d);b=Math.cos(-e);e=Math.sin(-e);var f=Math.cos(c);c=Math.sin(c);var g=a*b,j=d*e;this.w=g*f-j*c;this.x=g*c+j*f;this.y=d*b*f+a*e*c;this.z=a*e*f-d*b*c;return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=
 -1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);if(a==0)this.w=this.z=this.y=this.x=0;else{a=1/a;this.x*=a;this.y*=a;this.z*=a;this.w*=a}return this},multiplySelf:function(a){var b=this.x,c=this.y,d=this.z,e=this.w,f=a.x,g=a.y,j=a.z;a=a.w;this.x=b*a+e*f+c*j-d*g;this.y=c*a+e*g+d*f-b*j;this.z=d*a+e*j+b*g-c*f;this.w=e*a-b*f-c*g-d*j;return this},
 multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,e=a.z,f=this.x,g=this.y,j=this.z,h=this.w,i=h*c+g*e-j*d,p=h*d+j*c-f*e,n=h*e+f*d-g*c;c=-f*c-g*d-j*e;b.x=i*h+c*-f+p*-j-n*-g;b.y=p*h+c*-g+n*-f-i*-j;b.z=n*h+c*-j+i*-g-p*-f;return b}};
@@ -104,8 +104,8 @@ THREE.Scene.prototype.removeChild=function(a){this.supr.removeChild.call(this,a)
 THREE.Scene.prototype.addObject=THREE.Scene.prototype.addChild;THREE.Scene.prototype.removeObject=THREE.Scene.prototype.removeChild;THREE.Scene.prototype.addLight=THREE.Scene.prototype.addChild;THREE.Scene.prototype.removeLight=THREE.Scene.prototype.removeChild;
 THREE.Projector=function(){function a(C,A){return A.z-C.z}function b(C,A){var L=0,y=1,M=C.z+C.w,D=A.z+A.w,x=-C.z+C.w,z=-A.z+A.w;if(M>=0&&D>=0&&x>=0&&z>=0)return!0;else if(M<0&&D<0||x<0&&z<0)return!1;else{if(M<0)L=Math.max(L,M/(M-D));else D<0&&(y=Math.min(y,M/(M-D)));if(x<0)L=Math.max(L,x/(x-z));else z<0&&(y=Math.min(y,x/(x-z)));if(y<L)return!1;else{C.lerpSelf(A,L);A.lerpSelf(C,1-y);return!0}}}var c,d,e=[],f,g,j,h=[],i,p,n=[],o,q,u=[],v=new THREE.Vector4,s=new THREE.Vector4,k=new THREE.Matrix4,G=new THREE.Matrix4,
 F=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],K=new THREE.Vector4,I=new THREE.Vector4,S;this.projectObjects=function(C,A,L){A=[];var y,M,D;d=0;M=C.objects;C=0;for(y=M.length;C<y;C++){D=M[C];var x;if(!(x=!D.visible))if(x=D instanceof THREE.Mesh){a:{x=void 0;for(var z=D.matrixWorld,W=-D.geometry.boundingSphere.radius*Math.max(D.scale.x,Math.max(D.scale.y,D.scale.z)),w=0;w<6;w++){x=F[w].x*z.n14+F[w].y*z.n24+F[w].z*z.n34+F[w].w;if(x<=W){x=
-!1;break a}}x=!0}x=!x}if(!x){c=e[d]=e[d]||new THREE.RenderableObject;v.copy(D.position);k.multiplyVector3(v);c.object=D;c.z=v.z;A.push(c);d++}}L&&A.sort(a);return A};this.projectScene=function(C,A,L){var y=[],M=A.near,D=A.far,x,z,W,w,O,Y,H,ja,ka,la,ma,$,N,E,T,P;j=p=q=0;A.matrixAutoUpdate&&A.update();k.multiply(A.projectionMatrix,A.matrixWorldInverse);F[0].set(k.n41-k.n11,k.n42-k.n12,k.n43-k.n13,k.n44-k.n14);F[1].set(k.n41+k.n11,k.n42+k.n12,k.n43+k.n13,k.n44+k.n14);F[2].set(k.n41+k.n21,k.n42+k.n22,
-k.n43+k.n23,k.n44+k.n24);F[3].set(k.n41-k.n21,k.n42-k.n22,k.n43-k.n23,k.n44-k.n24);F[4].set(k.n41-k.n31,k.n42-k.n32,k.n43-k.n33,k.n44-k.n34);F[5].set(k.n41+k.n31,k.n42+k.n32,k.n43+k.n33,k.n44+k.n34);for(x=0;x<6;x++){Y=F[x];Y.divideScalar(Math.sqrt(Y.x*Y.x+Y.y*Y.y+Y.z*Y.z))}C.update(undefined,!1,A);Y=this.projectObjects(C,A,!0);C=0;for(x=Y.length;C<x;C++){H=Y[C].object;if(H.visible){ja=H.matrixWorld;ma=H.matrixRotationWorld;ka=H.materials;la=H.overdraw;if(H instanceof THREE.Mesh){$=H.geometry;N=$.vertices;
+!1;break a}}x=!0}x=!x}if(!x){c=e[d]=e[d]||new THREE.RenderableObject;v.copy(D.position);k.multiplyVector3(v);c.object=D;c.z=v.z;A.push(c);d++}}L&&A.sort(a);return A};this.projectScene=function(C,A,L){var y=[],M=A.near,D=A.far,x,z,W,w,O,Y,H,ja,ka,la,ma,$,N,E,T,P;j=p=q=0;A.matrixAutoUpdate&&A.updateMatrix();C.update(undefined,!1,A);k.multiply(A.projectionMatrix,A.matrixWorldInverse);F[0].set(k.n41-k.n11,k.n42-k.n12,k.n43-k.n13,k.n44-k.n14);F[1].set(k.n41+k.n11,k.n42+k.n12,k.n43+k.n13,k.n44+k.n14);F[2].set(k.n41+
+k.n21,k.n42+k.n22,k.n43+k.n23,k.n44+k.n24);F[3].set(k.n41-k.n21,k.n42-k.n22,k.n43-k.n23,k.n44-k.n24);F[4].set(k.n41-k.n31,k.n42-k.n32,k.n43-k.n33,k.n44-k.n34);F[5].set(k.n41+k.n31,k.n42+k.n32,k.n43+k.n33,k.n44+k.n34);for(x=0;x<6;x++){Y=F[x];Y.divideScalar(Math.sqrt(Y.x*Y.x+Y.y*Y.y+Y.z*Y.z))}Y=this.projectObjects(C,A,!0);C=0;for(x=Y.length;C<x;C++){H=Y[C].object;if(H.visible){ja=H.matrixWorld;ma=H.matrixRotationWorld;ka=H.materials;la=H.overdraw;if(H instanceof THREE.Mesh){$=H.geometry;N=$.vertices;
 z=0;for(W=N.length;z<W;z++){E=N[z];E.positionWorld.copy(E.position);ja.multiplyVector3(E.positionWorld);w=E.positionScreen;w.copy(E.positionWorld);k.multiplyVector4(w);w.x/=w.w;w.y/=w.w;E.__visible=w.z>M&&w.z<D}$=$.faces;z=0;for(W=$.length;z<W;z++){E=$[z];if(E instanceof THREE.Face3){w=N[E.a];O=N[E.b];T=N[E.c];if(w.__visible&&O.__visible&&T.__visible&&(H.doubleSided||H.flipSided!=(T.positionScreen.x-w.positionScreen.x)*(O.positionScreen.y-w.positionScreen.y)-(T.positionScreen.y-w.positionScreen.y)*
 (O.positionScreen.x-w.positionScreen.x)<0)){f=h[j]=h[j]||new THREE.RenderableFace3;f.v1.positionWorld.copy(w.positionWorld);f.v2.positionWorld.copy(O.positionWorld);f.v3.positionWorld.copy(T.positionWorld);f.v1.positionScreen.copy(w.positionScreen);f.v2.positionScreen.copy(O.positionScreen);f.v3.positionScreen.copy(T.positionScreen);f.normalWorld.copy(E.normal);ma.multiplyVector3(f.normalWorld);f.centroidWorld.copy(E.centroid);ja.multiplyVector3(f.centroidWorld);f.centroidScreen.copy(f.centroidWorld);
 k.multiplyVector3(f.centroidScreen);T=E.vertexNormals;S=f.vertexNormalsWorld;w=0;for(O=T.length;w<O;w++){P=S[w]=S[w]||new THREE.Vector3;P.copy(T[w]);ma.multiplyVector3(P)}f.z=f.centroidScreen.z;f.meshMaterials=ka;f.faceMaterials=E.materials;f.overdraw=la;if(H.geometry.uvs[z]){f.uvs[0]=H.geometry.uvs[z][0];f.uvs[1]=H.geometry.uvs[z][1];f.uvs[2]=H.geometry.uvs[z][2]}y.push(f);j++}}else if(E instanceof THREE.Face4){w=N[E.a];O=N[E.b];T=N[E.c];P=N[E.d];if(w.__visible&&O.__visible&&T.__visible&&P.__visible&&

+ 4 - 4
build/custom/ThreeDOM.js

@@ -43,8 +43,8 @@ THREE.Object3D=function(){this.parent=undefined;this.children=[];this.up=new THR
 !0;this._vector=new THREE.Vector3};
 THREE.Object3D.prototype={translate:function(a,b){this.matrix.rotateAxis(b);this.position.addSelf(b.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a,this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},lookAt:function(a){this.matrix.lookAt(this.position,a,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)},addChild:function(a){if(this.children.indexOf(a)===-1){a.parent!==
 undefined&&a.parent.removeChild(a);a.parent=this;this.children.push(a);for(var b=this;b instanceof THREE.Scene===!1&&b!==undefined;)b=b.parent;b!==undefined&&b.addChildRecurse(a)}},removeChild:function(a){var b=this.children.indexOf(a);if(b!==-1){a.parent=undefined;this.children.splice(b,1)}},updateMatrix:function(){this.matrix.setPosition(this.position);this.useQuaternion?this.matrix.setRotationFromQuaternion(this.quaternion):this.matrix.setRotationFromEuler(this.rotation);if(this.scale.x!==1||this.scale.y!==
-1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}return!0},update:function(a,b,c){if(this.visible){this.matrixAutoUpdate&&(b|=this.updateMatrix());if(b||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;b=!0}a=0;for(var d=this.children.length;a<d;a++)this.children[a].update(this.matrixWorld,
-b,c)}}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==undefined?d:1)};
+1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}this.matrixWorldNeedsUpdate=!0},update:function(a,b,c){if(this.visible){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||b){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;b=!0}a=0;for(var d=this.children.length;a<
+d;a++)this.children[a].update(this.matrixWorld,b,c)}}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==undefined?d:1)};
 THREE.Quaternion.prototype={set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setFromEuler:function(a){var b=0.5*Math.PI/360,c=a.x*b,d=a.y*b,e=a.z*b;a=Math.cos(d);d=Math.sin(d);b=Math.cos(-e);e=Math.sin(-e);var f=Math.cos(c);c=Math.sin(c);var g=a*b,i=d*e;this.w=g*f-i*c;this.x=g*c+i*f;this.y=d*b*f+a*e*c;this.z=a*e*f-d*b*c;return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=
 -1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);if(a==0)this.w=this.z=this.y=this.x=0;else{a=1/a;this.x*=a;this.y*=a;this.z*=a;this.w*=a}return this},multiplySelf:function(a){var b=this.x,c=this.y,d=this.z,e=this.w,f=a.x,g=a.y,i=a.z;a=a.w;this.x=b*a+e*f+c*i-d*g;this.y=c*a+e*g+d*f-b*i;this.z=d*a+e*i+b*g-c*f;this.w=e*a-b*f-c*g-d*i;return this},
 multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,e=a.z,f=this.x,g=this.y,i=this.z,h=this.w,j=h*c+g*e-i*d,n=h*d+i*c-f*e,m=h*e+f*d-g*c;c=-f*c-g*d-i*e;b.x=j*h+c*-f+n*-i-m*-g;b.y=n*h+c*-g+m*-f-j*-i;b.z=m*h+c*-i+j*-g-n*-f;return b}};
@@ -69,8 +69,8 @@ THREE.Scene.prototype.removeChild=function(a){this.supr.removeChild.call(this,a)
 THREE.Scene.prototype.addObject=THREE.Scene.prototype.addChild;THREE.Scene.prototype.removeObject=THREE.Scene.prototype.removeChild;THREE.Scene.prototype.addLight=THREE.Scene.prototype.addChild;THREE.Scene.prototype.removeLight=THREE.Scene.prototype.removeChild;
 THREE.Projector=function(){function a(x,v){return v.z-x.z}function b(x,v){var E=0,B=1,F=x.z+x.w,A=v.z+v.w,w=-x.z+x.w,t=-v.z+v.w;if(F>=0&&A>=0&&w>=0&&t>=0)return!0;else if(F<0&&A<0||w<0&&t<0)return!1;else{if(F<0)E=Math.max(E,F/(F-A));else A<0&&(B=Math.min(B,F/(F-A)));if(w<0)E=Math.max(E,w/(w-t));else t<0&&(B=Math.min(B,w/(w-t)));if(B<E)return!1;else{x.lerpSelf(v,E);v.lerpSelf(x,1-B);return!0}}}var c,d,e=[],f,g,i,h=[],j,n,m=[],l,o,q=[],r=new THREE.Vector4,p=new THREE.Vector4,k=new THREE.Matrix4,D=new THREE.Matrix4,
 z=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],G=new THREE.Vector4,H=new THREE.Vector4,M;this.projectObjects=function(x,v,E){v=[];var B,F,A;d=0;F=x.objects;x=0;for(B=F.length;x<B;x++){A=F[x];var w;if(!(w=!A.visible))if(w=A instanceof THREE.Mesh){a:{w=void 0;for(var t=A.matrixWorld,N=-A.geometry.boundingSphere.radius*Math.max(A.scale.x,Math.max(A.scale.y,A.scale.z)),s=0;s<6;s++){w=z[s].x*t.n14+z[s].y*t.n24+z[s].z*t.n34+z[s].w;if(w<=N){w=
-!1;break a}}w=!0}w=!w}if(!w){c=e[d]=e[d]||new THREE.RenderableObject;r.copy(A.position);k.multiplyVector3(r);c.object=A;c.z=r.z;v.push(c);d++}}E&&v.sort(a);return v};this.projectScene=function(x,v,E){var B=[],F=v.near,A=v.far,w,t,N,s,C,L,u,P,Q,R,S,O,J,y,I,K;i=n=o=0;v.matrixAutoUpdate&&v.update();k.multiply(v.projectionMatrix,v.matrixWorldInverse);z[0].set(k.n41-k.n11,k.n42-k.n12,k.n43-k.n13,k.n44-k.n14);z[1].set(k.n41+k.n11,k.n42+k.n12,k.n43+k.n13,k.n44+k.n14);z[2].set(k.n41+k.n21,k.n42+k.n22,k.n43+
-k.n23,k.n44+k.n24);z[3].set(k.n41-k.n21,k.n42-k.n22,k.n43-k.n23,k.n44-k.n24);z[4].set(k.n41-k.n31,k.n42-k.n32,k.n43-k.n33,k.n44-k.n34);z[5].set(k.n41+k.n31,k.n42+k.n32,k.n43+k.n33,k.n44+k.n34);for(w=0;w<6;w++){L=z[w];L.divideScalar(Math.sqrt(L.x*L.x+L.y*L.y+L.z*L.z))}x.update(undefined,!1,v);L=this.projectObjects(x,v,!0);x=0;for(w=L.length;x<w;x++){u=L[x].object;if(u.visible){P=u.matrixWorld;S=u.matrixRotationWorld;Q=u.materials;R=u.overdraw;if(u instanceof THREE.Mesh){O=u.geometry;J=O.vertices;t=
+!1;break a}}w=!0}w=!w}if(!w){c=e[d]=e[d]||new THREE.RenderableObject;r.copy(A.position);k.multiplyVector3(r);c.object=A;c.z=r.z;v.push(c);d++}}E&&v.sort(a);return v};this.projectScene=function(x,v,E){var B=[],F=v.near,A=v.far,w,t,N,s,C,L,u,P,Q,R,S,O,J,y,I,K;i=n=o=0;v.matrixAutoUpdate&&v.updateMatrix();x.update(undefined,!1,v);k.multiply(v.projectionMatrix,v.matrixWorldInverse);z[0].set(k.n41-k.n11,k.n42-k.n12,k.n43-k.n13,k.n44-k.n14);z[1].set(k.n41+k.n11,k.n42+k.n12,k.n43+k.n13,k.n44+k.n14);z[2].set(k.n41+
+k.n21,k.n42+k.n22,k.n43+k.n23,k.n44+k.n24);z[3].set(k.n41-k.n21,k.n42-k.n22,k.n43-k.n23,k.n44-k.n24);z[4].set(k.n41-k.n31,k.n42-k.n32,k.n43-k.n33,k.n44-k.n34);z[5].set(k.n41+k.n31,k.n42+k.n32,k.n43+k.n33,k.n44+k.n34);for(w=0;w<6;w++){L=z[w];L.divideScalar(Math.sqrt(L.x*L.x+L.y*L.y+L.z*L.z))}L=this.projectObjects(x,v,!0);x=0;for(w=L.length;x<w;x++){u=L[x].object;if(u.visible){P=u.matrixWorld;S=u.matrixRotationWorld;Q=u.materials;R=u.overdraw;if(u instanceof THREE.Mesh){O=u.geometry;J=O.vertices;t=
 0;for(N=J.length;t<N;t++){y=J[t];y.positionWorld.copy(y.position);P.multiplyVector3(y.positionWorld);s=y.positionScreen;s.copy(y.positionWorld);k.multiplyVector4(s);s.x/=s.w;s.y/=s.w;y.__visible=s.z>F&&s.z<A}O=O.faces;t=0;for(N=O.length;t<N;t++){y=O[t];if(y instanceof THREE.Face3){s=J[y.a];C=J[y.b];I=J[y.c];if(s.__visible&&C.__visible&&I.__visible&&(u.doubleSided||u.flipSided!=(I.positionScreen.x-s.positionScreen.x)*(C.positionScreen.y-s.positionScreen.y)-(I.positionScreen.y-s.positionScreen.y)*(C.positionScreen.x-
 s.positionScreen.x)<0)){f=h[i]=h[i]||new THREE.RenderableFace3;f.v1.positionWorld.copy(s.positionWorld);f.v2.positionWorld.copy(C.positionWorld);f.v3.positionWorld.copy(I.positionWorld);f.v1.positionScreen.copy(s.positionScreen);f.v2.positionScreen.copy(C.positionScreen);f.v3.positionScreen.copy(I.positionScreen);f.normalWorld.copy(y.normal);S.multiplyVector3(f.normalWorld);f.centroidWorld.copy(y.centroid);P.multiplyVector3(f.centroidWorld);f.centroidScreen.copy(f.centroidWorld);k.multiplyVector3(f.centroidScreen);
 I=y.vertexNormals;M=f.vertexNormalsWorld;s=0;for(C=I.length;s<C;s++){K=M[s]=M[s]||new THREE.Vector3;K.copy(I[s]);S.multiplyVector3(K)}f.z=f.centroidScreen.z;f.meshMaterials=Q;f.faceMaterials=y.materials;f.overdraw=R;if(u.geometry.uvs[t]){f.uvs[0]=u.geometry.uvs[t][0];f.uvs[1]=u.geometry.uvs[t][1];f.uvs[2]=u.geometry.uvs[t][2]}B.push(f);i++}}else if(y instanceof THREE.Face4){s=J[y.a];C=J[y.b];I=J[y.c];K=J[y.d];if(s.__visible&&C.__visible&&I.__visible&&K.__visible&&(u.doubleSided||u.flipSided!=((K.positionScreen.x-

+ 4 - 4
build/custom/ThreeSVG.js

@@ -43,8 +43,8 @@ THREE.Object3D=function(){this.parent=undefined;this.children=[];this.up=new THR
 !0;this._vector=new THREE.Vector3};
 THREE.Object3D.prototype={translate:function(a,b){this.matrix.rotateAxis(b);this.position.addSelf(b.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a,this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},lookAt:function(a){this.matrix.lookAt(this.position,a,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)},addChild:function(a){if(this.children.indexOf(a)===-1){a.parent!==
 undefined&&a.parent.removeChild(a);a.parent=this;this.children.push(a);for(var b=this;b instanceof THREE.Scene===!1&&b!==undefined;)b=b.parent;b!==undefined&&b.addChildRecurse(a)}},removeChild:function(a){var b=this.children.indexOf(a);if(b!==-1){a.parent=undefined;this.children.splice(b,1)}},updateMatrix:function(){this.matrix.setPosition(this.position);this.useQuaternion?this.matrix.setRotationFromQuaternion(this.quaternion):this.matrix.setRotationFromEuler(this.rotation);if(this.scale.x!==1||this.scale.y!==
-1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}return!0},update:function(a,b,c){if(this.visible){this.matrixAutoUpdate&&(b|=this.updateMatrix());if(b||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;b=!0}a=0;for(var d=this.children.length;a<d;a++)this.children[a].update(this.matrixWorld,
-b,c)}}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==undefined?d:1)};
+1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}this.matrixWorldNeedsUpdate=!0},update:function(a,b,c){if(this.visible){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||b){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;b=!0}a=0;for(var d=this.children.length;a<
+d;a++)this.children[a].update(this.matrixWorld,b,c)}}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==undefined?d:1)};
 THREE.Quaternion.prototype={set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setFromEuler:function(a){var b=0.5*Math.PI/360,c=a.x*b,d=a.y*b,e=a.z*b;a=Math.cos(d);d=Math.sin(d);b=Math.cos(-e);e=Math.sin(-e);var f=Math.cos(c);c=Math.sin(c);var g=a*b,i=d*e;this.w=g*f-i*c;this.x=g*c+i*f;this.y=d*b*f+a*e*c;this.z=a*e*f-d*b*c;return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=
 -1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);if(a==0)this.w=this.z=this.y=this.x=0;else{a=1/a;this.x*=a;this.y*=a;this.z*=a;this.w*=a}return this},multiplySelf:function(a){var b=this.x,c=this.y,d=this.z,e=this.w,f=a.x,g=a.y,i=a.z;a=a.w;this.x=b*a+e*f+c*i-d*g;this.y=c*a+e*g+d*f-b*i;this.z=d*a+e*i+b*g-c*f;this.w=e*a-b*f-c*g-d*i;return this},
 multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,e=a.z,f=this.x,g=this.y,i=this.z,h=this.w,l=h*c+g*e-i*d,n=h*d+i*c-f*e,m=h*e+f*d-g*c;c=-f*c-g*d-i*e;b.x=l*h+c*-f+n*-i-m*-g;b.y=n*h+c*-g+m*-f-l*-i;b.z=m*h+c*-i+l*-g-n*-f;return b}};
@@ -102,8 +102,8 @@ THREE.Scene.prototype.removeChild=function(a){this.supr.removeChild.call(this,a)
 THREE.Scene.prototype.addObject=THREE.Scene.prototype.addChild;THREE.Scene.prototype.removeObject=THREE.Scene.prototype.removeChild;THREE.Scene.prototype.addLight=THREE.Scene.prototype.addChild;THREE.Scene.prototype.removeLight=THREE.Scene.prototype.removeChild;
 THREE.Projector=function(){function a(B,z){return z.z-B.z}function b(B,z){var L=0,G=1,N=B.z+B.w,H=z.z+z.w,s=-B.z+B.w,C=-z.z+z.w;if(N>=0&&H>=0&&s>=0&&C>=0)return!0;else if(N<0&&H<0||s<0&&C<0)return!1;else{if(N<0)L=Math.max(L,N/(N-H));else H<0&&(G=Math.min(G,N/(N-H)));if(s<0)L=Math.max(L,s/(s-C));else C<0&&(G=Math.min(G,s/(s-C)));if(G<L)return!1;else{B.lerpSelf(z,L);z.lerpSelf(B,1-G);return!0}}}var c,d,e=[],f,g,i,h=[],l,n,m=[],k,o,r=[],v=new THREE.Vector4,u=new THREE.Vector4,j=new THREE.Matrix4,J=new THREE.Matrix4,
 q=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],A=new THREE.Vector4,F=new THREE.Vector4,R;this.projectObjects=function(B,z,L){z=[];var G,N,H;d=0;N=B.objects;B=0;for(G=N.length;B<G;B++){H=N[B];var s;if(!(s=!H.visible))if(s=H instanceof THREE.Mesh){a:{s=void 0;for(var C=H.matrixWorld,S=-H.geometry.boundingSphere.radius*Math.max(H.scale.x,Math.max(H.scale.y,H.scale.z)),y=0;y<6;y++){s=q[y].x*C.n14+q[y].y*C.n24+q[y].z*C.n34+q[y].w;if(s<=S){s=
-!1;break a}}s=!0}s=!s}if(!s){c=e[d]=e[d]||new THREE.RenderableObject;v.copy(H.position);j.multiplyVector3(v);c.object=H;c.z=v.z;z.push(c);d++}}L&&z.sort(a);return z};this.projectScene=function(B,z,L){var G=[],N=z.near,H=z.far,s,C,S,y,K,D,w,M,P,x,t,I,O,p,E,Q;i=n=o=0;z.matrixAutoUpdate&&z.update();j.multiply(z.projectionMatrix,z.matrixWorldInverse);q[0].set(j.n41-j.n11,j.n42-j.n12,j.n43-j.n13,j.n44-j.n14);q[1].set(j.n41+j.n11,j.n42+j.n12,j.n43+j.n13,j.n44+j.n14);q[2].set(j.n41+j.n21,j.n42+j.n22,j.n43+
-j.n23,j.n44+j.n24);q[3].set(j.n41-j.n21,j.n42-j.n22,j.n43-j.n23,j.n44-j.n24);q[4].set(j.n41-j.n31,j.n42-j.n32,j.n43-j.n33,j.n44-j.n34);q[5].set(j.n41+j.n31,j.n42+j.n32,j.n43+j.n33,j.n44+j.n34);for(s=0;s<6;s++){D=q[s];D.divideScalar(Math.sqrt(D.x*D.x+D.y*D.y+D.z*D.z))}B.update(undefined,!1,z);D=this.projectObjects(B,z,!0);B=0;for(s=D.length;B<s;B++){w=D[B].object;if(w.visible){M=w.matrixWorld;t=w.matrixRotationWorld;P=w.materials;x=w.overdraw;if(w instanceof THREE.Mesh){I=w.geometry;O=I.vertices;C=
+!1;break a}}s=!0}s=!s}if(!s){c=e[d]=e[d]||new THREE.RenderableObject;v.copy(H.position);j.multiplyVector3(v);c.object=H;c.z=v.z;z.push(c);d++}}L&&z.sort(a);return z};this.projectScene=function(B,z,L){var G=[],N=z.near,H=z.far,s,C,S,y,K,D,w,M,P,x,t,I,O,p,E,Q;i=n=o=0;z.matrixAutoUpdate&&z.updateMatrix();B.update(undefined,!1,z);j.multiply(z.projectionMatrix,z.matrixWorldInverse);q[0].set(j.n41-j.n11,j.n42-j.n12,j.n43-j.n13,j.n44-j.n14);q[1].set(j.n41+j.n11,j.n42+j.n12,j.n43+j.n13,j.n44+j.n14);q[2].set(j.n41+
+j.n21,j.n42+j.n22,j.n43+j.n23,j.n44+j.n24);q[3].set(j.n41-j.n21,j.n42-j.n22,j.n43-j.n23,j.n44-j.n24);q[4].set(j.n41-j.n31,j.n42-j.n32,j.n43-j.n33,j.n44-j.n34);q[5].set(j.n41+j.n31,j.n42+j.n32,j.n43+j.n33,j.n44+j.n34);for(s=0;s<6;s++){D=q[s];D.divideScalar(Math.sqrt(D.x*D.x+D.y*D.y+D.z*D.z))}D=this.projectObjects(B,z,!0);B=0;for(s=D.length;B<s;B++){w=D[B].object;if(w.visible){M=w.matrixWorld;t=w.matrixRotationWorld;P=w.materials;x=w.overdraw;if(w instanceof THREE.Mesh){I=w.geometry;O=I.vertices;C=
 0;for(S=O.length;C<S;C++){p=O[C];p.positionWorld.copy(p.position);M.multiplyVector3(p.positionWorld);y=p.positionScreen;y.copy(p.positionWorld);j.multiplyVector4(y);y.x/=y.w;y.y/=y.w;p.__visible=y.z>N&&y.z<H}I=I.faces;C=0;for(S=I.length;C<S;C++){p=I[C];if(p instanceof THREE.Face3){y=O[p.a];K=O[p.b];E=O[p.c];if(y.__visible&&K.__visible&&E.__visible&&(w.doubleSided||w.flipSided!=(E.positionScreen.x-y.positionScreen.x)*(K.positionScreen.y-y.positionScreen.y)-(E.positionScreen.y-y.positionScreen.y)*(K.positionScreen.x-
 y.positionScreen.x)<0)){f=h[i]=h[i]||new THREE.RenderableFace3;f.v1.positionWorld.copy(y.positionWorld);f.v2.positionWorld.copy(K.positionWorld);f.v3.positionWorld.copy(E.positionWorld);f.v1.positionScreen.copy(y.positionScreen);f.v2.positionScreen.copy(K.positionScreen);f.v3.positionScreen.copy(E.positionScreen);f.normalWorld.copy(p.normal);t.multiplyVector3(f.normalWorld);f.centroidWorld.copy(p.centroid);M.multiplyVector3(f.centroidWorld);f.centroidScreen.copy(f.centroidWorld);j.multiplyVector3(f.centroidScreen);
 E=p.vertexNormals;R=f.vertexNormalsWorld;y=0;for(K=E.length;y<K;y++){Q=R[y]=R[y]||new THREE.Vector3;Q.copy(E[y]);t.multiplyVector3(Q)}f.z=f.centroidScreen.z;f.meshMaterials=P;f.faceMaterials=p.materials;f.overdraw=x;if(w.geometry.uvs[C]){f.uvs[0]=w.geometry.uvs[C][0];f.uvs[1]=w.geometry.uvs[C][1];f.uvs[2]=w.geometry.uvs[C][2]}G.push(f);i++}}else if(p instanceof THREE.Face4){y=O[p.a];K=O[p.b];E=O[p.c];Q=O[p.d];if(y.__visible&&K.__visible&&E.__visible&&Q.__visible&&(w.doubleSided||w.flipSided!=((Q.positionScreen.x-

+ 2 - 2
build/custom/ThreeWebGL.js

@@ -43,8 +43,8 @@ THREE.Object3D=function(){this.parent=undefined;this.children=[];this.up=new THR
 !0;this._vector=new THREE.Vector3};
 THREE.Object3D.prototype={translate:function(a,b){this.matrix.rotateAxis(b);this.position.addSelf(b.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a,this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},lookAt:function(a){this.matrix.lookAt(this.position,a,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)},addChild:function(a){if(this.children.indexOf(a)===-1){a.parent!==
 undefined&&a.parent.removeChild(a);a.parent=this;this.children.push(a);for(var b=this;b instanceof THREE.Scene===!1&&b!==undefined;)b=b.parent;b!==undefined&&b.addChildRecurse(a)}},removeChild:function(a){var b=this.children.indexOf(a);if(b!==-1){a.parent=undefined;this.children.splice(b,1)}},updateMatrix:function(){this.matrix.setPosition(this.position);this.useQuaternion?this.matrix.setRotationFromQuaternion(this.quaternion):this.matrix.setRotationFromEuler(this.rotation);if(this.scale.x!==1||this.scale.y!==
-1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}return!0},update:function(a,b,d){if(this.visible){this.matrixAutoUpdate&&(b|=this.updateMatrix());if(b||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;b=!0}a=0;for(var e=this.children.length;a<e;a++)this.children[a].update(this.matrixWorld,
-b,d)}}};THREE.Quaternion=function(a,b,d,e){this.set(a||0,b||0,d||0,e!==undefined?e:1)};
+1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}this.matrixWorldNeedsUpdate=!0},update:function(a,b,d){if(this.visible){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||b){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;b=!0}a=0;for(var e=this.children.length;a<
+e;a++)this.children[a].update(this.matrixWorld,b,d)}}};THREE.Quaternion=function(a,b,d,e){this.set(a||0,b||0,d||0,e!==undefined?e:1)};
 THREE.Quaternion.prototype={set:function(a,b,d,e){this.x=a;this.y=b;this.z=d;this.w=e;return this},setFromEuler:function(a){var b=0.5*Math.PI/360,d=a.x*b,e=a.y*b,g=a.z*b;a=Math.cos(e);e=Math.sin(e);b=Math.cos(-g);g=Math.sin(-g);var l=Math.cos(d);d=Math.sin(d);var m=a*b,p=e*g;this.w=m*l-p*d;this.x=m*d+p*l;this.y=e*b*l+a*g*d;this.z=a*g*l-e*b*d;return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=
 -1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);if(a==0)this.w=this.z=this.y=this.x=0;else{a=1/a;this.x*=a;this.y*=a;this.z*=a;this.w*=a}return this},multiplySelf:function(a){var b=this.x,d=this.y,e=this.z,g=this.w,l=a.x,m=a.y,p=a.z;a=a.w;this.x=b*a+g*l+d*p-e*m;this.y=d*a+g*m+e*l-b*p;this.z=e*a+g*p+b*m-d*l;this.w=g*a-b*l-d*m-e*p;return this},
 multiplyVector3:function(a,b){b||(b=a);var d=a.x,e=a.y,g=a.z,l=this.x,m=this.y,p=this.z,o=this.w,z=o*d+m*g-p*e,D=o*e+p*d-l*g,C=o*g+l*e-m*d;d=-l*d-m*e-p*g;b.x=z*o+d*-l+D*-p-C*-m;b.y=D*o+d*-m+C*-l-z*-p;b.z=C*o+d*-p+z*-m-D*-l;return b}};

+ 3 - 7
src/core/Object3D.js

@@ -145,7 +145,7 @@ THREE.Object3D.prototype = {
 
 		}
 
-		return true;
+		this.matrixWorldNeedsUpdate = true;
 
 	},
 
@@ -153,15 +153,11 @@ THREE.Object3D.prototype = {
 
 		if ( this.visible ) {
 
-			if ( this.matrixAutoUpdate ) {
-
-				forceUpdate |= this.updateMatrix();
-
-			}
+			this.matrixAutoUpdate && this.updateMatrix();
 
 			// update matrixWorld
 
-			if ( forceUpdate || this.matrixWorldNeedsUpdate ) {
+			if ( this.matrixWorldNeedsUpdate || forceUpdate ) {
 
 				if ( parentMatrixWorld ) {
 

+ 3 - 3
src/renderers/Projector.js

@@ -78,13 +78,13 @@ THREE.Projector = function() {
 
 		_face3Count = _lineCount = _particleCount = 0;
 
-		camera.matrixAutoUpdate && camera.update();
+		camera.matrixAutoUpdate && camera.updateMatrix();
+
+		scene.update( undefined, false, camera );
 
 		_projScreenMatrix.multiply( camera.projectionMatrix, camera.matrixWorldInverse );
 		computeFrustum( _projScreenMatrix );
 
-		scene.update( undefined, false, camera );
-
 		objects = this.projectObjects( scene, camera, true ); // scene.objects;
 
 		for ( o = 0, ol = objects.length; o < ol; o++ ) {