|
@@ -13,15 +13,15 @@ THREE.Vector4.prototype={set:function(a,b,d,e){this.x=a;this.y=b;this.z=d;this.w
|
|
|
return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a;this.w/=a;return this},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},toString:function(){return"THREE.Vector4 ("+this.x+", "+this.y+", "+this.z+", "+this.w+")"}};
|
|
|
THREE.Ray=function(a,b){this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3};
|
|
|
THREE.Ray.prototype={intersectScene:function(a){var b,d,e=a.objects,f=[];a=0;for(b=e.length;a<b;a++){d=e[a];if(d instanceof THREE.Mesh)f=f.concat(this.intersectObject(d))}f.sort(function(j,k){return j.distance-k.distance});return f},intersectObject:function(a){function b(L,u,A,l){l=l.clone().subSelf(u);A=A.clone().subSelf(u);var h=L.clone().subSelf(u);L=l.dot(l);u=l.dot(A);l=l.dot(h);var i=A.dot(A);A=A.dot(h);h=1/(L*i-u*u);i=(i*l-u*A)*h;L=(L*A-u*l)*h;return i>0&&L>0&&i+L<1}var d,e,f,j,k,g,m,c,s,E,
|
|
|
-r,w=a.geometry,v=w.vertices,x=[];d=0;for(e=w.faces.length;d<e;d++){f=w.faces[d];E=this.origin.clone();r=this.direction.clone();j=a.matrix.transformVector3(v[f.a].position.clone());k=a.matrix.transformVector3(v[f.b].position.clone());g=a.matrix.transformVector3(v[f.c].position.clone());m=f instanceof THREE.Face4?a.matrix.transformVector3(v[f.d].position.clone()):null;c=a.rotationMatrix.transformVector3(f.normal.clone());s=r.dot(c);if(s<0){c=c.dot((new THREE.Vector3).sub(j,E))/s;E=E.addSelf(r.multiplyScalar(c));
|
|
|
+r,w=a.geometry,v=w.vertices,x=[];d=0;for(e=w.faces.length;d<e;d++){f=w.faces[d];E=this.origin.clone();r=this.direction.clone();j=a.matrix.multiplyVector3(v[f.a].position.clone());k=a.matrix.multiplyVector3(v[f.b].position.clone());g=a.matrix.multiplyVector3(v[f.c].position.clone());m=f instanceof THREE.Face4?a.matrix.multiplyVector3(v[f.d].position.clone()):null;c=a.rotationMatrix.multiplyVector3(f.normal.clone());s=r.dot(c);if(s<0){c=c.dot((new THREE.Vector3).sub(j,E))/s;E=E.addSelf(r.multiplyScalar(c));
|
|
|
if(f instanceof THREE.Face3){if(b(E,j,k,g)){f={distance:this.origin.distanceTo(E),point:E,face:f,object:a};x.push(f)}}else if(f instanceof THREE.Face4)if(b(E,j,k,m)||b(E,k,g,m)){f={distance:this.origin.distanceTo(E),point:E,face:f,object:a};x.push(f)}}}return x}};
|
|
|
THREE.Rectangle=function(){function a(){j=e-b;k=f-d}var b,d,e,f,j,k,g=true;this.getX=function(){return b};this.getY=function(){return d};this.getWidth=function(){return j};this.getHeight=function(){return k};this.getLeft=function(){return b};this.getTop=function(){return d};this.getRight=function(){return e};this.getBottom=function(){return f};this.set=function(m,c,s,E){g=false;b=m;d=c;e=s;f=E;a()};this.addPoint=function(m,c){if(g){g=false;b=m;d=c;e=m;f=c}else{b=Math.min(b,m);d=Math.min(d,c);e=Math.max(e,
|
|
|
m);f=Math.max(f,c)}a()};this.addRectangle=function(m){if(g){g=false;b=m.getLeft();d=m.getTop();e=m.getRight();f=m.getBottom()}else{b=Math.min(b,m.getLeft());d=Math.min(d,m.getTop());e=Math.max(e,m.getRight());f=Math.max(f,m.getBottom())}a()};this.inflate=function(m){b-=m;d-=m;e+=m;f+=m;a()};this.minSelf=function(m){b=Math.max(b,m.getLeft());d=Math.max(d,m.getTop());e=Math.min(e,m.getRight());f=Math.min(f,m.getBottom());a()};this.instersects=function(m){return Math.min(e,m.getRight())-Math.max(b,m.getLeft())>=
|
|
|
0&&Math.min(f,m.getBottom())-Math.max(d,m.getTop())>=0};this.empty=function(){g=true;f=e=d=b=0;a()};this.isEmpty=function(){return g};this.toString=function(){return"THREE.Rectangle ( left: "+b+", right: "+e+", top: "+d+", bottom: "+f+", width: "+j+", height: "+k+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a;a=this.m[1];this.m[1]=this.m[3];this.m[3]=a;a=this.m[2];this.m[2]=this.m[6];this.m[6]=a;a=this.m[5];this.m[5]=this.m[7];this.m[7]=a;return this}};
|
|
|
THREE.Matrix4=function(){};
|
|
|
THREE.Matrix4.prototype={n11:1,n12:0,n13:0,n14:0,n21:0,n22:1,n23:0,n24:0,n31:0,n32:0,n33:1,n34:0,n41:0,n42:0,n43:0,n44:1,identity:function(){this.n11=1;this.n21=this.n14=this.n13=this.n12=0;this.n22=1;this.n32=this.n31=this.n24=this.n23=0;this.n33=1;this.n43=this.n42=this.n41=this.n34=0;this.n44=1},copy:function(a){this.n11=a.n11;this.n12=a.n12;this.n13=a.n13;this.n14=a.n14;this.n21=a.n21;this.n22=a.n22;this.n23=a.n23;this.n24=a.n24;this.n31=a.n31;this.n32=a.n32;this.n33=a.n33;this.n34=a.n34;this.n41=
|
|
|
-a.n41;this.n42=a.n42;this.n43=a.n43;this.n44=a.n44},lookAt:function(a,b,d){var e=new THREE.Vector3,f=new THREE.Vector3,j=new THREE.Vector3;j.sub(a,b).normalize();e.cross(d,j).normalize();f.cross(j,e).normalize();this.n11=e.x;this.n12=e.y;this.n13=e.z;this.n14=-e.dot(a);this.n21=f.x;this.n22=f.y;this.n23=f.z;this.n24=-f.dot(a);this.n31=j.x;this.n32=j.y;this.n33=j.z;this.n34=-j.dot(a);this.n43=this.n42=this.n41=0;this.n44=1},transformVector3:function(a){var b=a.x,d=a.y,e=a.z,f=1/(this.n41*b+this.n42*
|
|
|
-d+this.n43*e+this.n44);a.x=(this.n11*b+this.n12*d+this.n13*e+this.n14)*f;a.y=(this.n21*b+this.n22*d+this.n23*e+this.n24)*f;a.z=(this.n31*b+this.n32*d+this.n33*e+this.n34)*f;return a},transformVector4:function(a){var b=a.x,d=a.y,e=a.z,f=a.w;a.x=this.n11*b+this.n12*d+this.n13*e+this.n14*f;a.y=this.n21*b+this.n22*d+this.n23*e+this.n24*f;a.z=this.n31*b+this.n32*d+this.n33*e+this.n34*f;a.w=this.n41*b+this.n42*d+this.n43*e+this.n44*f;return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*
|
|
|
+a.n41;this.n42=a.n42;this.n43=a.n43;this.n44=a.n44},lookAt:function(a,b,d){var e=new THREE.Vector3,f=new THREE.Vector3,j=new THREE.Vector3;j.sub(a,b).normalize();e.cross(d,j).normalize();f.cross(j,e).normalize();this.n11=e.x;this.n12=e.y;this.n13=e.z;this.n14=-e.dot(a);this.n21=f.x;this.n22=f.y;this.n23=f.z;this.n24=-f.dot(a);this.n31=j.x;this.n32=j.y;this.n33=j.z;this.n34=-j.dot(a);this.n43=this.n42=this.n41=0;this.n44=1},multiplyVector3:function(a){var b=a.x,d=a.y,e=a.z,f=1/(this.n41*b+this.n42*
|
|
|
+d+this.n43*e+this.n44);a.x=(this.n11*b+this.n12*d+this.n13*e+this.n14)*f;a.y=(this.n21*b+this.n22*d+this.n23*e+this.n24)*f;a.z=(this.n31*b+this.n32*d+this.n33*e+this.n34)*f;return a},multiplyVector4:function(a){var b=a.x,d=a.y,e=a.z,f=a.w;a.x=this.n11*b+this.n12*d+this.n13*e+this.n14*f;a.y=this.n21*b+this.n22*d+this.n23*e+this.n24*f;a.z=this.n31*b+this.n32*d+this.n33*e+this.n34*f;a.w=this.n41*b+this.n42*d+this.n43*e+this.n44*f;return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*
|
|
|
a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;b.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;b.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},multiply:function(a,b){var d=a.n11,e=a.n12,f=a.n13,j=a.n14,k=a.n21,g=a.n22,m=a.n23,c=a.n24,s=a.n31,E=a.n32,r=a.n33,w=a.n34,v=a.n41,x=a.n42,L=a.n43,u=a.n44,A=b.n11,l=b.n12,h=b.n13,i=b.n14,n=b.n21,y=b.n22,p=b.n23,o=b.n24,G=b.n31,B=b.n32,Q=b.n33,F=b.n34,V=b.n41,U=b.n42,D=b.n43,
|
|
|
P=b.n44;this.n11=d*A+e*n+f*G+j*V;this.n12=d*l+e*y+f*B+j*U;this.n13=d*h+e*p+f*Q+j*D;this.n14=d*i+e*o+f*F+j*P;this.n21=k*A+g*n+m*G+c*V;this.n22=k*l+g*y+m*B+c*U;this.n23=k*h+g*p+m*Q+c*D;this.n24=k*i+g*o+m*F+c*P;this.n31=s*A+E*n+r*G+w*V;this.n32=s*l+E*y+r*B+w*U;this.n33=s*h+E*p+r*Q+w*D;this.n34=s*i+E*o+r*F+w*P;this.n41=v*A+x*n+L*G+u*V;this.n42=v*l+x*y+L*B+u*U;this.n43=v*h+x*p+L*Q+u*D;this.n44=v*i+x*o+L*F+u*P},multiplySelf:function(a){var b=this.n11,d=this.n12,e=this.n13,f=this.n14,j=this.n21,k=this.n22,
|
|
|
g=this.n23,m=this.n24,c=this.n31,s=this.n32,E=this.n33,r=this.n34,w=this.n41,v=this.n42,x=this.n43,L=this.n44;this.n11=b*a.n11+d*a.n21+e*a.n31+f*a.n41;this.n12=b*a.n12+d*a.n22+e*a.n32+f*a.n42;this.n13=b*a.n13+d*a.n23+e*a.n33+f*a.n43;this.n14=b*a.n14+d*a.n24+e*a.n34+f*a.n44;this.n21=j*a.n11+k*a.n21+g*a.n31+m*a.n41;this.n22=j*a.n12+k*a.n22+g*a.n32+m*a.n42;this.n23=j*a.n13+k*a.n23+g*a.n33+m*a.n43;this.n24=j*a.n14+k*a.n24+g*a.n34+m*a.n44;this.n31=c*a.n11+s*a.n21+E*a.n31+r*a.n41;this.n32=c*a.n12+s*a.n22+
|
|
@@ -44,9 +44,9 @@ THREE.Face3=function(a,b,d,e,f){this.a=a;this.b=b;this.c=d;this.centroid=new THR
|
|
|
THREE.Face4=function(a,b,d,e,f,j){this.a=a;this.b=b;this.c=d;this.d=e;this.centroid=new THREE.Vector3;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.material=j instanceof Array?j:[j]};THREE.Face4.prototype={toString:function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(a,b){this.u=a||0;this.v=b||0};
|
|
|
THREE.UV.prototype={copy:function(a){this.u=a.u;this.v=a.v},toString:function(){return"THREE.UV ("+this.u+", "+this.v+")"}};THREE.Geometry=function(){this.vertices=[];this.faces=[];this.uvs=[]};
|
|
|
THREE.Geometry.prototype={computeCentroids:function(){var a,b,d;a=0;for(b=this.faces.length;a<b;a++){d=this.faces[a];d.centroid.set(0,0,0);d.centroid.addSelf(this.vertices[d.a].position);d.centroid.addSelf(this.vertices[d.b].position);d.centroid.addSelf(this.vertices[d.c].position);if(d instanceof THREE.Face3)d.centroid.divideScalar(3);else if(d instanceof THREE.Face4){d.centroid.addSelf(this.vertices[d.d].position);d.centroid.divideScalar(4)}}},computeNormals:function(a){var b,d,e,f,j,k,g=new THREE.Vector3,
|
|
|
-m=new THREE.Vector3;e=0;for(f=this.vertices.length;e<f;e++){j=this.vertices[e];j.normal.set(0,0,0)}e=0;for(f=this.faces.length;e<f;e++){j=this.faces[e];if(a&&j.vertexNormals.length){g.set(0,0,0);b=0;for(d=j.normal.length;b<d;b++)g.addSelf(j.vertexNormals[b]);g.divideScalar(3)}else{b=this.vertices[j.a];d=this.vertices[j.b];k=this.vertices[j.c];g.sub(k.position,d.position);m.sub(b.position,d.position);g.crossSelf(m)}g.isZero()||g.normalize();j.normal.copy(g)}},computeBoundingBox:function(){if(this.vertices.length>
|
|
|
-0){this.bbox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var a=1,b=this.vertices.length;a<b;a++){vertex=this.vertices[a];if(vertex.position.x<this.bbox.x[0])this.bbox.x[0]=vertex.position.x;else if(vertex.position.x>this.bbox.x[1])this.bbox.x[1]=vertex.position.x;if(vertex.position.y<this.bbox.y[0])this.bbox.y[0]=vertex.position.y;else if(vertex.position.y>
|
|
|
-this.bbox.y[1])this.bbox.y[1]=vertex.position.y;if(vertex.position.z<this.bbox.z[0])this.bbox.z[0]=vertex.position.z;else if(vertex.position.z>this.bbox.z[1])this.bbox.z[1]=vertex.position.z}}},toString:function(){return"THREE.Geometry ( vertices: "+this.vertices+", faces: "+this.faces+" )"}};
|
|
|
+m=new THREE.Vector3;e=0;for(f=this.vertices.length;e<f;e++){j=this.vertices[e];j.normal.set(0,0,0)}e=0;for(f=this.faces.length;e<f;e++){j=this.faces[e];if(a&&j.vertexNormals.length){g.set(0,0,0);b=0;for(d=j.normal.length;b<d;b++)g.addSelf(j.vertexNormals[b]);g.divideScalar(3)}else{b=this.vertices[j.a];d=this.vertices[j.b];k=this.vertices[j.c];g.sub(k.position,d.position);m.sub(b.position,d.position);g.crossSelf(m)}g.isZero()||g.normalize();j.normal.copy(g)}},computeVertexNormals:function(){var a,
|
|
|
+b;a=0;for(b=this.faces.length;a<b;a++);},computeBoundingBox:function(){if(this.vertices.length>0){this.bbox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var a=1,b=this.vertices.length;a<b;a++){vertex=this.vertices[a];if(vertex.position.x<this.bbox.x[0])this.bbox.x[0]=vertex.position.x;else if(vertex.position.x>this.bbox.x[1])this.bbox.x[1]=vertex.position.x;
|
|
|
+if(vertex.position.y<this.bbox.y[0])this.bbox.y[0]=vertex.position.y;else if(vertex.position.y>this.bbox.y[1])this.bbox.y[1]=vertex.position.y;if(vertex.position.z<this.bbox.z[0])this.bbox.z[0]=vertex.position.z;else if(vertex.position.z>this.bbox.z[1])this.bbox.z[1]=vertex.position.z}}},toString:function(){return"THREE.Geometry ( vertices: "+this.vertices+", faces: "+this.faces+", uvs: "+this.uvs+" )"}};
|
|
|
THREE.Camera=function(a,b,d,e){this.position=new THREE.Vector3(0,0,0);this.target={position:new THREE.Vector3(0,0,0)};this.up=new THREE.Vector3(0,1,0);this.matrix=new THREE.Matrix4;this.projectionMatrix=THREE.Matrix4.makePerspective(a,b,d,e);this.autoUpdateMatrix=true;this.updateMatrix=function(){this.matrix.lookAt(this.position,this.target.position,this.up)};this.toString=function(){return"THREE.Camera ( "+this.position+", "+this.target.position+" )"}};THREE.Light=function(a){this.color=new THREE.Color(a)};
|
|
|
THREE.AmbientLight=function(a){THREE.Light.call(this,a)};THREE.AmbientLight.prototype=new THREE.Light;THREE.AmbientLight.prototype.constructor=THREE.AmbientLight;THREE.DirectionalLight=function(a,b){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.intensity=b||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.DirectionalLight;
|
|
|
THREE.PointLight=function(a,b){THREE.Light.call(this,a);this.position=new THREE.Vector3;this.intensity=b||1};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.PointLight;
|
|
@@ -84,16 +84,16 @@ THREE.ParticleDOMMaterial=function(a){this.domElement=a;this.toString=function()
|
|
|
THREE.UVMapping=0;THREE.ReflectionMapping=1;THREE.RefractionMapping=2;THREE.Multiply=0;THREE.Mix=1;THREE.Repeat=0;THREE.ClampToEdge=1;THREE.MirroredRepeat=2;THREE.TextureCube=function(a,b){this.image=a;this.mapping=b?b:THREE.ReflectionMap;this.toString=function(){return"THREE.TextureCube (<br/>image: "+this.image+"<br/>mapping: "+this.mapping+"<br/>)"}};
|
|
|
THREE.Scene=function(){this.objects=[];this.lights=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(a){a=this.objects.indexOf(a);a!==-1&&this.objects.splice(a,1)};this.addLight=function(a){this.lights.push(a)};this.removeLight=function(a){a=this.lights.indexOf(a);a!==-1&&this.lights.splice(a,1)};this.toString=function(){return"THREE.Scene ( "+this.objects+" )"}};
|
|
|
THREE.Projector=function(){function a(A,l){var h=0,i=1,n=A.z+A.w,y=l.z+l.w,p=-A.z+A.w,o=-l.z+l.w;if(n>=0&&y>=0&&p>=0&&o>=0)return true;else if(n<0&&y<0||p<0&&o<0)return false;else{if(n<0)h=Math.max(h,n/(n-y));else if(y<0)i=Math.min(i,n/(n-y));if(p<0)h=Math.max(h,p/(p-o));else if(o<0)i=Math.min(i,p/(p-o));if(i<h)return false;else{A.lerpSelf(l,h);l.lerpSelf(A,1-i);return true}}}var b=null,d,e,f,j=[],k,g,m=[],c,s,E=[],r=new THREE.Vector4,w=new THREE.Matrix4,v=new THREE.Matrix4,x=new THREE.Vector4,L=
|
|
|
-new THREE.Vector4,u;this.projectScene=function(A,l){var h,i,n,y,p,o,G,B,Q,F,V,U,D,P,C,J,I;b=[];f=g=s=0;l.autoUpdateMatrix&&l.updateMatrix();w.multiply(l.projectionMatrix,l.matrix);G=A.objects;h=0;for(i=G.length;h<i;h++){B=G[h];B.autoUpdateMatrix&&B.updateMatrix();Q=B.matrix;F=B.rotationMatrix;V=B.material;U=B.overdraw;if(B instanceof THREE.Mesh){D=B.geometry.vertices;n=0;for(y=D.length;n<y;n++){P=D[n];P.positionWorld.copy(P.position);Q.transformVector3(P.positionWorld);C=P.positionScreen;C.copy(P.positionWorld);
|
|
|
-w.transformVector4(C);C.multiplyScalar(1/C.w);P.__visible=C.z>0&&C.z<1}P=B.geometry.faces;n=0;for(y=P.length;n<y;n++){C=P[n];if(C instanceof THREE.Face3){p=D[C.a];o=D[C.b];J=D[C.c];if(p.__visible&&o.__visible&&J.__visible)if(B.doubleSided||B.flipSided!=(J.positionScreen.x-p.positionScreen.x)*(o.positionScreen.y-p.positionScreen.y)-(J.positionScreen.y-p.positionScreen.y)*(o.positionScreen.x-p.positionScreen.x)<0){d=j[f]=j[f]||new THREE.RenderableFace3;d.v1.positionWorld.copy(p.positionWorld);d.v2.positionWorld.copy(o.positionWorld);
|
|
|
-d.v3.positionWorld.copy(J.positionWorld);d.v1.positionScreen.copy(p.positionScreen);d.v2.positionScreen.copy(o.positionScreen);d.v3.positionScreen.copy(J.positionScreen);d.normalWorld.copy(C.normal);F.transformVector3(d.normalWorld);d.centroidWorld.copy(C.centroid);Q.transformVector3(d.centroidWorld);d.centroidScreen.copy(d.centroidWorld);w.transformVector3(d.centroidScreen);J=C.vertexNormals;u=d.vertexNormalsWorld;p=0;for(o=J.length;p<o;p++){I=u[p]=u[p]||new THREE.Vector3;I.copy(J[p]);F.transformVector3(I)}d.z=
|
|
|
+new THREE.Vector4,u;this.projectScene=function(A,l){var h,i,n,y,p,o,G,B,Q,F,V,U,D,P,C,J,I;b=[];f=g=s=0;l.autoUpdateMatrix&&l.updateMatrix();w.multiply(l.projectionMatrix,l.matrix);G=A.objects;h=0;for(i=G.length;h<i;h++){B=G[h];B.autoUpdateMatrix&&B.updateMatrix();Q=B.matrix;F=B.rotationMatrix;V=B.material;U=B.overdraw;if(B instanceof THREE.Mesh){D=B.geometry.vertices;n=0;for(y=D.length;n<y;n++){P=D[n];P.positionWorld.copy(P.position);Q.multiplyVector3(P.positionWorld);C=P.positionScreen;C.copy(P.positionWorld);
|
|
|
+w.multiplyVector4(C);C.multiplyScalar(1/C.w);P.__visible=C.z>0&&C.z<1}P=B.geometry.faces;n=0;for(y=P.length;n<y;n++){C=P[n];if(C instanceof THREE.Face3){p=D[C.a];o=D[C.b];J=D[C.c];if(p.__visible&&o.__visible&&J.__visible)if(B.doubleSided||B.flipSided!=(J.positionScreen.x-p.positionScreen.x)*(o.positionScreen.y-p.positionScreen.y)-(J.positionScreen.y-p.positionScreen.y)*(o.positionScreen.x-p.positionScreen.x)<0){d=j[f]=j[f]||new THREE.RenderableFace3;d.v1.positionWorld.copy(p.positionWorld);d.v2.positionWorld.copy(o.positionWorld);
|
|
|
+d.v3.positionWorld.copy(J.positionWorld);d.v1.positionScreen.copy(p.positionScreen);d.v2.positionScreen.copy(o.positionScreen);d.v3.positionScreen.copy(J.positionScreen);d.normalWorld.copy(C.normal);F.multiplyVector3(d.normalWorld);d.centroidWorld.copy(C.centroid);Q.multiplyVector3(d.centroidWorld);d.centroidScreen.copy(d.centroidWorld);w.multiplyVector3(d.centroidScreen);J=C.vertexNormals;u=d.vertexNormalsWorld;p=0;for(o=J.length;p<o;p++){I=u[p]=u[p]||new THREE.Vector3;I.copy(J[p]);F.multiplyVector3(I)}d.z=
|
|
|
d.centroidScreen.z;d.meshMaterial=V;d.faceMaterial=C.material;d.overdraw=U;if(B.geometry.uvs[n]){d.uvs[0]=B.geometry.uvs[n][0];d.uvs[1]=B.geometry.uvs[n][1];d.uvs[2]=B.geometry.uvs[n][2]}b.push(d);f++}}else if(C instanceof THREE.Face4){p=D[C.a];o=D[C.b];J=D[C.c];I=D[C.d];if(p.__visible&&o.__visible&&J.__visible&&I.__visible)if(B.doubleSided||B.flipSided!=((I.positionScreen.x-p.positionScreen.x)*(o.positionScreen.y-p.positionScreen.y)-(I.positionScreen.y-p.positionScreen.y)*(o.positionScreen.x-p.positionScreen.x)<
|
|
|
-0||(o.positionScreen.x-J.positionScreen.x)*(I.positionScreen.y-J.positionScreen.y)-(o.positionScreen.y-J.positionScreen.y)*(I.positionScreen.x-J.positionScreen.x)<0)){d=j[f]=j[f]||new THREE.RenderableFace3;d.v1.positionWorld.copy(p.positionWorld);d.v2.positionWorld.copy(o.positionWorld);d.v3.positionWorld.copy(I.positionWorld);d.v1.positionScreen.copy(p.positionScreen);d.v2.positionScreen.copy(o.positionScreen);d.v3.positionScreen.copy(I.positionScreen);d.normalWorld.copy(C.normal);F.transformVector3(d.normalWorld);
|
|
|
-d.centroidWorld.copy(C.centroid);Q.transformVector3(d.centroidWorld);d.centroidScreen.copy(d.centroidWorld);w.transformVector3(d.centroidScreen);d.z=d.centroidScreen.z;d.meshMaterial=V;d.faceMaterial=C.material;d.overdraw=U;if(B.geometry.uvs[n]){d.uvs[0]=B.geometry.uvs[n][0];d.uvs[1]=B.geometry.uvs[n][1];d.uvs[2]=B.geometry.uvs[n][3]}b.push(d);f++;e=j[f]=j[f]||new THREE.RenderableFace3;e.v1.positionWorld.copy(o.positionWorld);e.v2.positionWorld.copy(J.positionWorld);e.v3.positionWorld.copy(I.positionWorld);
|
|
|
+0||(o.positionScreen.x-J.positionScreen.x)*(I.positionScreen.y-J.positionScreen.y)-(o.positionScreen.y-J.positionScreen.y)*(I.positionScreen.x-J.positionScreen.x)<0)){d=j[f]=j[f]||new THREE.RenderableFace3;d.v1.positionWorld.copy(p.positionWorld);d.v2.positionWorld.copy(o.positionWorld);d.v3.positionWorld.copy(I.positionWorld);d.v1.positionScreen.copy(p.positionScreen);d.v2.positionScreen.copy(o.positionScreen);d.v3.positionScreen.copy(I.positionScreen);d.normalWorld.copy(C.normal);F.multiplyVector3(d.normalWorld);
|
|
|
+d.centroidWorld.copy(C.centroid);Q.multiplyVector3(d.centroidWorld);d.centroidScreen.copy(d.centroidWorld);w.multiplyVector3(d.centroidScreen);d.z=d.centroidScreen.z;d.meshMaterial=V;d.faceMaterial=C.material;d.overdraw=U;if(B.geometry.uvs[n]){d.uvs[0]=B.geometry.uvs[n][0];d.uvs[1]=B.geometry.uvs[n][1];d.uvs[2]=B.geometry.uvs[n][3]}b.push(d);f++;e=j[f]=j[f]||new THREE.RenderableFace3;e.v1.positionWorld.copy(o.positionWorld);e.v2.positionWorld.copy(J.positionWorld);e.v3.positionWorld.copy(I.positionWorld);
|
|
|
e.v1.positionScreen.copy(o.positionScreen);e.v2.positionScreen.copy(J.positionScreen);e.v3.positionScreen.copy(I.positionScreen);e.normalWorld.copy(d.normalWorld);e.centroidWorld.copy(d.centroidWorld);e.centroidScreen.copy(d.centroidScreen);e.z=e.centroidScreen.z;e.meshMaterial=V;e.faceMaterial=C.material;e.overdraw=U;if(B.geometry.uvs[n]){e.uvs[0]=B.geometry.uvs[n][1];e.uvs[1]=B.geometry.uvs[n][2];e.uvs[2]=B.geometry.uvs[n][3]}b.push(e);f++}}}}else if(B instanceof THREE.Line){v.multiply(w,Q);D=B.geometry.vertices;
|
|
|
-P=D[0];P.positionScreen.copy(P.position);v.transformVector4(P.positionScreen);n=1;for(y=D.length;n<y;n++){p=D[n];p.positionScreen.copy(p.position);v.transformVector4(p.positionScreen);o=D[n-1];x.copy(p.positionScreen);L.copy(o.positionScreen);if(a(x,L)){x.multiplyScalar(1/x.w);L.multiplyScalar(1/L.w);k=m[g]=m[g]||new THREE.RenderableLine;k.v1.positionScreen.copy(x);k.v2.positionScreen.copy(L);k.z=Math.max(x.z,L.z);k.material=B.material;b.push(k);g++}}}else if(B instanceof THREE.Particle){r.set(B.position.x,
|
|
|
-B.position.y,B.position.z,1);w.transformVector4(r);r.z/=r.w;if(r.z>0&&r.z<1){c=E[s]=E[s]||new THREE.RenderableParticle;c.x=r.x/r.w;c.y=r.y/r.w;c.z=r.z;c.rotation=B.rotation.z;c.scale.x=B.scale.x*Math.abs(c.x-(r.x+l.projectionMatrix.n11)/(r.w+l.projectionMatrix.n14));c.scale.y=B.scale.y*Math.abs(c.y-(r.y+l.projectionMatrix.n22)/(r.w+l.projectionMatrix.n24));c.material=B.material;b.push(c);s++}}}b.sort(function(T,N){return N.z-T.z});return b};this.unprojectVector=function(A,l){var h=new THREE.Matrix4;
|
|
|
-h.multiply(THREE.Matrix4.makeInvert(l.matrix),THREE.Matrix4.makeInvert(l.projectionMatrix));h.transformVector3(A);return A}};
|
|
|
+P=D[0];P.positionScreen.copy(P.position);v.multiplyVector4(P.positionScreen);n=1;for(y=D.length;n<y;n++){p=D[n];p.positionScreen.copy(p.position);v.multiplyVector4(p.positionScreen);o=D[n-1];x.copy(p.positionScreen);L.copy(o.positionScreen);if(a(x,L)){x.multiplyScalar(1/x.w);L.multiplyScalar(1/L.w);k=m[g]=m[g]||new THREE.RenderableLine;k.v1.positionScreen.copy(x);k.v2.positionScreen.copy(L);k.z=Math.max(x.z,L.z);k.material=B.material;b.push(k);g++}}}else if(B instanceof THREE.Particle){r.set(B.position.x,
|
|
|
+B.position.y,B.position.z,1);w.multiplyVector4(r);r.z/=r.w;if(r.z>0&&r.z<1){c=E[s]=E[s]||new THREE.RenderableParticle;c.x=r.x/r.w;c.y=r.y/r.w;c.z=r.z;c.rotation=B.rotation.z;c.scale.x=B.scale.x*Math.abs(c.x-(r.x+l.projectionMatrix.n11)/(r.w+l.projectionMatrix.n14));c.scale.y=B.scale.y*Math.abs(c.y-(r.y+l.projectionMatrix.n22)/(r.w+l.projectionMatrix.n24));c.material=B.material;b.push(c);s++}}}b.sort(function(T,N){return N.z-T.z});return b};this.unprojectVector=function(A,l){var h=new THREE.Matrix4;
|
|
|
+h.multiply(THREE.Matrix4.makeInvert(l.matrix),THREE.Matrix4.makeInvert(l.projectionMatrix));h.multiplyVector3(A);return A}};
|
|
|
THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,b=new THREE.Projector,d,e,f,j;this.domElement=document.createElement("div");this.setSize=function(k,g){d=k;e=g;f=d/2;j=e/2};this.render=function(k,g){var m,c,s,E,r,w,v,x;a=b.projectScene(k,g);m=0;for(c=a.length;m<c;m++){r=a[m];if(r instanceof THREE.RenderableParticle){v=r.x*f+f;x=r.y*j+j;s=0;for(E=r.material.length;s<E;s++){w=r.material[s];if(w instanceof THREE.ParticleDOMMaterial){w=w.domElement;w.style.left=v+"px";w.style.top=x+"px"}}}}}};
|
|
|
THREE.CanvasRenderer=function(){function a(R,aa,Z,O){var H,S,ca,X,$=R.lights;R=0;for(H=$.length;R<H;R++){S=$[R];ca=S.color;X=S.intensity;if(S instanceof THREE.DirectionalLight){S=Z.dot(S.position)*X;if(S>0){O.r+=ca.r*S;O.g+=ca.g*S;O.b+=ca.b*S}}else if(S instanceof THREE.PointLight){da.sub(S.position,aa);da.normalize();S=Z.dot(da)*X;if(S>0){O.r+=ca.r*S;O.g+=ca.g*S;O.b+=ca.b*S}}}}function b(R,aa,Z,O,H,S){if(H.opacity!=0){j(H.opacity);k(H.blending);Q=R.positionScreen.x;F=R.positionScreen.y;V=aa.positionScreen.x;
|
|
|
U=aa.positionScreen.y;D=Z.positionScreen.x;P=Z.positionScreen.y;var ca=Q,X=F,$=V,ea=U,ba=D,fa=P;u.beginPath();u.moveTo(ca,X);u.lineTo($,ea);u.lineTo(ba,fa);u.lineTo(ca,X);u.closePath();if(H instanceof THREE.MeshBasicMaterial)if(H.map&&H.map.loaded)f(Q,F,V,U,D,P,H.map.image,O.uvs[0].u,O.uvs[0].v,O.uvs[1].u,O.uvs[1].v,O.uvs[2].u,O.uvs[2].v);else if(H.env_map&&H.env_map.loaded){if(H.env_map.mapping==THREE.ReflectionMapping){da.copy(O.vertexNormalsWorld[0]);z=(da.x*camera.matrix.n11+da.y*camera.matrix.n12+
|
|
@@ -166,7 +166,7 @@ A.set(h.matrix.flatten())};this.loadMatrices=function(h){c.uniformMatrix4fv(h.un
|
|
|
c.blendFunc(c.ONE,c.ONE);break;case THREE.SubtractiveBlending:c.blendFunc(c.DST_COLOR,c.ZERO);break;default:c.blendEquation(c.FUNC_ADD);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA)}};this.setFaceCulling=function(h,i){if(h){!i||i=="ccw"?c.frontFace(c.CCW):c.frontFace(c.CW);if(h=="back")c.cullFace(c.BACK);else h=="front"?c.cullFace(c.FRONT):c.cullFace(c.FRONT_AND_BACK);c.enable(c.CULL_FACE)}else c.disable(c.CULL_FACE)}};
|
|
|
THREE.RenderableFace3=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[];this.faceMaterial=this.meshMaterial=null;this.overdraw=false;this.uvs=[null,null,null]};THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=null};
|
|
|
THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.material=null};
|
|
|
-var GeometryUtils={merge:function(a,b){var d=b instanceof THREE.Mesh,e=a.vertices.length,f=d?b.geometry:b,j=a.vertices,k=f.vertices,g=a.faces,m=f.faces,c=a.uvs;f=f.uvs;d&&b.updateMatrix();for(var s=0,E=k.length;s<E;s++){var r=new THREE.Vertex(k[s].position.clone());d&&b.matrix.transformVector3(r.position);j.push(r)}s=0;for(E=m.length;s<E;s++){k=m[s];var w,v=k.vertexNormals;if(k instanceof THREE.Face3)w=new THREE.Face3(k.a+e,k.b+e,k.c+e);else if(k instanceof THREE.Face4)w=new THREE.Face4(k.a+e,k.b+
|
|
|
+var GeometryUtils={merge:function(a,b){var d=b instanceof THREE.Mesh,e=a.vertices.length,f=d?b.geometry:b,j=a.vertices,k=f.vertices,g=a.faces,m=f.faces,c=a.uvs;f=f.uvs;d&&b.updateMatrix();for(var s=0,E=k.length;s<E;s++){var r=new THREE.Vertex(k[s].position.clone());d&&b.matrix.multiplyVector3(r.position);j.push(r)}s=0;for(E=m.length;s<E;s++){k=m[s];var w,v=k.vertexNormals;if(k instanceof THREE.Face3)w=new THREE.Face3(k.a+e,k.b+e,k.c+e);else if(k instanceof THREE.Face4)w=new THREE.Face4(k.a+e,k.b+
|
|
|
e,k.c+e,k.d+e);w.centroid.copy(k.centroid);w.normal.copy(k.normal);d=0;for(j=v.length;d<j;d++){r=v[d];w.vertexNormals.push(r.clone())}w.material=k.material.slice();g.push(w)}s=0;for(E=f.length;s<E;s++){e=f[s];g=[];d=0;for(j=e.length;d<j;d++)g.push(new THREE.UV(e[d].u,e[d].v));c.push(g)}}},ImageUtils={loadTexture:function(a,b){var d=new THREE.Texture(null,b),e=new Image;e.onload=function(){d.image=this;d.loaded=true};e.src=a;return d},loadArray:function(a){var b,d,e=[];b=e.loadCount=0;for(d=a.length;b<
|
|
|
d;++b){e[b]=new Image;e[b].loaded=0;e[b].onload=function(){e.loadCount+=1;this.loaded=1};e[b].src=a[b]}return e}},SceneUtils={addMesh:function(a,b,d,e,f,j,k,g,m,c){b=new THREE.Mesh(b,c);b.scale.x=b.scale.y=b.scale.z=d;b.position.x=e;b.position.y=f;b.position.z=j;b.rotation.x=k;b.rotation.y=g;b.rotation.z=m;a.addObject(b);return b},addPanoramaCubeWebGL:function(a,b,d){d=new THREE.MeshCubeMaterial({env_map:d});b=new THREE.Mesh(new Cube(b,b,b,1,1,null,true),d);a.addObject(b);return b},addPanoramaCube:function(a,
|
|
|
b,d){var e=[];e.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[0])}));e.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[1])}));e.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[2])}));e.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[3])}));e.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[4])}));e.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(d[5])}));mesh=new THREE.Mesh(new Cube(b,b,b,1,1,e,true),new THREE.MeshFaceMaterial);a.addObject(mesh);
|