From a9af9481e5b3d3f931d4e1dfcc01ee1285139036 Mon Sep 17 00:00:00 2001 From: alteredq Date: Mon, 14 Feb 2011 20:21:42 +0100 Subject: [PATCH] Added vertex colors to ASCII model loader and to Blender exporter (plus corresponding example). Also fixed quads vertex color bug in WebGLRenderer and did small optimization of face state handling. --- build/Three.js | 278 +++++++------- build/ThreeDebug.js | 280 +++++++------- build/ThreeExtras.js | 343 +++++++++--------- examples/io_blender_colors.html | 130 +++++++ examples/obj/cubecolors/.htaccess | 7 + examples/obj/cubecolors/cubecolors.blend | Bin 0 -> 555964 bytes examples/obj/cubecolors/cubecolors.js | 48 +++ src/extras/io/Loader.js | 64 +++- src/renderers/WebGLRenderer.js | 32 +- .../scripts/op/io_mesh_threejs/__init__.py | 3 + .../op/io_mesh_threejs/export_threejs.py | 135 +++++-- 11 files changed, 805 insertions(+), 515 deletions(-) create mode 100644 examples/io_blender_colors.html create mode 100644 examples/obj/cubecolors/.htaccess create mode 100644 examples/obj/cubecolors/cubecolors.blend create mode 100644 examples/obj/cubecolors/cubecolors.js diff --git a/build/Three.js b/build/Three.js index 46a41cf8..6abc17d7 100755 --- a/build/Three.js +++ b/build/Three.js @@ -1,6 +1,6 @@ // Three.js r32 - http://github.com/mrdoob/three.js var THREE=THREE||{};THREE.Color=function(a){this.autoUpdate=true;this.setHex(a)}; -THREE.Color.prototype={setRGB:function(a,c,d){this.r=a;this.g=c;this.b=d;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHSV:function(a,c,d){var f,i,j,u,b,o;if(d==0)f=i=j=0;else{u=Math.floor(a*6);b=a*6-u;a=d*(1-c);o=d*(1-c*b);c=d*(1-c*(1-b));switch(u){case 1:f=o;i=d;j=a;break;case 2:f=a;i=d;j=c;break;case 3:f=a;i=o;j=d;break;case 4:f=c;i=a;j=d;break;case 5:f=d;i=a;j=o;break;case 6:case 0:f=d;i=c;j=a}}this.r=f;this.g=i;this.b=j;if(this.autoUpdate){this.updateHex();this.updateStyleString()}}, +THREE.Color.prototype={setRGB:function(a,c,d){this.r=a;this.g=c;this.b=d;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHSV:function(a,c,d){var f,k,m,r,b,n;if(d==0)f=k=m=0;else{r=Math.floor(a*6);b=a*6-r;a=d*(1-c);n=d*(1-c*b);c=d*(1-c*(1-b));switch(r){case 1:f=n;k=d;m=a;break;case 2:f=a;k=d;m=c;break;case 3:f=a;k=n;m=d;break;case 4:f=c;k=a;m=d;break;case 5:f=d;k=a;m=n;break;case 6:case 0:f=d;k=c;m=a}}this.r=f;this.g=k;this.b=m;if(this.autoUpdate){this.updateHex();this.updateStyleString()}}, setHex:function(a){this.hex=~~a&16777215;if(this.autoUpdate){this.updateRGBA();this.updateStyleString()}},updateHex:function(){this.hex=~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},updateRGBA:function(){this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255},updateStyleString:function(){this.__styleString="rgb("+~~(this.r*255)+","+~~(this.g*255)+","+~~(this.b*255)+")"},clone:function(){return new THREE.Color(this.hex)},toString:function(){return"THREE.Color ( r: "+ this.r+", g: "+this.g+", b: "+this.b+", hex: "+this.hex+" )"}};THREE.Vector2=function(a,c){this.x=a||0;this.y=c||0}; THREE.Vector2.prototype={set:function(a,c){this.x=a;this.y=c;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},unit:function(){this.multiplyScalar(1/this.length());return this},length:function(){return Math.sqrt(this.x* @@ -13,52 +13,52 @@ THREE.Vector4=function(a,c,d,f){this.x=a||0;this.y=c||0;this.z=d||0;this.w=f||1} THREE.Vector4.prototype={set:function(a,c,d,f){this.x=a;this.y=c;this.z=d;this.w=f;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w||1;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;this.w=a.w+c.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;this.w=a.w-c.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.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,c){this.x+=(a.x-this.x)*c;this.y+=(a.y-this.y)*c;this.z+=(a.z-this.z)*c;this.w+=(a.w-this.w)*c},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,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3}; -THREE.Ray.prototype={intersectScene:function(a){var c,d,f=a.objects,i=[];a=0;for(c=f.length;a0&&I>0&&p+I<1}var d,f,i,j,u,b,o,q,y,z, -x,s=a.geometry,G=s.vertices,J=[];d=0;for(f=s.faces.length;do?f:o;i=i>q? -i:q}a()};this.add3Points=function(o,q,y,z,x,s){if(b){b=false;c=oy?o>x?o:x:y>x?y:x;i=q>z?q>s?q:s:z>s?z:s}else{c=oy?o>x?o>f?o:f:x>f?x:f:y>x?y>f?y:f:x>f?x:f;i=q>z?q>s?q>i?q:i:s>i?s:i:z>s?z>i?z:i:s>i?s:i}a()};this.addRectangle=function(o){if(b){b=false;c=o.getLeft();d=o.getTop();f=o.getRight();i=o.getBottom()}else{c=co.getRight()?f:o.getRight();i=i>o.getBottom()?i:o.getBottom()}a()};this.inflate=function(o){c-=o;d-=o;f+=o;i+=o;a()};this.minSelf=function(o){c=c>o.getLeft()?c:o.getLeft();d=d>o.getTop()?d:o.getTop();f=f=0&&Math.min(i,o.getBottom())-Math.max(d,o.getTop())>=0};this.empty=function(){b=true;i=f=d=c=0;a()};this.isEmpty=function(){return b};this.toString= -function(){return"THREE.Rectangle ( left: "+c+", right: "+f+", top: "+d+", bottom: "+i+", width: "+j+", height: "+u+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a,c=this.m;a=c[1];c[1]=c[3];c[3]=a;a=c[2];c[2]=c[6];c[6]=a;a=c[5];c[5]=c[7];c[7]=a;return this},transposeIntoArray:function(a){var c=this.m;a[0]=c[0];a[1]=c[3];a[2]=c[6];a[3]=c[1];a[4]=c[4];a[5]=c[7];a[6]=c[2];a[7]=c[5];a[8]=c[8];return this}}; -THREE.Matrix4=function(a,c,d,f,i,j,u,b,o,q,y,z,x,s,G,J){this.n11=a||1;this.n12=c||0;this.n13=d||0;this.n14=f||0;this.n21=i||0;this.n22=j||1;this.n23=u||0;this.n24=b||0;this.n31=o||0;this.n32=q||0;this.n33=y||1;this.n34=z||0;this.n41=x||0;this.n42=s||0;this.n43=G||0;this.n44=J||1;this.flat=Array(16);this.m33=new THREE.Matrix3}; -THREE.Matrix4.prototype={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;return this},set:function(a,c,d,f,i,j,u,b,o,q,y,z,x,s,G,J){this.n11=a;this.n12=c;this.n13=d;this.n14=f;this.n21=i;this.n22=j;this.n23=u;this.n24=b;this.n31=o;this.n32=q;this.n33=y;this.n34=z;this.n41=x;this.n42=s;this.n43=G;this.n44=J;return this},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;return this},lookAt:function(a,c,d){var f=THREE.Matrix4.__tmpVec1,i=THREE.Matrix4.__tmpVec2,j=THREE.Matrix4.__tmpVec3;j.sub(a,c).normalize();f.cross(d,j).normalize();i.cross(j,f).normalize();this.n11=f.x;this.n12=f.y;this.n13=f.z;this.n14=-f.dot(a);this.n21=i.x;this.n22=i.y;this.n23=i.z;this.n24=-i.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;return this},multiplyVector3:function(a){var c=a.x,d=a.y,f=a.z,i=1/(this.n41*c+this.n42*d+this.n43*f+this.n44);a.x=(this.n11*c+this.n12*d+this.n13*f+this.n14)*i;a.y=(this.n21*c+this.n22*d+this.n23*f+this.n24)*i;a.z=(this.n31*c+this.n32*d+this.n33*f+this.n34)*i;return a},multiplyVector4:function(a){var c=a.x,d=a.y,f=a.z,i=a.w;a.x=this.n11*c+this.n12*d+this.n13*f+this.n14*i;a.y=this.n21*c+this.n22*d+this.n23* -f+this.n24*i;a.z=this.n31*c+this.n32*d+this.n33*f+this.n34*i;a.w=this.n41*c+this.n42*d+this.n43*f+this.n44*i;return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var d=a.n11,f=a.n12,i=a.n13,j=a.n14,u=a.n21,b=a.n22,o=a.n23,q=a.n24,y=a.n31, -z=a.n32,x=a.n33,s=a.n34,G=a.n41,J=a.n42,I=a.n43,w=a.n44,Q=c.n11,F=c.n12,e=c.n13,p=c.n14,h=c.n21,g=c.n22,k=c.n23,m=c.n24,t=c.n31,l=c.n32,n=c.n33,r=c.n34,v=c.n41,A=c.n42,C=c.n43,K=c.n44;this.n11=d*Q+f*h+i*t+j*v;this.n12=d*F+f*g+i*l+j*A;this.n13=d*e+f*k+i*n+j*C;this.n14=d*p+f*m+i*r+j*K;this.n21=u*Q+b*h+o*t+q*v;this.n22=u*F+b*g+o*l+q*A;this.n23=u*e+b*k+o*n+q*C;this.n24=u*p+b*m+o*r+q*K;this.n31=y*Q+z*h+x*t+s*v;this.n32=y*F+z*g+x*l+s*A;this.n33=y*e+z*k+x*n+s*C;this.n34=y*p+z*m+x*r+s*K;this.n41=G*Q+J*h+ -I*t+w*v;this.n42=G*F+J*g+I*l+w*A;this.n43=G*e+J*k+I*n+w*C;this.n44=G*p+J*m+I*r+w*K;return this},multiplyToArray:function(a,c,d){var f=a.n11,i=a.n12,j=a.n13,u=a.n14,b=a.n21,o=a.n22,q=a.n23,y=a.n24,z=a.n31,x=a.n32,s=a.n33,G=a.n34,J=a.n41,I=a.n42,w=a.n43;a=a.n44;var Q=c.n11,F=c.n12,e=c.n13,p=c.n14,h=c.n21,g=c.n22,k=c.n23,m=c.n24,t=c.n31,l=c.n32,n=c.n33,r=c.n34,v=c.n41,A=c.n42,C=c.n43;c=c.n44;this.n11=f*Q+i*h+j*t+u*v;this.n12=f*F+i*g+j*l+u*A;this.n13=f*e+i*k+j*n+u*C;this.n14=f*p+i*m+j*r+u*c;this.n21= -b*Q+o*h+q*t+y*v;this.n22=b*F+o*g+q*l+y*A;this.n23=b*e+o*k+q*n+y*C;this.n24=b*p+o*m+q*r+y*c;this.n31=z*Q+x*h+s*t+G*v;this.n32=z*F+x*g+s*l+G*A;this.n33=z*e+x*k+s*n+G*C;this.n34=z*p+x*m+s*r+G*c;this.n41=J*Q+I*h+w*t+a*v;this.n42=J*F+I*g+w*l+a*A;this.n43=J*e+I*k+w*n+a*C;this.n44=J*p+I*m+w*r+a*c;d[0]=this.n11;d[1]=this.n21;d[2]=this.n31;d[3]=this.n41;d[4]=this.n12;d[5]=this.n22;d[6]=this.n32;d[7]=this.n42;d[8]=this.n13;d[9]=this.n23;d[10]=this.n33;d[11]=this.n43;d[12]=this.n14;d[13]=this.n24;d[14]=this.n34; -d[15]=this.n44;return this},multiplySelf:function(a){var c=this.n11,d=this.n12,f=this.n13,i=this.n14,j=this.n21,u=this.n22,b=this.n23,o=this.n24,q=this.n31,y=this.n32,z=this.n33,x=this.n34,s=this.n41,G=this.n42,J=this.n43,I=this.n44,w=a.n11,Q=a.n21,F=a.n31,e=a.n41,p=a.n12,h=a.n22,g=a.n32,k=a.n42,m=a.n13,t=a.n23,l=a.n33,n=a.n43,r=a.n14,v=a.n24,A=a.n34;a=a.n44;this.n11=c*w+d*Q+f*F+i*e;this.n12=c*p+d*h+f*g+i*k;this.n13=c*m+d*t+f*l+i*n;this.n14=c*r+d*v+f*A+i*a;this.n21=j*w+u*Q+b*F+o*e;this.n22=j*p+u* -h+b*g+o*k;this.n23=j*m+u*t+b*l+o*n;this.n24=j*r+u*v+b*A+o*a;this.n31=q*w+y*Q+z*F+x*e;this.n32=q*p+y*h+z*g+x*k;this.n33=q*m+y*t+z*l+x*n;this.n34=q*r+y*v+z*A+x*a;this.n41=s*w+G*Q+J*F+I*e;this.n42=s*p+G*h+J*g+I*k;this.n43=s*m+G*t+J*l+I*n;this.n44=s*r+G*v+J*A+I*a;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this}, -determinant:function(){var a=this.n11,c=this.n12,d=this.n13,f=this.n14,i=this.n21,j=this.n22,u=this.n23,b=this.n24,o=this.n31,q=this.n32,y=this.n33,z=this.n34,x=this.n41,s=this.n42,G=this.n43,J=this.n44;return f*u*q*x-d*b*q*x-f*j*y*x+c*b*y*x+d*j*z*x-c*u*z*x-f*u*o*s+d*b*o*s+f*i*y*s-a*b*y*s-d*i*z*s+a*u*z*s+f*j*o*G-c*b*o*G-f*i*q*G+a*b*q*G+c*i*z*G-a*j*z*G-d*j*o*J+c*u*o*J+d*i*q*J-a*u*q*J-c*i*y*J+a*j*y*J},transpose:function(){function a(c,d,f){var i=c[d];c[d]=c[f];c[f]=i}a(this,"n21","n12");a(this,"n31", +THREE.Ray.prototype={intersectScene:function(a){var c,d,f=a.objects,k=[];a=0;for(c=f.length;a0&&K>0&&e+K<1}var d,f,k,m,r,b,n,p,B,A, +x,y=a.geometry,w=y.vertices,I=[];d=0;for(f=y.faces.length;dn?f:n;k=k>p? +k:p}a()};this.add3Points=function(n,p,B,A,x,y){if(b){b=false;c=nB?n>x?n:x:B>x?B:x;k=p>A?p>y?p:y:A>y?A:y}else{c=nB?n>x?n>f?n:f:x>f?x:f:B>x?B>f?B:f:x>f?x:f;k=p>A?p>y?p>k?p:k:y>k?y:k:A>y?A>k?A:k:y>k?y:k}a()};this.addRectangle=function(n){if(b){b=false;c=n.getLeft();d=n.getTop();f=n.getRight();k=n.getBottom()}else{c=cn.getRight()?f:n.getRight();k=k>n.getBottom()?k:n.getBottom()}a()};this.inflate=function(n){c-=n;d-=n;f+=n;k+=n;a()};this.minSelf=function(n){c=c>n.getLeft()?c:n.getLeft();d=d>n.getTop()?d:n.getTop();f=f=0&&Math.min(k,n.getBottom())-Math.max(d,n.getTop())>=0};this.empty=function(){b=true;k=f=d=c=0;a()};this.isEmpty=function(){return b};this.toString= +function(){return"THREE.Rectangle ( left: "+c+", right: "+f+", top: "+d+", bottom: "+k+", width: "+m+", height: "+r+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a,c=this.m;a=c[1];c[1]=c[3];c[3]=a;a=c[2];c[2]=c[6];c[6]=a;a=c[5];c[5]=c[7];c[7]=a;return this},transposeIntoArray:function(a){var c=this.m;a[0]=c[0];a[1]=c[3];a[2]=c[6];a[3]=c[1];a[4]=c[4];a[5]=c[7];a[6]=c[2];a[7]=c[5];a[8]=c[8];return this}}; +THREE.Matrix4=function(a,c,d,f,k,m,r,b,n,p,B,A,x,y,w,I){this.n11=a||1;this.n12=c||0;this.n13=d||0;this.n14=f||0;this.n21=k||0;this.n22=m||1;this.n23=r||0;this.n24=b||0;this.n31=n||0;this.n32=p||0;this.n33=B||1;this.n34=A||0;this.n41=x||0;this.n42=y||0;this.n43=w||0;this.n44=I||1;this.flat=Array(16);this.m33=new THREE.Matrix3}; +THREE.Matrix4.prototype={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;return this},set:function(a,c,d,f,k,m,r,b,n,p,B,A,x,y,w,I){this.n11=a;this.n12=c;this.n13=d;this.n14=f;this.n21=k;this.n22=m;this.n23=r;this.n24=b;this.n31=n;this.n32=p;this.n33=B;this.n34=A;this.n41=x;this.n42=y;this.n43=w;this.n44=I;return this},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;return this},lookAt:function(a,c,d){var f=THREE.Matrix4.__tmpVec1,k=THREE.Matrix4.__tmpVec2,m=THREE.Matrix4.__tmpVec3;m.sub(a,c).normalize();f.cross(d,m).normalize();k.cross(m,f).normalize();this.n11=f.x;this.n12=f.y;this.n13=f.z;this.n14=-f.dot(a);this.n21=k.x;this.n22=k.y;this.n23=k.z;this.n24=-k.dot(a); +this.n31=m.x;this.n32=m.y;this.n33=m.z;this.n34=-m.dot(a);this.n43=this.n42=this.n41=0;this.n44=1;return this},multiplyVector3:function(a){var c=a.x,d=a.y,f=a.z,k=1/(this.n41*c+this.n42*d+this.n43*f+this.n44);a.x=(this.n11*c+this.n12*d+this.n13*f+this.n14)*k;a.y=(this.n21*c+this.n22*d+this.n23*f+this.n24)*k;a.z=(this.n31*c+this.n32*d+this.n33*f+this.n34)*k;return a},multiplyVector4:function(a){var c=a.x,d=a.y,f=a.z,k=a.w;a.x=this.n11*c+this.n12*d+this.n13*f+this.n14*k;a.y=this.n21*c+this.n22*d+this.n23* +f+this.n24*k;a.z=this.n31*c+this.n32*d+this.n33*f+this.n34*k;a.w=this.n41*c+this.n42*d+this.n43*f+this.n44*k;return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var d=a.n11,f=a.n12,k=a.n13,m=a.n14,r=a.n21,b=a.n22,n=a.n23,p=a.n24,B=a.n31, +A=a.n32,x=a.n33,y=a.n34,w=a.n41,I=a.n42,K=a.n43,u=a.n44,R=c.n11,F=c.n12,P=c.n13,e=c.n14,q=c.n21,h=c.n22,g=c.n23,o=c.n24,i=c.n31,t=c.n32,j=c.n33,l=c.n34,s=c.n41,z=c.n42,v=c.n43,M=c.n44;this.n11=d*R+f*q+k*i+m*s;this.n12=d*F+f*h+k*t+m*z;this.n13=d*P+f*g+k*j+m*v;this.n14=d*e+f*o+k*l+m*M;this.n21=r*R+b*q+n*i+p*s;this.n22=r*F+b*h+n*t+p*z;this.n23=r*P+b*g+n*j+p*v;this.n24=r*e+b*o+n*l+p*M;this.n31=B*R+A*q+x*i+y*s;this.n32=B*F+A*h+x*t+y*z;this.n33=B*P+A*g+x*j+y*v;this.n34=B*e+A*o+x*l+y*M;this.n41=w*R+I*q+ +K*i+u*s;this.n42=w*F+I*h+K*t+u*z;this.n43=w*P+I*g+K*j+u*v;this.n44=w*e+I*o+K*l+u*M;return this},multiplyToArray:function(a,c,d){var f=a.n11,k=a.n12,m=a.n13,r=a.n14,b=a.n21,n=a.n22,p=a.n23,B=a.n24,A=a.n31,x=a.n32,y=a.n33,w=a.n34,I=a.n41,K=a.n42,u=a.n43;a=a.n44;var R=c.n11,F=c.n12,P=c.n13,e=c.n14,q=c.n21,h=c.n22,g=c.n23,o=c.n24,i=c.n31,t=c.n32,j=c.n33,l=c.n34,s=c.n41,z=c.n42,v=c.n43;c=c.n44;this.n11=f*R+k*q+m*i+r*s;this.n12=f*F+k*h+m*t+r*z;this.n13=f*P+k*g+m*j+r*v;this.n14=f*e+k*o+m*l+r*c;this.n21= +b*R+n*q+p*i+B*s;this.n22=b*F+n*h+p*t+B*z;this.n23=b*P+n*g+p*j+B*v;this.n24=b*e+n*o+p*l+B*c;this.n31=A*R+x*q+y*i+w*s;this.n32=A*F+x*h+y*t+w*z;this.n33=A*P+x*g+y*j+w*v;this.n34=A*e+x*o+y*l+w*c;this.n41=I*R+K*q+u*i+a*s;this.n42=I*F+K*h+u*t+a*z;this.n43=I*P+K*g+u*j+a*v;this.n44=I*e+K*o+u*l+a*c;d[0]=this.n11;d[1]=this.n21;d[2]=this.n31;d[3]=this.n41;d[4]=this.n12;d[5]=this.n22;d[6]=this.n32;d[7]=this.n42;d[8]=this.n13;d[9]=this.n23;d[10]=this.n33;d[11]=this.n43;d[12]=this.n14;d[13]=this.n24;d[14]=this.n34; +d[15]=this.n44;return this},multiplySelf:function(a){var c=this.n11,d=this.n12,f=this.n13,k=this.n14,m=this.n21,r=this.n22,b=this.n23,n=this.n24,p=this.n31,B=this.n32,A=this.n33,x=this.n34,y=this.n41,w=this.n42,I=this.n43,K=this.n44,u=a.n11,R=a.n21,F=a.n31,P=a.n41,e=a.n12,q=a.n22,h=a.n32,g=a.n42,o=a.n13,i=a.n23,t=a.n33,j=a.n43,l=a.n14,s=a.n24,z=a.n34;a=a.n44;this.n11=c*u+d*R+f*F+k*P;this.n12=c*e+d*q+f*h+k*g;this.n13=c*o+d*i+f*t+k*j;this.n14=c*l+d*s+f*z+k*a;this.n21=m*u+r*R+b*F+n*P;this.n22=m*e+r* +q+b*h+n*g;this.n23=m*o+r*i+b*t+n*j;this.n24=m*l+r*s+b*z+n*a;this.n31=p*u+B*R+A*F+x*P;this.n32=p*e+B*q+A*h+x*g;this.n33=p*o+B*i+A*t+x*j;this.n34=p*l+B*s+A*z+x*a;this.n41=y*u+w*R+I*F+K*P;this.n42=y*e+w*q+I*h+K*g;this.n43=y*o+w*i+I*t+K*j;this.n44=y*l+w*s+I*z+K*a;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this}, +determinant:function(){var a=this.n11,c=this.n12,d=this.n13,f=this.n14,k=this.n21,m=this.n22,r=this.n23,b=this.n24,n=this.n31,p=this.n32,B=this.n33,A=this.n34,x=this.n41,y=this.n42,w=this.n43,I=this.n44;return f*r*p*x-d*b*p*x-f*m*B*x+c*b*B*x+d*m*A*x-c*r*A*x-f*r*n*y+d*b*n*y+f*k*B*y-a*b*B*y-d*k*A*y+a*r*A*y+f*m*n*w-c*b*n*w-f*k*p*w+a*b*p*w+c*k*A*w-a*m*A*w-d*m*n*I+c*r*n*I+d*k*p*I-a*r*p*I-c*k*B*I+a*m*B*I},transpose:function(){function a(c,d,f){var k=c[d];c[d]=c[f];c[f]=k}a(this,"n21","n12");a(this,"n31", "n13");a(this,"n32","n23");a(this,"n41","n14");a(this,"n42","n24");a(this,"n43","n34");return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){var a=this.flat;a[0]=this.n11;a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]= this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArray:function(a){a[0]=this.n11;a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},setTranslation:function(a,c,d){this.set(1,0,0,a,0,1,0,c,0,0,1,d,0,0,0, -1);return this},setScale:function(a,c,d){this.set(a,0,0,0,0,c,0,0,0,0,d,0,0,0,0,1);return this},setRotX:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,c,-a,0,0,a,c,0,0,0,0,1);return this},setRotY:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,0,a,0,0,1,0,0,-a,0,c,0,0,0,0,1);return this},setRotZ:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,-a,0,0,a,c,0,0,0,0,1,0,0,0,0,1);return this},setRotAxis:function(a,c){var d=Math.cos(c),f=Math.sin(c),i=1-d,j=a.x,u=a.y,b=a.z, -o=i*j,q=i*u;this.set(o*j+d,o*u-f*b,o*b+f*u,0,o*u+f*b,q*u+d,q*b-f*j,0,o*b-f*u,q*b+f*j,i*b*b+d,0,0,0,0,1);return this},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(a,c,d){var f=new THREE.Matrix4;f.setTranslation(a,c,d);return f}; +1);return this},setScale:function(a,c,d){this.set(a,0,0,0,0,c,0,0,0,0,d,0,0,0,0,1);return this},setRotX:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,c,-a,0,0,a,c,0,0,0,0,1);return this},setRotY:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,0,a,0,0,1,0,0,-a,0,c,0,0,0,0,1);return this},setRotZ:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,-a,0,0,a,c,0,0,0,0,1,0,0,0,0,1);return this},setRotAxis:function(a,c){var d=Math.cos(c),f=Math.sin(c),k=1-d,m=a.x,r=a.y,b=a.z, +n=k*m,p=k*r;this.set(n*m+d,n*r-f*b,n*b+f*r,0,n*r+f*b,p*r+d,p*b-f*m,0,n*b-f*r,p*b+f*m,k*b*b+d,0,0,0,0,1);return this},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(a,c,d){var f=new THREE.Matrix4;f.setTranslation(a,c,d);return f}; THREE.Matrix4.scaleMatrix=function(a,c,d){var f=new THREE.Matrix4;f.setScale(a,c,d);return f};THREE.Matrix4.rotationXMatrix=function(a){var c=new THREE.Matrix4;c.setRotX(a);return c};THREE.Matrix4.rotationYMatrix=function(a){var c=new THREE.Matrix4;c.setRotY(a);return c};THREE.Matrix4.rotationZMatrix=function(a){var c=new THREE.Matrix4;c.setRotZ(a);return c};THREE.Matrix4.rotationAxisAngleMatrix=function(a,c){var d=new THREE.Matrix4;d.setRotAxis(a,c);return d}; -THREE.Matrix4.makeInvert=function(a){var c=a.n11,d=a.n12,f=a.n13,i=a.n14,j=a.n21,u=a.n22,b=a.n23,o=a.n24,q=a.n31,y=a.n32,z=a.n33,x=a.n34,s=a.n41,G=a.n42,J=a.n43,I=a.n44,w=new THREE.Matrix4;w.n11=b*x*G-o*z*G+o*y*J-u*x*J-b*y*I+u*z*I;w.n12=i*z*G-f*x*G-i*y*J+d*x*J+f*y*I-d*z*I;w.n13=f*o*G-i*b*G+i*u*J-d*o*J-f*u*I+d*b*I;w.n14=i*b*y-f*o*y-i*u*z+d*o*z+f*u*x-d*b*x;w.n21=o*z*s-b*x*s-o*q*J+j*x*J+b*q*I-j*z*I;w.n22=f*x*s-i*z*s+i*q*J-c*x*J-f*q*I+c*z*I;w.n23=i*b*s-f*o*s-i*j*J+c*o*J+f*j*I-c*b*I;w.n24=f*o*q-i*b*q+ -i*j*z-c*o*z-f*j*x+c*b*x;w.n31=u*x*s-o*y*s+o*q*G-j*x*G-u*q*I+j*y*I;w.n32=i*y*s-d*x*s-i*q*G+c*x*G+d*q*I-c*y*I;w.n33=f*o*s-i*u*s+i*j*G-c*o*G-d*j*I+c*u*I;w.n34=i*u*q-d*o*q-i*j*y+c*o*y+d*j*x-c*u*x;w.n41=b*y*s-u*z*s-b*q*G+j*z*G+u*q*J-j*y*J;w.n42=d*z*s-f*y*s+f*q*G-c*z*G-d*q*J+c*y*J;w.n43=f*u*s-d*b*s-f*j*G+c*b*G+d*j*J-c*u*J;w.n44=d*b*q-f*u*q+f*j*y-c*b*y-d*j*z+c*u*z;w.multiplyScalar(1/a.determinant());return w}; -THREE.Matrix4.makeInvert3x3=function(a){var c=a.m33,d=c.m,f=a.n33*a.n22-a.n32*a.n23,i=-a.n33*a.n21+a.n31*a.n23,j=a.n32*a.n21-a.n31*a.n22,u=-a.n33*a.n12+a.n32*a.n13,b=a.n33*a.n11-a.n31*a.n13,o=-a.n32*a.n11+a.n31*a.n12,q=a.n23*a.n12-a.n22*a.n13,y=-a.n23*a.n11+a.n21*a.n13,z=a.n22*a.n11-a.n21*a.n12;a=a.n11*f+a.n21*u+a.n31*q;if(a==0)throw"matrix not invertible";a=1/a;d[0]=a*f;d[1]=a*i;d[2]=a*j;d[3]=a*u;d[4]=a*b;d[5]=a*o;d[6]=a*q;d[7]=a*y;d[8]=a*z;return c}; -THREE.Matrix4.makeFrustum=function(a,c,d,f,i,j){var u,b,o;u=new THREE.Matrix4;b=2*i/(c-a);o=2*i/(f-d);a=(c+a)/(c-a);d=(f+d)/(f-d);f=-(j+i)/(j-i);i=-2*j*i/(j-i);u.n11=b;u.n12=0;u.n13=a;u.n14=0;u.n21=0;u.n22=o;u.n23=d;u.n24=0;u.n31=0;u.n32=0;u.n33=f;u.n34=i;u.n41=0;u.n42=0;u.n43=-1;u.n44=0;return u};THREE.Matrix4.makePerspective=function(a,c,d,f){var i;a=d*Math.tan(a*Math.PI/360);i=-a;return THREE.Matrix4.makeFrustum(i*c,a*c,i,a,d,f)}; -THREE.Matrix4.makeOrtho=function(a,c,d,f,i,j){var u,b,o,q;u=new THREE.Matrix4;b=c-a;o=d-f;q=j-i;a=(c+a)/b;d=(d+f)/o;i=(j+i)/q;u.n11=2/b;u.n12=0;u.n13=0;u.n14=-a;u.n21=0;u.n22=2/o;u.n23=0;u.n24=-d;u.n31=0;u.n32=0;u.n33=-2/q;u.n34=-i;u.n41=0;u.n42=0;u.n43=0;u.n44=1;return u};THREE.Matrix4.__tmpVec1=new THREE.Vector3;THREE.Matrix4.__tmpVec2=new THREE.Vector3;THREE.Matrix4.__tmpVec3=new THREE.Vector3; +THREE.Matrix4.makeInvert=function(a){var c=a.n11,d=a.n12,f=a.n13,k=a.n14,m=a.n21,r=a.n22,b=a.n23,n=a.n24,p=a.n31,B=a.n32,A=a.n33,x=a.n34,y=a.n41,w=a.n42,I=a.n43,K=a.n44,u=new THREE.Matrix4;u.n11=b*x*w-n*A*w+n*B*I-r*x*I-b*B*K+r*A*K;u.n12=k*A*w-f*x*w-k*B*I+d*x*I+f*B*K-d*A*K;u.n13=f*n*w-k*b*w+k*r*I-d*n*I-f*r*K+d*b*K;u.n14=k*b*B-f*n*B-k*r*A+d*n*A+f*r*x-d*b*x;u.n21=n*A*y-b*x*y-n*p*I+m*x*I+b*p*K-m*A*K;u.n22=f*x*y-k*A*y+k*p*I-c*x*I-f*p*K+c*A*K;u.n23=k*b*y-f*n*y-k*m*I+c*n*I+f*m*K-c*b*K;u.n24=f*n*p-k*b*p+ +k*m*A-c*n*A-f*m*x+c*b*x;u.n31=r*x*y-n*B*y+n*p*w-m*x*w-r*p*K+m*B*K;u.n32=k*B*y-d*x*y-k*p*w+c*x*w+d*p*K-c*B*K;u.n33=f*n*y-k*r*y+k*m*w-c*n*w-d*m*K+c*r*K;u.n34=k*r*p-d*n*p-k*m*B+c*n*B+d*m*x-c*r*x;u.n41=b*B*y-r*A*y-b*p*w+m*A*w+r*p*I-m*B*I;u.n42=d*A*y-f*B*y+f*p*w-c*A*w-d*p*I+c*B*I;u.n43=f*r*y-d*b*y-f*m*w+c*b*w+d*m*I-c*r*I;u.n44=d*b*p-f*r*p+f*m*B-c*b*B-d*m*A+c*r*A;u.multiplyScalar(1/a.determinant());return u}; +THREE.Matrix4.makeInvert3x3=function(a){var c=a.m33,d=c.m,f=a.n33*a.n22-a.n32*a.n23,k=-a.n33*a.n21+a.n31*a.n23,m=a.n32*a.n21-a.n31*a.n22,r=-a.n33*a.n12+a.n32*a.n13,b=a.n33*a.n11-a.n31*a.n13,n=-a.n32*a.n11+a.n31*a.n12,p=a.n23*a.n12-a.n22*a.n13,B=-a.n23*a.n11+a.n21*a.n13,A=a.n22*a.n11-a.n21*a.n12;a=a.n11*f+a.n21*r+a.n31*p;if(a==0)throw"matrix not invertible";a=1/a;d[0]=a*f;d[1]=a*k;d[2]=a*m;d[3]=a*r;d[4]=a*b;d[5]=a*n;d[6]=a*p;d[7]=a*B;d[8]=a*A;return c}; +THREE.Matrix4.makeFrustum=function(a,c,d,f,k,m){var r,b,n;r=new THREE.Matrix4;b=2*k/(c-a);n=2*k/(f-d);a=(c+a)/(c-a);d=(f+d)/(f-d);f=-(m+k)/(m-k);k=-2*m*k/(m-k);r.n11=b;r.n12=0;r.n13=a;r.n14=0;r.n21=0;r.n22=n;r.n23=d;r.n24=0;r.n31=0;r.n32=0;r.n33=f;r.n34=k;r.n41=0;r.n42=0;r.n43=-1;r.n44=0;return r};THREE.Matrix4.makePerspective=function(a,c,d,f){var k;a=d*Math.tan(a*Math.PI/360);k=-a;return THREE.Matrix4.makeFrustum(k*c,a*c,k,a,d,f)}; +THREE.Matrix4.makeOrtho=function(a,c,d,f,k,m){var r,b,n,p;r=new THREE.Matrix4;b=c-a;n=d-f;p=m-k;a=(c+a)/b;d=(d+f)/n;k=(m+k)/p;r.n11=2/b;r.n12=0;r.n13=0;r.n14=-a;r.n21=0;r.n22=2/n;r.n23=0;r.n24=-d;r.n31=0;r.n32=0;r.n33=-2/p;r.n34=-k;r.n41=0;r.n42=0;r.n43=0;r.n44=1;return r};THREE.Matrix4.__tmpVec1=new THREE.Vector3;THREE.Matrix4.__tmpVec2=new THREE.Vector3;THREE.Matrix4.__tmpVec3=new THREE.Vector3; THREE.Vertex=function(a,c){this.position=a||new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.normal=c||new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.normalScreen=new THREE.Vector3;this.tangent=new THREE.Vector4;this.__visible=true};THREE.Vertex.prototype={toString:function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}}; -THREE.Face3=function(a,c,d,f,i){this.a=a;this.b=c;this.c=d;this.centroid=new THREE.Vector3;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.materials=i instanceof Array?i:[i]};THREE.Face3.prototype={toString:function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}}; -THREE.Face4=function(a,c,d,f,i,j){this.a=a;this.b=c;this.c=d;this.d=f;this.centroid=new THREE.Vector3;this.normal=i instanceof THREE.Vector3?i:new THREE.Vector3;this.vertexNormals=i instanceof Array?i:[];this.materials=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,c){this.u=a||0;this.v=c||0}; +THREE.Face3=function(a,c,d,f,k){this.a=a;this.b=c;this.c=d;this.centroid=new THREE.Vector3;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.materials=k instanceof Array?k:[k]};THREE.Face3.prototype={toString:function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}}; +THREE.Face4=function(a,c,d,f,k,m){this.a=a;this.b=c;this.c=d;this.d=f;this.centroid=new THREE.Vector3;this.normal=k instanceof THREE.Vector3?k:new THREE.Vector3;this.vertexNormals=k instanceof Array?k:[];this.materials=m instanceof Array?m:[m]};THREE.Face4.prototype={toString:function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(a,c){this.u=a||0;this.v=c||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=[];this.uvs2=[];this.colors=[];this.boundingSphere=this.boundingBox=null;this.geometryChunks={};this.hasTangents=false}; THREE.Geometry.prototype={computeCentroids:function(){var a,c,d;a=0;for(c=this.faces.length;a0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y], +c;a++){d=this.faces[a];if(d instanceof THREE.Face3){d.vertexNormals[0].copy(f[d.a]);d.vertexNormals[1].copy(f[d.b]);d.vertexNormals[2].copy(f[d.c])}else if(d instanceof THREE.Face4){d.vertexNormals[0].copy(f[d.a]);d.vertexNormals[1].copy(f[d.b]);d.vertexNormals[2].copy(f[d.c]);d.vertexNormals[3].copy(f[d.d])}}},computeTangents:function(){function a(l,s,z,v,M,J,E){m=l.vertices[s].position;r=l.vertices[z].position;b=l.vertices[v].position;n=k[M];p=k[J];B=k[E];A=r.x-m.x;x=b.x-m.x;y=r.y-m.y;w=b.y-m.y; +I=r.z-m.z;K=b.z-m.z;u=p.u-n.u;R=B.u-n.u;F=p.v-n.v;P=B.v-n.v;e=1/(u*P-R*F);g.set((P*A-F*x)*e,(P*y-F*w)*e,(P*I-F*K)*e);o.set((u*x-R*A)*e,(u*w-R*y)*e,(u*K-R*I)*e);q[s].addSelf(g);q[z].addSelf(g);q[v].addSelf(g);h[s].addSelf(o);h[z].addSelf(o);h[v].addSelf(o)}var c,d,f,k,m,r,b,n,p,B,A,x,y,w,I,K,u,R,F,P,e,q=[],h=[],g=new THREE.Vector3,o=new THREE.Vector3,i=new THREE.Vector3,t=new THREE.Vector3,j=new THREE.Vector3;c=0;for(d=this.vertices.length;c0){this.boundingBox={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 c=1,d=this.vertices.length;cthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.z -this.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=this.boundingSphere===null?0:this.boundingSphere.radius,c=0,d=this.vertices.length;c65535){q[b].counter+=1;o=q[b].hash+"_"+q[b].counter;if(this.geometryChunks[o]==undefined)this.geometryChunks[o]={faces:[],materials:u,vertices:0}}this.geometryChunks[o].faces.push(f);this.geometryChunks[o].vertices+=j}},toString:function(){return"THREE.Geometry ( vertices: "+ +this.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=this.boundingSphere===null?0:this.boundingSphere.radius,c=0,d=this.vertices.length;c65535){p[b].counter+=1;n=p[b].hash+"_"+p[b].counter;if(this.geometryChunks[n]==undefined)this.geometryChunks[n]={faces:[],materials:r,vertices:0}}this.geometryChunks[n].faces.push(f);this.geometryChunks[n].vertices+=m}},toString:function(){return"THREE.Geometry ( vertices: "+ this.vertices+", faces: "+this.faces+", uvs: "+this.uvs+" )"}}; -THREE.Camera=function(a,c,d,f){this.fov=a;this.aspect=c;this.near=d;this.far=f;this.position=new THREE.Vector3;this.target={position:new THREE.Vector3};this.autoUpdateMatrix=true;this.projectionMatrix=null;this.matrix=new THREE.Matrix4;this.up=new THREE.Vector3(0,1,0);this.tmpVec=new THREE.Vector3;this.translateX=function(i){this.tmpVec.sub(this.target.position,this.position).normalize().multiplyScalar(i);this.tmpVec.crossSelf(this.up);this.position.addSelf(this.tmpVec);this.target.position.addSelf(this.tmpVec)}; -this.translateZ=function(i){this.tmpVec.sub(this.target.position,this.position).normalize().multiplyScalar(i);this.position.subSelf(this.tmpVec);this.target.position.subSelf(this.tmpVec)};this.updateMatrix=function(){this.matrix.lookAt(this.position,this.target.position,this.up)};this.updateProjectionMatrix=function(){this.projectionMatrix=THREE.Matrix4.makePerspective(this.fov,this.aspect,this.near,this.far)};this.updateProjectionMatrix()}; +THREE.Camera=function(a,c,d,f){this.fov=a;this.aspect=c;this.near=d;this.far=f;this.position=new THREE.Vector3;this.target={position:new THREE.Vector3};this.autoUpdateMatrix=true;this.projectionMatrix=null;this.matrix=new THREE.Matrix4;this.up=new THREE.Vector3(0,1,0);this.tmpVec=new THREE.Vector3;this.translateX=function(k){this.tmpVec.sub(this.target.position,this.position).normalize().multiplyScalar(k);this.tmpVec.crossSelf(this.up);this.position.addSelf(this.tmpVec);this.target.position.addSelf(this.tmpVec)}; +this.translateZ=function(k){this.tmpVec.sub(this.target.position,this.position).normalize().multiplyScalar(k);this.position.subSelf(this.tmpVec);this.target.position.subSelf(this.tmpVec)};this.updateMatrix=function(){this.matrix.lookAt(this.position,this.target.position,this.up)};this.updateProjectionMatrix=function(){this.projectionMatrix=THREE.Matrix4.makePerspective(this.fov,this.aspect,this.near,this.far)};this.updateProjectionMatrix()}; THREE.Camera.prototype={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,c){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light; THREE.DirectionalLight.prototype.constructor=THREE.DirectionalLight;THREE.PointLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3;this.intensity=c||1};THREE.PointLight.prototype=new THREE.Light;THREE.PointLight.prototype.constructor=THREE.PointLight; THREE.Object3D=function(){this.id=THREE.Object3DCounter.value++;this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.scale=new THREE.Vector3(1,1,1);this.matrix=new THREE.Matrix4;this.rotationMatrix=new THREE.Matrix4;this.tmpMatrix=new THREE.Matrix4;this.screen=new THREE.Vector3;this.visible=this.autoUpdateMatrix=true}; @@ -96,115 +96,115 @@ THREE.MeshShaderMaterial.prototype={toString:function(){return"THREE.MeshShaderM THREE.ParticleBasicMaterial=function(a){this.id=THREE.ParticleBasicMaterialCounter.value++;this.color=new THREE.Color(16777215);this.opacity=1;this.map=null;this.size=1;this.blending=THREE.NormalBlending;this.depth_test=true;this.offset=new THREE.Vector2;this.vertex_colors=false;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.map!==undefined)this.map=a.map;if(a.size!==undefined)this.size=a.size;if(a.blending!==undefined)this.blending=a.blending; if(a.depth_test!==undefined)this.depth_test=a.depth_test;if(a.vertex_colors!==undefined)this.vertex_colors=a.vertex_colors}};THREE.ParticleBasicMaterial.prototype={toString:function(){return"THREE.ParticleBasicMaterial (
id: "+this.id+"
color: "+this.color+"
opacity: "+this.opacity+"
map: "+this.map+"
size: "+this.size+"
blending: "+this.blending+"
depth_test: "+this.depth_test+"
vertex_colors: "+this.vertex_colors+"
)"}};THREE.ParticleBasicMaterialCounter={value:0}; THREE.ParticleCircleMaterial=function(a){this.color=new THREE.Color(16777215);this.opacity=1;this.blending=THREE.NormalBlending;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}};THREE.ParticleCircleMaterial.prototype={toString:function(){return"THREE.ParticleCircleMaterial (
color: "+this.color+"
opacity: "+this.opacity+"
blending: "+this.blending+"
)"}}; -THREE.ParticleDOMMaterial=function(a){this.domElement=a};THREE.ParticleDOMMaterial.prototype={toString:function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Texture=function(a,c,d,f,i,j){this.image=a;this.mapping=c!==undefined?c:new THREE.UVMapping;this.wrap_s=d!==undefined?d:THREE.ClampToEdgeWrapping;this.wrap_t=f!==undefined?f:THREE.ClampToEdgeWrapping;this.mag_filter=i!==undefined?i:THREE.LinearFilter;this.min_filter=j!==undefined?j:THREE.LinearMipMapLinearFilter}; +THREE.ParticleDOMMaterial=function(a){this.domElement=a};THREE.ParticleDOMMaterial.prototype={toString:function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Texture=function(a,c,d,f,k,m){this.image=a;this.mapping=c!==undefined?c:new THREE.UVMapping;this.wrap_s=d!==undefined?d:THREE.ClampToEdgeWrapping;this.wrap_t=f!==undefined?f:THREE.ClampToEdgeWrapping;this.mag_filter=k!==undefined?k:THREE.LinearFilter;this.min_filter=m!==undefined?m:THREE.LinearMipMapLinearFilter}; THREE.Texture.prototype={clone:function(){return new THREE.Texture(this.image,this.mapping,this.wrap_s,this.wrap_t,this.mag_filter,this.min_filter)},toString:function(){return"THREE.Texture (
image: "+this.image+"
wrap_s: "+this.wrap_s+"
wrap_t: "+this.wrap_t+"
mag_filter: "+this.mag_filter+"
min_filter: "+this.min_filter+"
)"}};THREE.MultiplyOperation=0;THREE.MixOperation=1;THREE.RepeatWrapping=0;THREE.ClampToEdgeWrapping=1;THREE.MirroredRepeatWrapping=2; THREE.NearestFilter=3;THREE.NearestMipMapNearestFilter=4;THREE.NearestMipMapLinearFilter=5;THREE.LinearFilter=6;THREE.LinearMipMapNearestFilter=7;THREE.LinearMipMapLinearFilter=8;THREE.ByteType=9;THREE.UnsignedByteType=10;THREE.ShortType=11;THREE.UnsignedShortType=12;THREE.IntType=13;THREE.UnsignedIntType=14;THREE.FloatType=15;THREE.AlphaFormat=16;THREE.RGBFormat=17;THREE.RGBAFormat=18;THREE.LuminanceFormat=19;THREE.LuminanceAlphaFormat=20; THREE.RenderTarget=function(a,c,d){this.width=a;this.height=c;d=d||{};this.wrap_s=d.wrap_s!==undefined?d.wrap_s:THREE.ClampToEdgeWrapping;this.wrap_t=d.wrap_t!==undefined?d.wrap_t:THREE.ClampToEdgeWrapping;this.mag_filter=d.mag_filter!==undefined?d.mag_filter:THREE.LinearFilter;this.min_filter=d.min_filter!==undefined?d.min_filter:THREE.LinearMipMapLinearFilter;this.format=d.format!==undefined?d.format:THREE.RGBFormat;this.type=d.type!==undefined?d.type:THREE.UnsignedByteType}; -var Uniforms={clone:function(a){var c,d,f,i={};for(c in a){i[c]={};for(d in a[c]){f=a[c][d];i[c][d]=f instanceof THREE.Color||f instanceof THREE.Vector3||f instanceof THREE.Texture?f.clone():f}}return i},merge:function(a){var c,d,f,i={};for(c=0;c=0&&n>=0&&r>=0&&v>=0)return true;else if(l<0&&n<0||r<0&&v<0)return false;else{if(l<0)m=Math.max(m,l/(l-n));else if(n<0)t=Math.min(t,l/(l-n));if(r<0)m=Math.max(m,r/(r-v));else if(v<0)t=Math.min(t,r/(r-v));if(tl&&C.z0&&I.z<1){x=G[s]=G[s]||new THREE.RenderableParticle;x.x=I.x/I.w;x.y=I.y/I.w;x.z=I.z;x.rotation=N.rotation.z;x.scale.x=N.scale.x*Math.abs(x.x-(I.x+k.projectionMatrix.n11)/(I.w+k.projectionMatrix.n14)); -x.scale.y=N.scale.y*Math.abs(x.y-(I.y+k.projectionMatrix.n22)/(I.w+k.projectionMatrix.n24));x.materials=N.materials;t.push(x);s++}}}}m&&t.sort(a);return t};this.unprojectVector=function(g,k){var m=THREE.Matrix4.makeInvert(k.matrix);m.multiplySelf(THREE.Matrix4.makeInvert(k.projectionMatrix));m.multiplyVector3(g);return g}}; -THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,d,f,i,j;this.domElement=document.createElement("div");this.setSize=function(u,b){d=u;f=b;i=d/2;j=f/2};this.render=function(u,b){var o,q,y,z,x,s,G,J;a=c.projectScene(u,b);o=0;for(q=a.length;o0){H.r+=ga.r*$;H.g+=ga.g*$;H.b+=ga.b*$}}else if($ instanceof THREE.PointLight){Y.sub($.position,V);Y.normalize();$=T.dot(Y)*ia;if($> -0){H.r+=ga.r*$;H.g+=ga.g*$;H.b+=ga.b*$}}}}function Ga(D,V,T){if(T.opacity!=0){a(T.opacity);c(T.blending);var H,P,$,ga,ia,ja;if(T instanceof THREE.ParticleBasicMaterial){if(T.map&&T.map.image.loaded){ga=T.map.image;ia=ga.width>>1;ja=ga.height>>1;P=V.scale.x*b;$=V.scale.y*o;T=P*ia;H=$*ja;B.set(D.x-T,D.y-H,D.x+T,D.y+H);if(S.instersects(B)){q.save();q.translate(D.x,D.y);q.rotate(-V.rotation);q.scale(P,-$);q.translate(-ia,-ja);q.drawImage(ga,0,0);q.restore()}}}else if(T instanceof THREE.ParticleCircleMaterial){if(R){X.r= -ba.r+Z.r+aa.r;X.g=ba.g+Z.g+aa.g;X.b=ba.b+Z.b+aa.b;t.r=T.color.r*X.r;t.g=T.color.g*X.g;t.b=T.color.b*X.b;t.updateStyleString()}else t.__styleString=T.color.__styleString;T=V.scale.x*b;H=V.scale.y*o;B.set(D.x-T,D.y-H,D.x+T,D.y+H);if(S.instersects(B)){P=t.__styleString;if(J!=P)q.fillStyle=J=P;q.save();q.translate(D.x,D.y);q.rotate(-V.rotation);q.scale(T,H);q.beginPath();q.arc(0,0,1,0,ka,true);q.closePath();q.fill();q.restore()}}}}function Ha(D,V,T,H){if(H.opacity!=0){a(H.opacity);c(H.blending);q.beginPath(); -q.moveTo(D.positionScreen.x,D.positionScreen.y);q.lineTo(V.positionScreen.x,V.positionScreen.y);q.closePath();if(H instanceof THREE.LineBasicMaterial){t.__styleString=H.color.__styleString;D=H.linewidth;if(I!=D)q.lineWidth=I=D;D=t.__styleString;if(G!=D)q.strokeStyle=G=D;q.stroke();B.inflate(H.linewidth*2)}}}function ma(D,V,T,H,P,$){if(P.opacity!=0){a(P.opacity);c(P.blending);e=D.positionScreen.x;p=D.positionScreen.y;h=V.positionScreen.x;g=V.positionScreen.y;k=T.positionScreen.x;m=T.positionScreen.y; -q.beginPath();q.moveTo(e,p);q.lineTo(h,g);q.lineTo(k,m);q.lineTo(e,p);q.closePath();if(P instanceof THREE.MeshBasicMaterial)if(P.map)P.map.image.loaded&&P.map.mapping instanceof THREE.UVMapping&&za(e,p,h,g,k,m,P.map.image,H.uvs[0].u,H.uvs[0].v,H.uvs[1].u,H.uvs[1].v,H.uvs[2].u,H.uvs[2].v);else if(P.env_map){if(P.env_map.image.loaded)if(P.env_map.mapping instanceof THREE.SphericalReflectionMapping){D=ca.matrix;Y.copy(H.vertexNormalsWorld[0]);L=(Y.x*D.n11+Y.y*D.n12+Y.z*D.n13)*0.5+0.5;N=-(Y.x*D.n21+Y.y* -D.n22+Y.z*D.n23)*0.5+0.5;Y.copy(H.vertexNormalsWorld[1]);U=(Y.x*D.n11+Y.y*D.n12+Y.z*D.n13)*0.5+0.5;W=-(Y.x*D.n21+Y.y*D.n22+Y.z*D.n23)*0.5+0.5;Y.copy(H.vertexNormalsWorld[2]);M=(Y.x*D.n11+Y.y*D.n12+Y.z*D.n13)*0.5+0.5;E=-(Y.x*D.n21+Y.y*D.n22+Y.z*D.n23)*0.5+0.5;za(e,p,h,g,k,m,P.env_map.image,L,N,U,W,M,E)}}else P.wireframe?Da(P.color.__styleString,P.wireframe_linewidth):Ea(P.color.__styleString);else if(P instanceof THREE.MeshLambertMaterial){if(P.map&&!P.wireframe){P.map.mapping instanceof THREE.UVMapping&& -za(e,p,h,g,k,m,P.map.image,H.uvs[0].u,H.uvs[0].v,H.uvs[1].u,H.uvs[1].v,H.uvs[2].u,H.uvs[2].v);c(THREE.SubtractiveBlending)}if(R)if(!P.wireframe&&P.shading==THREE.SmoothShading&&H.vertexNormalsWorld.length==3){l.r=n.r=r.r=ba.r;l.g=n.g=r.g=ba.g;l.b=n.b=r.b=ba.b;xa($,H.v1.positionWorld,H.vertexNormalsWorld[0],l);xa($,H.v2.positionWorld,H.vertexNormalsWorld[1],n);xa($,H.v3.positionWorld,H.vertexNormalsWorld[2],r);v.r=(n.r+r.r)*0.5;v.g=(n.g+r.g)*0.5;v.b=(n.b+r.b)*0.5;K=Ma(l,n,r,v);za(e,p,h,g,k,m,K,0,0, -1,0,0,1)}else{X.r=ba.r;X.g=ba.g;X.b=ba.b;xa($,H.centroidWorld,H.normalWorld,X);t.r=P.color.r*X.r;t.g=P.color.g*X.g;t.b=P.color.b*X.b;t.updateStyleString();P.wireframe?Da(t.__styleString,P.wireframe_linewidth):Ea(t.__styleString)}else P.wireframe?Da(P.color.__styleString,P.wireframe_linewidth):Ea(P.color.__styleString)}else if(P instanceof THREE.MeshDepthMaterial){A=ca.near;C=ca.far;l.r=l.g=l.b=1-Ia(D.positionScreen.z,A,C);n.r=n.g=n.b=1-Ia(V.positionScreen.z,A,C);r.r=r.g=r.b=1-Ia(T.positionScreen.z, -A,C);v.r=(n.r+r.r)*0.5;v.g=(n.g+r.g)*0.5;v.b=(n.b+r.b)*0.5;K=Ma(l,n,r,v);za(e,p,h,g,k,m,K,0,0,1,0,0,1)}else if(P instanceof THREE.MeshNormalMaterial){t.r=Ja(H.normalWorld.x);t.g=Ja(H.normalWorld.y);t.b=Ja(H.normalWorld.z);t.updateStyleString();P.wireframe?Da(t.__styleString,P.wireframe_linewidth):Ea(t.__styleString)}}}function Da(D,V){if(G!=D)q.strokeStyle=G=D;if(I!=V)q.lineWidth=I=V;q.stroke();B.inflate(V*2)}function Ea(D){if(J!=D)q.fillStyle=J=D;q.fill()}function za(D,V,T,H,P,$,ga,ia,ja,ra,na,sa, -Aa){var pa,ta;pa=ga.width-1;ta=ga.height-1;ia*=pa;ja*=ta;ra*=pa;na*=ta;sa*=pa;Aa*=ta;T-=D;H-=V;P-=D;$-=V;ra-=ia;na-=ja;sa-=ia;Aa-=ja;pa=ra*Aa-sa*na;if(pa!=0){ta=1/pa;pa=(Aa*T-na*P)*ta;na=(Aa*H-na*$)*ta;T=(ra*P-sa*T)*ta;H=(ra*$-sa*H)*ta;D=D-pa*ia-T*ja;V=V-na*ia-H*ja;q.save();q.transform(pa,na,T,H,D,V);q.clip();q.drawImage(ga,0,0);q.restore()}}function Ma(D,V,T,H){var P=~~(D.r*255),$=~~(D.g*255);D=~~(D.b*255);var ga=~~(V.r*255),ia=~~(V.g*255);V=~~(V.b*255);var ja=~~(T.r*255),ra=~~(T.g*255);T=~~(T.b* -255);var na=~~(H.r*255),sa=~~(H.g*255);H=~~(H.b*255);ha[0]=P<0?0:P>255?255:P;ha[1]=$<0?0:$>255?255:$;ha[2]=D<0?0:D>255?255:D;ha[4]=ga<0?0:ga>255?255:ga;ha[5]=ia<0?0:ia>255?255:ia;ha[6]=V<0?0:V>255?255:V;ha[8]=ja<0?0:ja>255?255:ja;ha[9]=ra<0?0:ra>255?255:ra;ha[10]=T<0?0:T>255?255:T;ha[12]=na<0?0:na>255?255:na;ha[13]=sa<0?0:sa>255?255:sa;ha[14]=H<0?0:H>255?255:H;fa.putImageData(wa,0,0);va.drawImage(ua,0,0);return la}function Ia(D,V,T){D=(D-V)/(T-V);return D*D*(3-2*D)}function Ja(D){D=(D+1)*0.5;return D< -0?0:D>1?1:D}function Ka(D,V){var T=V.x-D.x,H=V.y-D.y,P=1/Math.sqrt(T*T+H*H);T*=P;H*=P;V.x+=T;V.y+=H;D.x-=T;D.y-=H}var Fa,Na,ea,qa,ya,La,Oa,Ba;this.autoClear?this.clear():q.setTransform(1,0,0,-1,b,o);d=f.projectScene(da,ca,this.sortElements);(R=da.lights.length>0)&&Ca(da);Fa=0;for(Na=d.length;Fa=0&&j>=0&&l>=0&&s>=0)return true;else if(t<0&&j<0||l<0&&s<0)return false;else{if(t<0)o=Math.max(o,t/(t-j));else if(j<0)i=Math.min(i,t/(t-j));if(l<0)o=Math.max(o,l/(l-s));else if(s<0)i=Math.min(i,l/(l-s));if(it&&v.z0&&K.z<1){x=w[y]=w[y]||new THREE.RenderableParticle;x.x=K.x/K.w;x.y=K.y/K.w;x.z=K.z;x.rotation=E.rotation.z;x.scale.x=E.scale.x*Math.abs(x.x-(K.x+g.projectionMatrix.n11)/(K.w+g.projectionMatrix.n14)); +x.scale.y=E.scale.y*Math.abs(x.y-(K.y+g.projectionMatrix.n22)/(K.w+g.projectionMatrix.n24));x.materials=E.materials;i.push(x);y++}}}}o&&i.sort(a);return i};this.unprojectVector=function(h,g){var o=THREE.Matrix4.makeInvert(g.matrix);o.multiplySelf(THREE.Matrix4.makeInvert(g.projectionMatrix));o.multiplyVector3(h);return h}}; +THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,d,f,k,m;this.domElement=document.createElement("div");this.setSize=function(r,b){d=r;f=b;k=d/2;m=f/2};this.render=function(r,b){var n,p,B,A,x,y,w,I;a=c.projectScene(r,b);n=0;for(p=a.length;n0){G.r+=fa.r*$;G.g+=fa.g*$;G.b+=fa.b*$}}else if($ instanceof THREE.PointLight){Z.sub($.position,V);Z.normalize();$=T.dot(Z)*ja;if($> +0){G.r+=fa.r*$;G.g+=fa.g*$;G.b+=fa.b*$}}}}function Ga(D,V,T){if(T.opacity!=0){a(T.opacity);c(T.blending);var G,Q,$,fa,ja,la;if(T instanceof THREE.ParticleBasicMaterial){if(T.map&&T.map.image.loaded){fa=T.map.image;ja=fa.width>>1;la=fa.height>>1;Q=V.scale.x*b;$=V.scale.y*n;T=Q*ja;G=$*la;C.set(D.x-T,D.y-G,D.x+T,D.y+G);if(O.instersects(C)){p.save();p.translate(D.x,D.y);p.rotate(-V.rotation);p.scale(Q,-$);p.translate(-ja,-la);p.drawImage(fa,0,0);p.restore()}}}else if(T instanceof THREE.ParticleCircleMaterial){if(L){W.r= +ga.r+da.r+Y.r;W.g=ga.g+da.g+Y.g;W.b=ga.b+da.b+Y.b;i.r=T.color.r*W.r;i.g=T.color.g*W.g;i.b=T.color.b*W.b;i.updateStyleString()}else i.__styleString=T.color.__styleString;T=V.scale.x*b;G=V.scale.y*n;C.set(D.x-T,D.y-G,D.x+T,D.y+G);if(O.instersects(C)){Q=i.__styleString;if(I!=Q)p.fillStyle=I=Q;p.save();p.translate(D.x,D.y);p.rotate(-V.rotation);p.scale(T,G);p.beginPath();p.arc(0,0,1,0,ba,true);p.closePath();p.fill();p.restore()}}}}function Ha(D,V,T,G){if(G.opacity!=0){a(G.opacity);c(G.blending);p.beginPath(); +p.moveTo(D.positionScreen.x,D.positionScreen.y);p.lineTo(V.positionScreen.x,V.positionScreen.y);p.closePath();if(G instanceof THREE.LineBasicMaterial){i.__styleString=G.color.__styleString;D=G.linewidth;if(K!=D)p.lineWidth=K=D;D=i.__styleString;if(w!=D)p.strokeStyle=w=D;p.stroke();C.inflate(G.linewidth*2)}}}function Da(D,V,T,G,Q,$){if(Q.opacity!=0){a(Q.opacity);c(Q.blending);P=D.positionScreen.x;e=D.positionScreen.y;q=V.positionScreen.x;h=V.positionScreen.y;g=T.positionScreen.x;o=T.positionScreen.y; +p.beginPath();p.moveTo(P,e);p.lineTo(q,h);p.lineTo(g,o);p.lineTo(P,e);p.closePath();if(Q instanceof THREE.MeshBasicMaterial)if(Q.map)Q.map.image.loaded&&Q.map.mapping instanceof THREE.UVMapping&&Aa(P,e,q,h,g,o,Q.map.image,G.uvs[0].u,G.uvs[0].v,G.uvs[1].u,G.uvs[1].v,G.uvs[2].u,G.uvs[2].v);else if(Q.env_map){if(Q.env_map.image.loaded)if(Q.env_map.mapping instanceof THREE.SphericalReflectionMapping){D=na.matrix;Z.copy(G.vertexNormalsWorld[0]);J=(Z.x*D.n11+Z.y*D.n12+Z.z*D.n13)*0.5+0.5;E=-(Z.x*D.n21+Z.y* +D.n22+Z.z*D.n23)*0.5+0.5;Z.copy(G.vertexNormalsWorld[1]);U=(Z.x*D.n11+Z.y*D.n12+Z.z*D.n13)*0.5+0.5;X=-(Z.x*D.n21+Z.y*D.n22+Z.z*D.n23)*0.5+0.5;Z.copy(G.vertexNormalsWorld[2]);N=(Z.x*D.n11+Z.y*D.n12+Z.z*D.n13)*0.5+0.5;H=-(Z.x*D.n21+Z.y*D.n22+Z.z*D.n23)*0.5+0.5;Aa(P,e,q,h,g,o,Q.env_map.image,J,E,U,X,N,H)}}else Q.wireframe?ma(Q.color.__styleString,Q.wireframe_linewidth):Ea(Q.color.__styleString);else if(Q instanceof THREE.MeshLambertMaterial){if(Q.map&&!Q.wireframe){Q.map.mapping instanceof THREE.UVMapping&& +Aa(P,e,q,h,g,o,Q.map.image,G.uvs[0].u,G.uvs[0].v,G.uvs[1].u,G.uvs[1].v,G.uvs[2].u,G.uvs[2].v);c(THREE.SubtractiveBlending)}if(L)if(!Q.wireframe&&Q.shading==THREE.SmoothShading&&G.vertexNormalsWorld.length==3){t.r=j.r=l.r=ga.r;t.g=j.g=l.g=ga.g;t.b=j.b=l.b=ga.b;ya($,G.v1.positionWorld,G.vertexNormalsWorld[0],t);ya($,G.v2.positionWorld,G.vertexNormalsWorld[1],j);ya($,G.v3.positionWorld,G.vertexNormalsWorld[2],l);s.r=(j.r+l.r)*0.5;s.g=(j.g+l.g)*0.5;s.b=(j.b+l.b)*0.5;M=Ma(t,j,l,s);Aa(P,e,q,h,g,o,M,0,0, +1,0,0,1)}else{W.r=ga.r;W.g=ga.g;W.b=ga.b;ya($,G.centroidWorld,G.normalWorld,W);i.r=Q.color.r*W.r;i.g=Q.color.g*W.g;i.b=Q.color.b*W.b;i.updateStyleString();Q.wireframe?ma(i.__styleString,Q.wireframe_linewidth):Ea(i.__styleString)}else Q.wireframe?ma(Q.color.__styleString,Q.wireframe_linewidth):Ea(Q.color.__styleString)}else if(Q instanceof THREE.MeshDepthMaterial){z=na.near;v=na.far;t.r=t.g=t.b=1-Ia(D.positionScreen.z,z,v);j.r=j.g=j.b=1-Ia(V.positionScreen.z,z,v);l.r=l.g=l.b=1-Ia(T.positionScreen.z, +z,v);s.r=(j.r+l.r)*0.5;s.g=(j.g+l.g)*0.5;s.b=(j.b+l.b)*0.5;M=Ma(t,j,l,s);Aa(P,e,q,h,g,o,M,0,0,1,0,0,1)}else if(Q instanceof THREE.MeshNormalMaterial){i.r=Ja(G.normalWorld.x);i.g=Ja(G.normalWorld.y);i.b=Ja(G.normalWorld.z);i.updateStyleString();Q.wireframe?ma(i.__styleString,Q.wireframe_linewidth):Ea(i.__styleString)}}}function ma(D,V){if(w!=D)p.strokeStyle=w=D;if(K!=V)p.lineWidth=K=V;p.stroke();C.inflate(V*2)}function Ea(D){if(I!=D)p.fillStyle=I=D;p.fill()}function Aa(D,V,T,G,Q,$,fa,ja,la,ua,oa,va, +Ba){var ra,wa;ra=fa.width-1;wa=fa.height-1;ja*=ra;la*=wa;ua*=ra;oa*=wa;va*=ra;Ba*=wa;T-=D;G-=V;Q-=D;$-=V;ua-=ja;oa-=la;va-=ja;Ba-=la;ra=ua*Ba-va*oa;if(ra!=0){wa=1/ra;ra=(Ba*T-oa*Q)*wa;oa=(Ba*G-oa*$)*wa;T=(ua*Q-va*T)*wa;G=(ua*$-va*G)*wa;D=D-ra*ja-T*la;V=V-oa*ja-G*la;p.save();p.transform(ra,oa,T,G,D,V);p.clip();p.drawImage(fa,0,0);p.restore()}}function Ma(D,V,T,G){var Q=~~(D.r*255),$=~~(D.g*255);D=~~(D.b*255);var fa=~~(V.r*255),ja=~~(V.g*255);V=~~(V.b*255);var la=~~(T.r*255),ua=~~(T.g*255);T=~~(T.b* +255);var oa=~~(G.r*255),va=~~(G.g*255);G=~~(G.b*255);ia[0]=Q<0?0:Q>255?255:Q;ia[1]=$<0?0:$>255?255:$;ia[2]=D<0?0:D>255?255:D;ia[4]=fa<0?0:fa>255?255:fa;ia[5]=ja<0?0:ja>255?255:ja;ia[6]=V<0?0:V>255?255:V;ia[8]=la<0?0:la>255?255:la;ia[9]=ua<0?0:ua>255?255:ua;ia[10]=T<0?0:T>255?255:T;ia[12]=oa<0?0:oa>255?255:oa;ia[13]=va<0?0:va>255?255:va;ia[14]=G<0?0:G>255?255:G;xa.putImageData(ha,0,0);pa.drawImage(ea,0,0);return ta}function Ia(D,V,T){D=(D-V)/(T-V);return D*D*(3-2*D)}function Ja(D){D=(D+1)*0.5;return D< +0?0:D>1?1:D}function Ka(D,V){var T=V.x-D.x,G=V.y-D.y,Q=1/Math.sqrt(T*T+G*G);T*=Q;G*=Q;V.x+=T;V.y+=G;D.x-=T;D.y-=G}var Fa,Na,ca,sa,za,La,Oa,Ca;this.autoClear?this.clear():p.setTransform(1,0,0,-1,b,n);d=f.projectScene(aa,na,this.sortElements);(L=aa.lights.length>0)&&ka(aa);Fa=0;for(Na=d.length;Fa0){U.r+=E.color.r*S;U.g+=E.color.g*S;U.b+=E.color.b*S}}else if(E instanceof THREE.PointLight){m.sub(E.position,N.centroidWorld);m.normalize();S=N.normalWorld.dot(m)*E.intensity;if(S>0){U.r+=E.color.r*S;U.g+=E.color.g*S;U.b+=E.color.b*S}}}}function c(L,N,U,W,M,E){r=f(v++);r.setAttribute("d","M "+L.positionScreen.x+ -" "+L.positionScreen.y+" L "+N.positionScreen.x+" "+N.positionScreen.y+" L "+U.positionScreen.x+","+U.positionScreen.y+"z");if(M instanceof THREE.MeshBasicMaterial)F.__styleString=M.color.__styleString;else if(M instanceof THREE.MeshLambertMaterial)if(Q){e.r=p.r;e.g=p.g;e.b=p.b;a(E,W,e);F.r=M.color.r*e.r;F.g=M.color.g*e.g;F.b=M.color.b*e.b;F.updateStyleString()}else F.__styleString=M.color.__styleString;else if(M instanceof THREE.MeshDepthMaterial){k=1-M.__2near/(M.__farPlusNear-W.z*M.__farMinusNear); -F.setRGB(k,k,k)}else M instanceof THREE.MeshNormalMaterial&&F.setRGB(i(W.normalWorld.x),i(W.normalWorld.y),i(W.normalWorld.z));M.wireframe?r.setAttribute("style","fill: none; stroke: "+F.__styleString+"; stroke-width: "+M.wireframe_linewidth+"; stroke-opacity: "+M.opacity+"; stroke-linecap: "+M.wireframe_linecap+"; stroke-linejoin: "+M.wireframe_linejoin):r.setAttribute("style","fill: "+F.__styleString+"; fill-opacity: "+M.opacity);b.appendChild(r)}function d(L,N,U,W,M,E,S){r=f(v++);r.setAttribute("d", -"M "+L.positionScreen.x+" "+L.positionScreen.y+" L "+N.positionScreen.x+" "+N.positionScreen.y+" L "+U.positionScreen.x+","+U.positionScreen.y+" L "+W.positionScreen.x+","+W.positionScreen.y+"z");if(E instanceof THREE.MeshBasicMaterial)F.__styleString=E.color.__styleString;else if(E instanceof THREE.MeshLambertMaterial)if(Q){e.r=p.r;e.g=p.g;e.b=p.b;a(S,M,e);F.r=E.color.r*e.r;F.g=E.color.g*e.g;F.b=E.color.b*e.b;F.updateStyleString()}else F.__styleString=E.color.__styleString;else if(E instanceof THREE.MeshDepthMaterial){k= -1-E.__2near/(E.__farPlusNear-M.z*E.__farMinusNear);F.setRGB(k,k,k)}else E instanceof THREE.MeshNormalMaterial&&F.setRGB(i(M.normalWorld.x),i(M.normalWorld.y),i(M.normalWorld.z));E.wireframe?r.setAttribute("style","fill: none; stroke: "+F.__styleString+"; stroke-width: "+E.wireframe_linewidth+"; stroke-opacity: "+E.opacity+"; stroke-linecap: "+E.wireframe_linecap+"; stroke-linejoin: "+E.wireframe_linejoin):r.setAttribute("style","fill: "+F.__styleString+"; fill-opacity: "+E.opacity);b.appendChild(r)} -function f(L){if(t[L]==null){t[L]=document.createElementNS("http://www.w3.org/2000/svg","path");K==0&&t[L].setAttribute("shape-rendering","crispEdges");return t[L]}return t[L]}function i(L){return L<0?Math.min((1+L)*0.5,0.5):0.5+Math.min(L*0.5,0.5)}var j=null,u=new THREE.Projector,b=document.createElementNS("http://www.w3.org/2000/svg","svg"),o,q,y,z,x,s,G,J,I=new THREE.Rectangle,w=new THREE.Rectangle,Q=false,F=new THREE.Color(16777215),e=new THREE.Color(16777215),p=new THREE.Color(0),h=new THREE.Color(0), -g=new THREE.Color(0),k,m=new THREE.Vector3,t=[],l=[],n=[],r,v,A,C,K=1;this.domElement=b;this.sortElements=this.sortObjects=this.autoClear=true;this.setQuality=function(L){switch(L){case "high":K=1;break;case "low":K=0}};this.setSize=function(L,N){o=L;q=N;y=o/2;z=q/2;b.setAttribute("viewBox",-y+" "+-z+" "+o+" "+q);b.setAttribute("width",o);b.setAttribute("height",q);I.set(-y,-z,y,z)};this.clear=function(){for(;b.childNodes.length>0;)b.removeChild(b.childNodes[0])};this.render=function(L,N){var U,W, -M,E,S,O,B,R;this.autoClear&&this.clear();j=u.projectScene(L,N,this.sortElements);C=A=v=0;if(Q=L.lights.length>0){B=L.lights;p.setRGB(0,0,0);h.setRGB(0,0,0);g.setRGB(0,0,0);U=0;for(W=B.length;U0){U.r+=H.color.r*O;U.g+=H.color.g*O;U.b+=H.color.b*O}}else if(H instanceof THREE.PointLight){o.sub(H.position,E.centroidWorld);o.normalize();O=E.normalWorld.dot(o)*H.intensity;if(O>0){U.r+=H.color.r*O;U.g+=H.color.g*O;U.b+=H.color.b*O}}}}function c(J,E,U,X,N,H){l=f(s++);l.setAttribute("d","M "+J.positionScreen.x+ +" "+J.positionScreen.y+" L "+E.positionScreen.x+" "+E.positionScreen.y+" L "+U.positionScreen.x+","+U.positionScreen.y+"z");if(N instanceof THREE.MeshBasicMaterial)F.__styleString=N.color.__styleString;else if(N instanceof THREE.MeshLambertMaterial)if(R){P.r=e.r;P.g=e.g;P.b=e.b;a(H,X,P);F.r=N.color.r*P.r;F.g=N.color.g*P.g;F.b=N.color.b*P.b;F.updateStyleString()}else F.__styleString=N.color.__styleString;else if(N instanceof THREE.MeshDepthMaterial){g=1-N.__2near/(N.__farPlusNear-X.z*N.__farMinusNear); +F.setRGB(g,g,g)}else N instanceof THREE.MeshNormalMaterial&&F.setRGB(k(X.normalWorld.x),k(X.normalWorld.y),k(X.normalWorld.z));N.wireframe?l.setAttribute("style","fill: none; stroke: "+F.__styleString+"; stroke-width: "+N.wireframe_linewidth+"; stroke-opacity: "+N.opacity+"; stroke-linecap: "+N.wireframe_linecap+"; stroke-linejoin: "+N.wireframe_linejoin):l.setAttribute("style","fill: "+F.__styleString+"; fill-opacity: "+N.opacity);b.appendChild(l)}function d(J,E,U,X,N,H,O){l=f(s++);l.setAttribute("d", +"M "+J.positionScreen.x+" "+J.positionScreen.y+" L "+E.positionScreen.x+" "+E.positionScreen.y+" L "+U.positionScreen.x+","+U.positionScreen.y+" L "+X.positionScreen.x+","+X.positionScreen.y+"z");if(H instanceof THREE.MeshBasicMaterial)F.__styleString=H.color.__styleString;else if(H instanceof THREE.MeshLambertMaterial)if(R){P.r=e.r;P.g=e.g;P.b=e.b;a(O,N,P);F.r=H.color.r*P.r;F.g=H.color.g*P.g;F.b=H.color.b*P.b;F.updateStyleString()}else F.__styleString=H.color.__styleString;else if(H instanceof THREE.MeshDepthMaterial){g= +1-H.__2near/(H.__farPlusNear-N.z*H.__farMinusNear);F.setRGB(g,g,g)}else H instanceof THREE.MeshNormalMaterial&&F.setRGB(k(N.normalWorld.x),k(N.normalWorld.y),k(N.normalWorld.z));H.wireframe?l.setAttribute("style","fill: none; stroke: "+F.__styleString+"; stroke-width: "+H.wireframe_linewidth+"; stroke-opacity: "+H.opacity+"; stroke-linecap: "+H.wireframe_linecap+"; stroke-linejoin: "+H.wireframe_linejoin):l.setAttribute("style","fill: "+F.__styleString+"; fill-opacity: "+H.opacity);b.appendChild(l)} +function f(J){if(i[J]==null){i[J]=document.createElementNS("http://www.w3.org/2000/svg","path");M==0&&i[J].setAttribute("shape-rendering","crispEdges");return i[J]}return i[J]}function k(J){return J<0?Math.min((1+J)*0.5,0.5):0.5+Math.min(J*0.5,0.5)}var m=null,r=new THREE.Projector,b=document.createElementNS("http://www.w3.org/2000/svg","svg"),n,p,B,A,x,y,w,I,K=new THREE.Rectangle,u=new THREE.Rectangle,R=false,F=new THREE.Color(16777215),P=new THREE.Color(16777215),e=new THREE.Color(0),q=new THREE.Color(0), +h=new THREE.Color(0),g,o=new THREE.Vector3,i=[],t=[],j=[],l,s,z,v,M=1;this.domElement=b;this.sortElements=this.sortObjects=this.autoClear=true;this.setQuality=function(J){switch(J){case "high":M=1;break;case "low":M=0}};this.setSize=function(J,E){n=J;p=E;B=n/2;A=p/2;b.setAttribute("viewBox",-B+" "+-A+" "+n+" "+p);b.setAttribute("width",n);b.setAttribute("height",p);K.set(-B,-A,B,A)};this.clear=function(){for(;b.childNodes.length>0;)b.removeChild(b.childNodes[0])};this.render=function(J,E){var U,X, +N,H,O,S,C,L;this.autoClear&&this.clear();m=r.projectScene(J,E,this.sortElements);v=z=s=0;if(R=J.lights.length>0){C=J.lights;e.setRGB(0,0,0);q.setRGB(0,0,0);h.setRGB(0,0,0);U=0;for(X=C.length;U0){b.bindBuffer(b.ARRAY_BUFFER,e.__webGLUVBuffer);b.bufferData(b.ARRAY_BUFFER,R,h)}if(la&&U>0){b.bindBuffer(b.ARRAY_BUFFER,e.__webGLUV2Buffer);b.bufferData(b.ARRAY_BUFFER,X,h)}if(ha){b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,e.__webGLFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER, -ka,h);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,e.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,Y,h)}};this.setLineBuffers=function(e,p){var h,g,k,m=e.vertices,t=e.colors,l=m.length,n=t.length,r=e.__vertexArray,v=e.__colorArray,A=e.__dirtyColors;if(e.__dirtyVertices){for(h=0;h0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+m.maxDirLights,"#define MAX_POINT_LIGHTS "+m.maxPointLights,m.map?"#define USE_MAP":"",m.env_map?"#define USE_ENVMAP": -"",m.light_map?"#define USE_LIGHTMAP":"",m.vertex_colors?"#define USE_COLOR":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\n"].join("\n");b.attachShader(h,i("fragment",k+n));b.attachShader(h,i("vertex",m+p));b.linkProgram(h);b.getProgramParameter(h,b.LINK_STATUS)|| -alert("Could not initialise shaders\nVALIDATE_STATUS: "+b.getProgramParameter(h,b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");h.uniforms={};h.attributes={};e.program=h;h=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition"];for(g in e.uniforms)h.push(g);g=e.program;n=0;for(p=h.length;n=0){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLColorBuffer);b.vertexAttribPointer(e.color,3,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.color)}if(e.normal>=0){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLNormalBuffer);b.vertexAttribPointer(e.normal,3,b.FLOAT, -false,0,0);b.enableVertexAttribArray(e.normal)}if(e.tangent>=0){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLTangentBuffer);b.vertexAttribPointer(e.tangent,4,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.tangent)}if(e.uv>=0)if(k.__webGLUVBuffer){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLUVBuffer);b.vertexAttribPointer(e.uv,2,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.uv)}else b.disableVertexAttribArray(e.uv);if(e.uv2>=0)if(k.__webGLUV2Buffer){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLUV2Buffer);b.vertexAttribPointer(e.uv2, -2,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.uv2)}else b.disableVertexAttribArray(e.uv2);if(m instanceof THREE.Mesh)if(g.wireframe){b.lineWidth(g.wireframe_linewidth);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,k.__webGLLineBuffer);b.drawElements(b.LINES,k.__webGLLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,k.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,k.__webGLFaceCount,b.UNSIGNED_SHORT,0)}else if(m instanceof THREE.Line){m=m.type==THREE.LineStrip?b.LINE_STRIP:b.LINES;b.lineWidth(g.linewidth); -b.drawArrays(m,0,k.__webGLLineCount)}else m instanceof THREE.ParticleSystem&&b.drawArrays(b.POINTS,0,k.__webGLParticleCount)};this.renderPass=function(e,p,h,g,k,m,t){var l,n,r,v,A;r=0;for(v=g.materials.length;r=0;h--){g=e.__webGLObjects[h].object; -p==g&&e.__webGLObjects.splice(h,1)}};this.setupMatrices=function(e,p){e._modelViewMatrix.multiplyToArray(p.matrix,e.matrix,e._modelViewMatrixArray);e._normalMatrix=THREE.Matrix4.makeInvert3x3(e._modelViewMatrix).transposeIntoArray(e._normalMatrixArray)};this.setDepthTest=function(e){e?b.enable(b.DEPTH_TEST):b.disable(b.DEPTH_TEST)};this.setFaceCulling=function(e,p){if(e){!p||p=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);if(e=="back")b.cullFace(b.BACK);else e=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK); -b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)};this.supportsVertexTextures=function(){return b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0}}; +case THREE.UnsignedByteType:return b.UNSIGNED_BYTE;case THREE.ShortType:return b.SHORT;case THREE.UnsignedShortType:return b.UNSIGNED_SHORT;case THREE.IntType:return b.INT;case THREE.UnsignedShortType:return b.UNSIGNED_INT;case THREE.FloatType:return b.FLOAT;case THREE.AlphaFormat:return b.ALPHA;case THREE.RGBFormat:return b.RGB;case THREE.RGBAFormat:return b.RGBA;case THREE.LuminanceFormat:return b.LUMINANCE;case THREE.LuminanceAlphaFormat:return b.LUMINANCE_ALPHA}return 0}var r=document.createElement("canvas"), +b,n=null,p=null,B=null,A=null,x=null,y=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],w=new THREE.Matrix4,I=new Float32Array(16),K=new Float32Array(16),u=new THREE.Vector4,R=true,F=new THREE.Color(0),P=0;if(a){if(a.antialias!==undefined)R=a.antialias;a.clearColor!==undefined&&F.setHex(a.clearColor);if(a.clearAlpha!==undefined)P=a.clearAlpha}this.domElement=r;this.autoClear=true;(function(e,q,h){try{b=r.getContext("experimental-webgl", +{antialias:e})}catch(g){console.log(g)}if(!b){alert("WebGL not supported");throw"cannot create webgl context";}b.clearColor(0,0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA);b.clearColor(q.r,q.g,q.b,h);_cullEnabled=true})(R,F,P);this.context=b;this.lights={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[]}};this.setSize= +function(e,q){r.width=e;r.height=q;b.viewport(0,0,r.width,r.height)};this.setClearColorHex=function(e,q){var h=new THREE.Color(e);b.clearColor(h.r,h.g,h.b,q)};this.setClearColor=function(e,q){b.clearColor(e.r,e.g,e.b,q)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|b.DEPTH_BUFFER_BIT)};this.setupLights=function(e,q){var h,g,o,i=0,t=0,j=0,l,s,z,v=this.lights,M=v.directional.colors,J=v.directional.positions,E=v.point.colors,U=v.point.positions,X=0,N=0;h=o=o=0;for(g=q.length;h0){b.bindBuffer(b.ARRAY_BUFFER,e.__webGLUVBuffer);b.bufferData(b.ARRAY_BUFFER,W,h)}if(pa&&X>0){b.bindBuffer(b.ARRAY_BUFFER,e.__webGLUV2Buffer); +b.bufferData(b.ARRAY_BUFFER,ga,h)}if(ta){b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,e.__webGLFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,Z,h);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,e.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,ea,h)}};this.setLineBuffers=function(e,q){var h,g,o,i=e.vertices,t=e.colors,j=i.length,l=t.length,s=e.__vertexArray,z=e.__colorArray,v=e.__dirtyColors;if(e.__dirtyVertices){for(h=0;h0?"#define VERTEX_TEXTURES": +"","#define MAX_DIR_LIGHTS "+i.maxDirLights,"#define MAX_POINT_LIGHTS "+i.maxPointLights,i.map?"#define USE_MAP":"",i.env_map?"#define USE_ENVMAP":"",i.light_map?"#define USE_LIGHTMAP":"",i.vertex_colors?"#define USE_COLOR":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\n"].join("\n"); +b.attachShader(h,k("fragment",o+l));b.attachShader(h,k("vertex",i+q));b.linkProgram(h);b.getProgramParameter(h,b.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+b.getProgramParameter(h,b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");h.uniforms={};h.attributes={};e.program=h;h=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition"];for(g in e.uniforms)h.push(g);g=e.program;l=0;for(q=h.length;l=0){b.bindBuffer(b.ARRAY_BUFFER,o.__webGLColorBuffer);b.vertexAttribPointer(e.color,3,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.color)}if(e.normal>= +0){b.bindBuffer(b.ARRAY_BUFFER,o.__webGLNormalBuffer);b.vertexAttribPointer(e.normal,3,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.normal)}if(e.tangent>=0){b.bindBuffer(b.ARRAY_BUFFER,o.__webGLTangentBuffer);b.vertexAttribPointer(e.tangent,4,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.tangent)}if(e.uv>=0)if(o.__webGLUVBuffer){b.bindBuffer(b.ARRAY_BUFFER,o.__webGLUVBuffer);b.vertexAttribPointer(e.uv,2,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.uv)}else b.disableVertexAttribArray(e.uv);if(e.uv2>= +0)if(o.__webGLUV2Buffer){b.bindBuffer(b.ARRAY_BUFFER,o.__webGLUV2Buffer);b.vertexAttribPointer(e.uv2,2,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.uv2)}else b.disableVertexAttribArray(e.uv2);if(i instanceof THREE.Mesh)if(g.wireframe){b.lineWidth(g.wireframe_linewidth);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,o.__webGLLineBuffer);b.drawElements(b.LINES,o.__webGLLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,o.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,o.__webGLFaceCount,b.UNSIGNED_SHORT, +0)}else if(i instanceof THREE.Line){i=i.type==THREE.LineStrip?b.LINE_STRIP:b.LINES;b.lineWidth(g.linewidth);b.drawArrays(i,0,o.__webGLLineCount)}else i instanceof THREE.ParticleSystem&&b.drawArrays(b.POINTS,0,o.__webGLParticleCount)};this.renderPass=function(e,q,h,g,o,i,t){var j,l,s,z,v;s=0;for(z=g.materials.length;s=0;h--){g=e.__webGLObjects[h].object;q==g&&e.__webGLObjects.splice(h,1)}};this.setupMatrices=function(e,q){e._modelViewMatrix.multiplyToArray(q.matrix,e.matrix,e._modelViewMatrixArray);e._normalMatrix=THREE.Matrix4.makeInvert3x3(e._modelViewMatrix).transposeIntoArray(e._normalMatrixArray)};this.setDepthTest=function(e){e?b.enable(b.DEPTH_TEST):b.disable(b.DEPTH_TEST)};this.setFaceCulling=function(e,q){if(e){!q||q=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW); +if(e=="back")b.cullFace(b.BACK);else e=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK);b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)};this.supportsVertexTextures=function(){return b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0}}; THREE.Snippets={fog_pars_fragment:"#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif",fog_fragment:"#ifdef USE_FOG\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n#ifdef FOG_EXP2\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n#else\nfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n#endif\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float reflectivity;\nuniform samplerCube env_map;\nuniform int combine;\n#endif", envmap_fragment:"#ifdef USE_ENVMAP\nvec4 cubeColor = textureCube( env_map, vec3( -vReflect.x, vReflect.yz ) );\nif ( combine == 1 ) {\ngl_FragColor = vec4( mix( gl_FragColor.xyz, cubeColor.xyz, reflectivity ), opacity );\n} else {\ngl_FragColor = gl_FragColor * cubeColor;\n}\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float refraction_ratio;\nuniform bool useRefract;\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nif ( useRefract ) {\nvReflect = refract( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ), refraction_ratio );\n} else {\nvReflect = reflect( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ) );\n}\n#endif", map_particle_pars_fragment:"#ifdef USE_MAP\nuniform sampler2D map;\n#endif",map_particle_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, gl_PointCoord );\n#endif",map_pars_fragment:"#ifdef USE_MAP\nvarying vec2 vUv;\nuniform sampler2D map;\n#endif",map_pars_vertex:"#ifdef USE_MAP\nvarying vec2 vUv;\n#endif",map_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, vUv );\n#endif",map_vertex:"#ifdef USE_MAP\nvUv = uv;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\nuniform sampler2D light_map;\n#endif", diff --git a/build/ThreeDebug.js b/build/ThreeDebug.js index de8957f0..daee481b 100644 --- a/build/ThreeDebug.js +++ b/build/ThreeDebug.js @@ -1,6 +1,6 @@ // ThreeDebug.js r32 - http://github.com/mrdoob/three.js var THREE=THREE||{};THREE.Color=function(a){this.autoUpdate=true;this.setHex(a)}; -THREE.Color.prototype={setRGB:function(a,c,d){this.r=a;this.g=c;this.b=d;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHSV:function(a,c,d){var f,i,j,u,b,o;if(d==0)f=i=j=0;else{u=Math.floor(a*6);b=a*6-u;a=d*(1-c);o=d*(1-c*b);c=d*(1-c*(1-b));switch(u){case 1:f=o;i=d;j=a;break;case 2:f=a;i=d;j=c;break;case 3:f=a;i=o;j=d;break;case 4:f=c;i=a;j=d;break;case 5:f=d;i=a;j=o;break;case 6:case 0:f=d;i=c;j=a}}this.r=f;this.g=i;this.b=j;if(this.autoUpdate){this.updateHex();this.updateStyleString()}}, +THREE.Color.prototype={setRGB:function(a,c,d){this.r=a;this.g=c;this.b=d;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHSV:function(a,c,d){var f,k,m,r,b,n;if(d==0)f=k=m=0;else{r=Math.floor(a*6);b=a*6-r;a=d*(1-c);n=d*(1-c*b);c=d*(1-c*(1-b));switch(r){case 1:f=n;k=d;m=a;break;case 2:f=a;k=d;m=c;break;case 3:f=a;k=n;m=d;break;case 4:f=c;k=a;m=d;break;case 5:f=d;k=a;m=n;break;case 6:case 0:f=d;k=c;m=a}}this.r=f;this.g=k;this.b=m;if(this.autoUpdate){this.updateHex();this.updateStyleString()}}, setHex:function(a){this.hex=~~a&16777215;if(this.autoUpdate){this.updateRGBA();this.updateStyleString()}},updateHex:function(){this.hex=~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},updateRGBA:function(){this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255},updateStyleString:function(){this.__styleString="rgb("+~~(this.r*255)+","+~~(this.g*255)+","+~~(this.b*255)+")"},clone:function(){return new THREE.Color(this.hex)},toString:function(){return"THREE.Color ( r: "+ this.r+", g: "+this.g+", b: "+this.b+", hex: "+this.hex+" )"}};THREE.Vector2=function(a,c){this.x=a||0;this.y=c||0}; THREE.Vector2.prototype={set:function(a,c){this.x=a;this.y=c;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},unit:function(){this.multiplyScalar(1/this.length());return this},length:function(){return Math.sqrt(this.x* @@ -13,52 +13,52 @@ THREE.Vector4=function(a,c,d,f){this.x=a||0;this.y=c||0;this.z=d||0;this.w=f||1} THREE.Vector4.prototype={set:function(a,c,d,f){this.x=a;this.y=c;this.z=d;this.w=f;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w||1;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;this.w=a.w+c.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;this.w=a.w-c.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.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,c){this.x+=(a.x-this.x)*c;this.y+=(a.y-this.y)*c;this.z+=(a.z-this.z)*c;this.w+=(a.w-this.w)*c},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,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3}; -THREE.Ray.prototype={intersectScene:function(a){var c,d,f=a.objects,i=[];a=0;for(c=f.length;a0&&I>0&&p+I<1}var d,f,i,j,u,b,o,q,y,z, -x,s=a.geometry,G=s.vertices,J=[];d=0;for(f=s.faces.length;do?f:o;i=i>q? -i:q}a()};this.add3Points=function(o,q,y,z,x,s){if(b){b=false;c=oy?o>x?o:x:y>x?y:x;i=q>z?q>s?q:s:z>s?z:s}else{c=oy?o>x?o>f?o:f:x>f?x:f:y>x?y>f?y:f:x>f?x:f;i=q>z?q>s?q>i?q:i:s>i?s:i:z>s?z>i?z:i:s>i?s:i}a()};this.addRectangle=function(o){if(b){b=false;c=o.getLeft();d=o.getTop();f=o.getRight();i=o.getBottom()}else{c=co.getRight()?f:o.getRight();i=i>o.getBottom()?i:o.getBottom()}a()};this.inflate=function(o){c-=o;d-=o;f+=o;i+=o;a()};this.minSelf=function(o){c=c>o.getLeft()?c:o.getLeft();d=d>o.getTop()?d:o.getTop();f=f=0&&Math.min(i,o.getBottom())-Math.max(d,o.getTop())>=0};this.empty=function(){b=true;i=f=d=c=0;a()};this.isEmpty=function(){return b};this.toString= -function(){return"THREE.Rectangle ( left: "+c+", right: "+f+", top: "+d+", bottom: "+i+", width: "+j+", height: "+u+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a,c=this.m;a=c[1];c[1]=c[3];c[3]=a;a=c[2];c[2]=c[6];c[6]=a;a=c[5];c[5]=c[7];c[7]=a;return this},transposeIntoArray:function(a){var c=this.m;a[0]=c[0];a[1]=c[3];a[2]=c[6];a[3]=c[1];a[4]=c[4];a[5]=c[7];a[6]=c[2];a[7]=c[5];a[8]=c[8];return this}}; -THREE.Matrix4=function(a,c,d,f,i,j,u,b,o,q,y,z,x,s,G,J){this.n11=a||1;this.n12=c||0;this.n13=d||0;this.n14=f||0;this.n21=i||0;this.n22=j||1;this.n23=u||0;this.n24=b||0;this.n31=o||0;this.n32=q||0;this.n33=y||1;this.n34=z||0;this.n41=x||0;this.n42=s||0;this.n43=G||0;this.n44=J||1;this.flat=Array(16);this.m33=new THREE.Matrix3}; -THREE.Matrix4.prototype={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;return this},set:function(a,c,d,f,i,j,u,b,o,q,y,z,x,s,G,J){this.n11=a;this.n12=c;this.n13=d;this.n14=f;this.n21=i;this.n22=j;this.n23=u;this.n24=b;this.n31=o;this.n32=q;this.n33=y;this.n34=z;this.n41=x;this.n42=s;this.n43=G;this.n44=J;return this},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;return this},lookAt:function(a,c,d){var f=THREE.Matrix4.__tmpVec1,i=THREE.Matrix4.__tmpVec2,j=THREE.Matrix4.__tmpVec3;j.sub(a,c).normalize();f.cross(d,j).normalize();i.cross(j,f).normalize();this.n11=f.x;this.n12=f.y;this.n13=f.z;this.n14=-f.dot(a);this.n21=i.x;this.n22=i.y;this.n23=i.z;this.n24=-i.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;return this},multiplyVector3:function(a){var c=a.x,d=a.y,f=a.z,i=1/(this.n41*c+this.n42*d+this.n43*f+this.n44);a.x=(this.n11*c+this.n12*d+this.n13*f+this.n14)*i;a.y=(this.n21*c+this.n22*d+this.n23*f+this.n24)*i;a.z=(this.n31*c+this.n32*d+this.n33*f+this.n34)*i;return a},multiplyVector4:function(a){var c=a.x,d=a.y,f=a.z,i=a.w;a.x=this.n11*c+this.n12*d+this.n13*f+this.n14*i;a.y=this.n21*c+this.n22*d+this.n23* -f+this.n24*i;a.z=this.n31*c+this.n32*d+this.n33*f+this.n34*i;a.w=this.n41*c+this.n42*d+this.n43*f+this.n44*i;return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var d=a.n11,f=a.n12,i=a.n13,j=a.n14,u=a.n21,b=a.n22,o=a.n23,q=a.n24,y=a.n31, -z=a.n32,x=a.n33,s=a.n34,G=a.n41,J=a.n42,I=a.n43,w=a.n44,R=c.n11,F=c.n12,e=c.n13,p=c.n14,h=c.n21,g=c.n22,k=c.n23,m=c.n24,t=c.n31,l=c.n32,n=c.n33,r=c.n34,v=c.n41,A=c.n42,D=c.n43,K=c.n44;this.n11=d*R+f*h+i*t+j*v;this.n12=d*F+f*g+i*l+j*A;this.n13=d*e+f*k+i*n+j*D;this.n14=d*p+f*m+i*r+j*K;this.n21=u*R+b*h+o*t+q*v;this.n22=u*F+b*g+o*l+q*A;this.n23=u*e+b*k+o*n+q*D;this.n24=u*p+b*m+o*r+q*K;this.n31=y*R+z*h+x*t+s*v;this.n32=y*F+z*g+x*l+s*A;this.n33=y*e+z*k+x*n+s*D;this.n34=y*p+z*m+x*r+s*K;this.n41=G*R+J*h+ -I*t+w*v;this.n42=G*F+J*g+I*l+w*A;this.n43=G*e+J*k+I*n+w*D;this.n44=G*p+J*m+I*r+w*K;return this},multiplyToArray:function(a,c,d){var f=a.n11,i=a.n12,j=a.n13,u=a.n14,b=a.n21,o=a.n22,q=a.n23,y=a.n24,z=a.n31,x=a.n32,s=a.n33,G=a.n34,J=a.n41,I=a.n42,w=a.n43;a=a.n44;var R=c.n11,F=c.n12,e=c.n13,p=c.n14,h=c.n21,g=c.n22,k=c.n23,m=c.n24,t=c.n31,l=c.n32,n=c.n33,r=c.n34,v=c.n41,A=c.n42,D=c.n43;c=c.n44;this.n11=f*R+i*h+j*t+u*v;this.n12=f*F+i*g+j*l+u*A;this.n13=f*e+i*k+j*n+u*D;this.n14=f*p+i*m+j*r+u*c;this.n21= -b*R+o*h+q*t+y*v;this.n22=b*F+o*g+q*l+y*A;this.n23=b*e+o*k+q*n+y*D;this.n24=b*p+o*m+q*r+y*c;this.n31=z*R+x*h+s*t+G*v;this.n32=z*F+x*g+s*l+G*A;this.n33=z*e+x*k+s*n+G*D;this.n34=z*p+x*m+s*r+G*c;this.n41=J*R+I*h+w*t+a*v;this.n42=J*F+I*g+w*l+a*A;this.n43=J*e+I*k+w*n+a*D;this.n44=J*p+I*m+w*r+a*c;d[0]=this.n11;d[1]=this.n21;d[2]=this.n31;d[3]=this.n41;d[4]=this.n12;d[5]=this.n22;d[6]=this.n32;d[7]=this.n42;d[8]=this.n13;d[9]=this.n23;d[10]=this.n33;d[11]=this.n43;d[12]=this.n14;d[13]=this.n24;d[14]=this.n34; -d[15]=this.n44;return this},multiplySelf:function(a){var c=this.n11,d=this.n12,f=this.n13,i=this.n14,j=this.n21,u=this.n22,b=this.n23,o=this.n24,q=this.n31,y=this.n32,z=this.n33,x=this.n34,s=this.n41,G=this.n42,J=this.n43,I=this.n44,w=a.n11,R=a.n21,F=a.n31,e=a.n41,p=a.n12,h=a.n22,g=a.n32,k=a.n42,m=a.n13,t=a.n23,l=a.n33,n=a.n43,r=a.n14,v=a.n24,A=a.n34;a=a.n44;this.n11=c*w+d*R+f*F+i*e;this.n12=c*p+d*h+f*g+i*k;this.n13=c*m+d*t+f*l+i*n;this.n14=c*r+d*v+f*A+i*a;this.n21=j*w+u*R+b*F+o*e;this.n22=j*p+u* -h+b*g+o*k;this.n23=j*m+u*t+b*l+o*n;this.n24=j*r+u*v+b*A+o*a;this.n31=q*w+y*R+z*F+x*e;this.n32=q*p+y*h+z*g+x*k;this.n33=q*m+y*t+z*l+x*n;this.n34=q*r+y*v+z*A+x*a;this.n41=s*w+G*R+J*F+I*e;this.n42=s*p+G*h+J*g+I*k;this.n43=s*m+G*t+J*l+I*n;this.n44=s*r+G*v+J*A+I*a;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this}, -determinant:function(){var a=this.n11,c=this.n12,d=this.n13,f=this.n14,i=this.n21,j=this.n22,u=this.n23,b=this.n24,o=this.n31,q=this.n32,y=this.n33,z=this.n34,x=this.n41,s=this.n42,G=this.n43,J=this.n44;return f*u*q*x-d*b*q*x-f*j*y*x+c*b*y*x+d*j*z*x-c*u*z*x-f*u*o*s+d*b*o*s+f*i*y*s-a*b*y*s-d*i*z*s+a*u*z*s+f*j*o*G-c*b*o*G-f*i*q*G+a*b*q*G+c*i*z*G-a*j*z*G-d*j*o*J+c*u*o*J+d*i*q*J-a*u*q*J-c*i*y*J+a*j*y*J},transpose:function(){function a(c,d,f){var i=c[d];c[d]=c[f];c[f]=i}a(this,"n21","n12");a(this,"n31", +THREE.Ray.prototype={intersectScene:function(a){var c,d,f=a.objects,k=[];a=0;for(c=f.length;a0&&K>0&&e+K<1}var d,f,k,m,r,b,n,o,B,A, +x,y=a.geometry,w=y.vertices,I=[];d=0;for(f=y.faces.length;dn?f:n;k=k>o? +k:o}a()};this.add3Points=function(n,o,B,A,x,y){if(b){b=false;c=nB?n>x?n:x:B>x?B:x;k=o>A?o>y?o:y:A>y?A:y}else{c=nB?n>x?n>f?n:f:x>f?x:f:B>x?B>f?B:f:x>f?x:f;k=o>A?o>y?o>k?o:k:y>k?y:k:A>y?A>k?A:k:y>k?y:k}a()};this.addRectangle=function(n){if(b){b=false;c=n.getLeft();d=n.getTop();f=n.getRight();k=n.getBottom()}else{c=cn.getRight()?f:n.getRight();k=k>n.getBottom()?k:n.getBottom()}a()};this.inflate=function(n){c-=n;d-=n;f+=n;k+=n;a()};this.minSelf=function(n){c=c>n.getLeft()?c:n.getLeft();d=d>n.getTop()?d:n.getTop();f=f=0&&Math.min(k,n.getBottom())-Math.max(d,n.getTop())>=0};this.empty=function(){b=true;k=f=d=c=0;a()};this.isEmpty=function(){return b};this.toString= +function(){return"THREE.Rectangle ( left: "+c+", right: "+f+", top: "+d+", bottom: "+k+", width: "+m+", height: "+r+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a,c=this.m;a=c[1];c[1]=c[3];c[3]=a;a=c[2];c[2]=c[6];c[6]=a;a=c[5];c[5]=c[7];c[7]=a;return this},transposeIntoArray:function(a){var c=this.m;a[0]=c[0];a[1]=c[3];a[2]=c[6];a[3]=c[1];a[4]=c[4];a[5]=c[7];a[6]=c[2];a[7]=c[5];a[8]=c[8];return this}}; +THREE.Matrix4=function(a,c,d,f,k,m,r,b,n,o,B,A,x,y,w,I){this.n11=a||1;this.n12=c||0;this.n13=d||0;this.n14=f||0;this.n21=k||0;this.n22=m||1;this.n23=r||0;this.n24=b||0;this.n31=n||0;this.n32=o||0;this.n33=B||1;this.n34=A||0;this.n41=x||0;this.n42=y||0;this.n43=w||0;this.n44=I||1;this.flat=Array(16);this.m33=new THREE.Matrix3}; +THREE.Matrix4.prototype={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;return this},set:function(a,c,d,f,k,m,r,b,n,o,B,A,x,y,w,I){this.n11=a;this.n12=c;this.n13=d;this.n14=f;this.n21=k;this.n22=m;this.n23=r;this.n24=b;this.n31=n;this.n32=o;this.n33=B;this.n34=A;this.n41=x;this.n42=y;this.n43=w;this.n44=I;return this},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;return this},lookAt:function(a,c,d){var f=THREE.Matrix4.__tmpVec1,k=THREE.Matrix4.__tmpVec2,m=THREE.Matrix4.__tmpVec3;m.sub(a,c).normalize();f.cross(d,m).normalize();k.cross(m,f).normalize();this.n11=f.x;this.n12=f.y;this.n13=f.z;this.n14=-f.dot(a);this.n21=k.x;this.n22=k.y;this.n23=k.z;this.n24=-k.dot(a); +this.n31=m.x;this.n32=m.y;this.n33=m.z;this.n34=-m.dot(a);this.n43=this.n42=this.n41=0;this.n44=1;return this},multiplyVector3:function(a){var c=a.x,d=a.y,f=a.z,k=1/(this.n41*c+this.n42*d+this.n43*f+this.n44);a.x=(this.n11*c+this.n12*d+this.n13*f+this.n14)*k;a.y=(this.n21*c+this.n22*d+this.n23*f+this.n24)*k;a.z=(this.n31*c+this.n32*d+this.n33*f+this.n34)*k;return a},multiplyVector4:function(a){var c=a.x,d=a.y,f=a.z,k=a.w;a.x=this.n11*c+this.n12*d+this.n13*f+this.n14*k;a.y=this.n21*c+this.n22*d+this.n23* +f+this.n24*k;a.z=this.n31*c+this.n32*d+this.n33*f+this.n34*k;a.w=this.n41*c+this.n42*d+this.n43*f+this.n44*k;return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var d=a.n11,f=a.n12,k=a.n13,m=a.n14,r=a.n21,b=a.n22,n=a.n23,o=a.n24,B=a.n31, +A=a.n32,x=a.n33,y=a.n34,w=a.n41,I=a.n42,K=a.n43,u=a.n44,S=c.n11,F=c.n12,P=c.n13,e=c.n14,q=c.n21,h=c.n22,g=c.n23,p=c.n24,i=c.n31,t=c.n32,j=c.n33,l=c.n34,s=c.n41,z=c.n42,v=c.n43,N=c.n44;this.n11=d*S+f*q+k*i+m*s;this.n12=d*F+f*h+k*t+m*z;this.n13=d*P+f*g+k*j+m*v;this.n14=d*e+f*p+k*l+m*N;this.n21=r*S+b*q+n*i+o*s;this.n22=r*F+b*h+n*t+o*z;this.n23=r*P+b*g+n*j+o*v;this.n24=r*e+b*p+n*l+o*N;this.n31=B*S+A*q+x*i+y*s;this.n32=B*F+A*h+x*t+y*z;this.n33=B*P+A*g+x*j+y*v;this.n34=B*e+A*p+x*l+y*N;this.n41=w*S+I*q+ +K*i+u*s;this.n42=w*F+I*h+K*t+u*z;this.n43=w*P+I*g+K*j+u*v;this.n44=w*e+I*p+K*l+u*N;return this},multiplyToArray:function(a,c,d){var f=a.n11,k=a.n12,m=a.n13,r=a.n14,b=a.n21,n=a.n22,o=a.n23,B=a.n24,A=a.n31,x=a.n32,y=a.n33,w=a.n34,I=a.n41,K=a.n42,u=a.n43;a=a.n44;var S=c.n11,F=c.n12,P=c.n13,e=c.n14,q=c.n21,h=c.n22,g=c.n23,p=c.n24,i=c.n31,t=c.n32,j=c.n33,l=c.n34,s=c.n41,z=c.n42,v=c.n43;c=c.n44;this.n11=f*S+k*q+m*i+r*s;this.n12=f*F+k*h+m*t+r*z;this.n13=f*P+k*g+m*j+r*v;this.n14=f*e+k*p+m*l+r*c;this.n21= +b*S+n*q+o*i+B*s;this.n22=b*F+n*h+o*t+B*z;this.n23=b*P+n*g+o*j+B*v;this.n24=b*e+n*p+o*l+B*c;this.n31=A*S+x*q+y*i+w*s;this.n32=A*F+x*h+y*t+w*z;this.n33=A*P+x*g+y*j+w*v;this.n34=A*e+x*p+y*l+w*c;this.n41=I*S+K*q+u*i+a*s;this.n42=I*F+K*h+u*t+a*z;this.n43=I*P+K*g+u*j+a*v;this.n44=I*e+K*p+u*l+a*c;d[0]=this.n11;d[1]=this.n21;d[2]=this.n31;d[3]=this.n41;d[4]=this.n12;d[5]=this.n22;d[6]=this.n32;d[7]=this.n42;d[8]=this.n13;d[9]=this.n23;d[10]=this.n33;d[11]=this.n43;d[12]=this.n14;d[13]=this.n24;d[14]=this.n34; +d[15]=this.n44;return this},multiplySelf:function(a){var c=this.n11,d=this.n12,f=this.n13,k=this.n14,m=this.n21,r=this.n22,b=this.n23,n=this.n24,o=this.n31,B=this.n32,A=this.n33,x=this.n34,y=this.n41,w=this.n42,I=this.n43,K=this.n44,u=a.n11,S=a.n21,F=a.n31,P=a.n41,e=a.n12,q=a.n22,h=a.n32,g=a.n42,p=a.n13,i=a.n23,t=a.n33,j=a.n43,l=a.n14,s=a.n24,z=a.n34;a=a.n44;this.n11=c*u+d*S+f*F+k*P;this.n12=c*e+d*q+f*h+k*g;this.n13=c*p+d*i+f*t+k*j;this.n14=c*l+d*s+f*z+k*a;this.n21=m*u+r*S+b*F+n*P;this.n22=m*e+r* +q+b*h+n*g;this.n23=m*p+r*i+b*t+n*j;this.n24=m*l+r*s+b*z+n*a;this.n31=o*u+B*S+A*F+x*P;this.n32=o*e+B*q+A*h+x*g;this.n33=o*p+B*i+A*t+x*j;this.n34=o*l+B*s+A*z+x*a;this.n41=y*u+w*S+I*F+K*P;this.n42=y*e+w*q+I*h+K*g;this.n43=y*p+w*i+I*t+K*j;this.n44=y*l+w*s+I*z+K*a;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this}, +determinant:function(){var a=this.n11,c=this.n12,d=this.n13,f=this.n14,k=this.n21,m=this.n22,r=this.n23,b=this.n24,n=this.n31,o=this.n32,B=this.n33,A=this.n34,x=this.n41,y=this.n42,w=this.n43,I=this.n44;return f*r*o*x-d*b*o*x-f*m*B*x+c*b*B*x+d*m*A*x-c*r*A*x-f*r*n*y+d*b*n*y+f*k*B*y-a*b*B*y-d*k*A*y+a*r*A*y+f*m*n*w-c*b*n*w-f*k*o*w+a*b*o*w+c*k*A*w-a*m*A*w-d*m*n*I+c*r*n*I+d*k*o*I-a*r*o*I-c*k*B*I+a*m*B*I},transpose:function(){function a(c,d,f){var k=c[d];c[d]=c[f];c[f]=k}a(this,"n21","n12");a(this,"n31", "n13");a(this,"n32","n23");a(this,"n41","n14");a(this,"n42","n24");a(this,"n43","n34");return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){var a=this.flat;a[0]=this.n11;a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]= this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArray:function(a){a[0]=this.n11;a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},setTranslation:function(a,c,d){this.set(1,0,0,a,0,1,0,c,0,0,1,d,0,0,0, -1);return this},setScale:function(a,c,d){this.set(a,0,0,0,0,c,0,0,0,0,d,0,0,0,0,1);return this},setRotX:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,c,-a,0,0,a,c,0,0,0,0,1);return this},setRotY:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,0,a,0,0,1,0,0,-a,0,c,0,0,0,0,1);return this},setRotZ:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,-a,0,0,a,c,0,0,0,0,1,0,0,0,0,1);return this},setRotAxis:function(a,c){var d=Math.cos(c),f=Math.sin(c),i=1-d,j=a.x,u=a.y,b=a.z, -o=i*j,q=i*u;this.set(o*j+d,o*u-f*b,o*b+f*u,0,o*u+f*b,q*u+d,q*b-f*j,0,o*b-f*u,q*b+f*j,i*b*b+d,0,0,0,0,1);return this},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(a,c,d){var f=new THREE.Matrix4;f.setTranslation(a,c,d);return f}; +1);return this},setScale:function(a,c,d){this.set(a,0,0,0,0,c,0,0,0,0,d,0,0,0,0,1);return this},setRotX:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,c,-a,0,0,a,c,0,0,0,0,1);return this},setRotY:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,0,a,0,0,1,0,0,-a,0,c,0,0,0,0,1);return this},setRotZ:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,-a,0,0,a,c,0,0,0,0,1,0,0,0,0,1);return this},setRotAxis:function(a,c){var d=Math.cos(c),f=Math.sin(c),k=1-d,m=a.x,r=a.y,b=a.z, +n=k*m,o=k*r;this.set(n*m+d,n*r-f*b,n*b+f*r,0,n*r+f*b,o*r+d,o*b-f*m,0,n*b-f*r,o*b+f*m,k*b*b+d,0,0,0,0,1);return this},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(a,c,d){var f=new THREE.Matrix4;f.setTranslation(a,c,d);return f}; THREE.Matrix4.scaleMatrix=function(a,c,d){var f=new THREE.Matrix4;f.setScale(a,c,d);return f};THREE.Matrix4.rotationXMatrix=function(a){var c=new THREE.Matrix4;c.setRotX(a);return c};THREE.Matrix4.rotationYMatrix=function(a){var c=new THREE.Matrix4;c.setRotY(a);return c};THREE.Matrix4.rotationZMatrix=function(a){var c=new THREE.Matrix4;c.setRotZ(a);return c};THREE.Matrix4.rotationAxisAngleMatrix=function(a,c){var d=new THREE.Matrix4;d.setRotAxis(a,c);return d}; -THREE.Matrix4.makeInvert=function(a){var c=a.n11,d=a.n12,f=a.n13,i=a.n14,j=a.n21,u=a.n22,b=a.n23,o=a.n24,q=a.n31,y=a.n32,z=a.n33,x=a.n34,s=a.n41,G=a.n42,J=a.n43,I=a.n44,w=new THREE.Matrix4;w.n11=b*x*G-o*z*G+o*y*J-u*x*J-b*y*I+u*z*I;w.n12=i*z*G-f*x*G-i*y*J+d*x*J+f*y*I-d*z*I;w.n13=f*o*G-i*b*G+i*u*J-d*o*J-f*u*I+d*b*I;w.n14=i*b*y-f*o*y-i*u*z+d*o*z+f*u*x-d*b*x;w.n21=o*z*s-b*x*s-o*q*J+j*x*J+b*q*I-j*z*I;w.n22=f*x*s-i*z*s+i*q*J-c*x*J-f*q*I+c*z*I;w.n23=i*b*s-f*o*s-i*j*J+c*o*J+f*j*I-c*b*I;w.n24=f*o*q-i*b*q+ -i*j*z-c*o*z-f*j*x+c*b*x;w.n31=u*x*s-o*y*s+o*q*G-j*x*G-u*q*I+j*y*I;w.n32=i*y*s-d*x*s-i*q*G+c*x*G+d*q*I-c*y*I;w.n33=f*o*s-i*u*s+i*j*G-c*o*G-d*j*I+c*u*I;w.n34=i*u*q-d*o*q-i*j*y+c*o*y+d*j*x-c*u*x;w.n41=b*y*s-u*z*s-b*q*G+j*z*G+u*q*J-j*y*J;w.n42=d*z*s-f*y*s+f*q*G-c*z*G-d*q*J+c*y*J;w.n43=f*u*s-d*b*s-f*j*G+c*b*G+d*j*J-c*u*J;w.n44=d*b*q-f*u*q+f*j*y-c*b*y-d*j*z+c*u*z;w.multiplyScalar(1/a.determinant());return w}; -THREE.Matrix4.makeInvert3x3=function(a){var c=a.m33,d=c.m,f=a.n33*a.n22-a.n32*a.n23,i=-a.n33*a.n21+a.n31*a.n23,j=a.n32*a.n21-a.n31*a.n22,u=-a.n33*a.n12+a.n32*a.n13,b=a.n33*a.n11-a.n31*a.n13,o=-a.n32*a.n11+a.n31*a.n12,q=a.n23*a.n12-a.n22*a.n13,y=-a.n23*a.n11+a.n21*a.n13,z=a.n22*a.n11-a.n21*a.n12;a=a.n11*f+a.n21*u+a.n31*q;if(a==0)throw"matrix not invertible";a=1/a;d[0]=a*f;d[1]=a*i;d[2]=a*j;d[3]=a*u;d[4]=a*b;d[5]=a*o;d[6]=a*q;d[7]=a*y;d[8]=a*z;return c}; -THREE.Matrix4.makeFrustum=function(a,c,d,f,i,j){var u,b,o;u=new THREE.Matrix4;b=2*i/(c-a);o=2*i/(f-d);a=(c+a)/(c-a);d=(f+d)/(f-d);f=-(j+i)/(j-i);i=-2*j*i/(j-i);u.n11=b;u.n12=0;u.n13=a;u.n14=0;u.n21=0;u.n22=o;u.n23=d;u.n24=0;u.n31=0;u.n32=0;u.n33=f;u.n34=i;u.n41=0;u.n42=0;u.n43=-1;u.n44=0;return u};THREE.Matrix4.makePerspective=function(a,c,d,f){var i;a=d*Math.tan(a*Math.PI/360);i=-a;return THREE.Matrix4.makeFrustum(i*c,a*c,i,a,d,f)}; -THREE.Matrix4.makeOrtho=function(a,c,d,f,i,j){var u,b,o,q;u=new THREE.Matrix4;b=c-a;o=d-f;q=j-i;a=(c+a)/b;d=(d+f)/o;i=(j+i)/q;u.n11=2/b;u.n12=0;u.n13=0;u.n14=-a;u.n21=0;u.n22=2/o;u.n23=0;u.n24=-d;u.n31=0;u.n32=0;u.n33=-2/q;u.n34=-i;u.n41=0;u.n42=0;u.n43=0;u.n44=1;return u};THREE.Matrix4.__tmpVec1=new THREE.Vector3;THREE.Matrix4.__tmpVec2=new THREE.Vector3;THREE.Matrix4.__tmpVec3=new THREE.Vector3; +THREE.Matrix4.makeInvert=function(a){var c=a.n11,d=a.n12,f=a.n13,k=a.n14,m=a.n21,r=a.n22,b=a.n23,n=a.n24,o=a.n31,B=a.n32,A=a.n33,x=a.n34,y=a.n41,w=a.n42,I=a.n43,K=a.n44,u=new THREE.Matrix4;u.n11=b*x*w-n*A*w+n*B*I-r*x*I-b*B*K+r*A*K;u.n12=k*A*w-f*x*w-k*B*I+d*x*I+f*B*K-d*A*K;u.n13=f*n*w-k*b*w+k*r*I-d*n*I-f*r*K+d*b*K;u.n14=k*b*B-f*n*B-k*r*A+d*n*A+f*r*x-d*b*x;u.n21=n*A*y-b*x*y-n*o*I+m*x*I+b*o*K-m*A*K;u.n22=f*x*y-k*A*y+k*o*I-c*x*I-f*o*K+c*A*K;u.n23=k*b*y-f*n*y-k*m*I+c*n*I+f*m*K-c*b*K;u.n24=f*n*o-k*b*o+ +k*m*A-c*n*A-f*m*x+c*b*x;u.n31=r*x*y-n*B*y+n*o*w-m*x*w-r*o*K+m*B*K;u.n32=k*B*y-d*x*y-k*o*w+c*x*w+d*o*K-c*B*K;u.n33=f*n*y-k*r*y+k*m*w-c*n*w-d*m*K+c*r*K;u.n34=k*r*o-d*n*o-k*m*B+c*n*B+d*m*x-c*r*x;u.n41=b*B*y-r*A*y-b*o*w+m*A*w+r*o*I-m*B*I;u.n42=d*A*y-f*B*y+f*o*w-c*A*w-d*o*I+c*B*I;u.n43=f*r*y-d*b*y-f*m*w+c*b*w+d*m*I-c*r*I;u.n44=d*b*o-f*r*o+f*m*B-c*b*B-d*m*A+c*r*A;u.multiplyScalar(1/a.determinant());return u}; +THREE.Matrix4.makeInvert3x3=function(a){var c=a.m33,d=c.m,f=a.n33*a.n22-a.n32*a.n23,k=-a.n33*a.n21+a.n31*a.n23,m=a.n32*a.n21-a.n31*a.n22,r=-a.n33*a.n12+a.n32*a.n13,b=a.n33*a.n11-a.n31*a.n13,n=-a.n32*a.n11+a.n31*a.n12,o=a.n23*a.n12-a.n22*a.n13,B=-a.n23*a.n11+a.n21*a.n13,A=a.n22*a.n11-a.n21*a.n12;a=a.n11*f+a.n21*r+a.n31*o;if(a==0)throw"matrix not invertible";a=1/a;d[0]=a*f;d[1]=a*k;d[2]=a*m;d[3]=a*r;d[4]=a*b;d[5]=a*n;d[6]=a*o;d[7]=a*B;d[8]=a*A;return c}; +THREE.Matrix4.makeFrustum=function(a,c,d,f,k,m){var r,b,n;r=new THREE.Matrix4;b=2*k/(c-a);n=2*k/(f-d);a=(c+a)/(c-a);d=(f+d)/(f-d);f=-(m+k)/(m-k);k=-2*m*k/(m-k);r.n11=b;r.n12=0;r.n13=a;r.n14=0;r.n21=0;r.n22=n;r.n23=d;r.n24=0;r.n31=0;r.n32=0;r.n33=f;r.n34=k;r.n41=0;r.n42=0;r.n43=-1;r.n44=0;return r};THREE.Matrix4.makePerspective=function(a,c,d,f){var k;a=d*Math.tan(a*Math.PI/360);k=-a;return THREE.Matrix4.makeFrustum(k*c,a*c,k,a,d,f)}; +THREE.Matrix4.makeOrtho=function(a,c,d,f,k,m){var r,b,n,o;r=new THREE.Matrix4;b=c-a;n=d-f;o=m-k;a=(c+a)/b;d=(d+f)/n;k=(m+k)/o;r.n11=2/b;r.n12=0;r.n13=0;r.n14=-a;r.n21=0;r.n22=2/n;r.n23=0;r.n24=-d;r.n31=0;r.n32=0;r.n33=-2/o;r.n34=-k;r.n41=0;r.n42=0;r.n43=0;r.n44=1;return r};THREE.Matrix4.__tmpVec1=new THREE.Vector3;THREE.Matrix4.__tmpVec2=new THREE.Vector3;THREE.Matrix4.__tmpVec3=new THREE.Vector3; THREE.Vertex=function(a,c){this.position=a||new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.normal=c||new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.normalScreen=new THREE.Vector3;this.tangent=new THREE.Vector4;this.__visible=true};THREE.Vertex.prototype={toString:function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}}; -THREE.Face3=function(a,c,d,f,i){this.a=a;this.b=c;this.c=d;this.centroid=new THREE.Vector3;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.materials=i instanceof Array?i:[i]};THREE.Face3.prototype={toString:function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}}; -THREE.Face4=function(a,c,d,f,i,j){this.a=a;this.b=c;this.c=d;this.d=f;this.centroid=new THREE.Vector3;this.normal=i instanceof THREE.Vector3?i:new THREE.Vector3;this.vertexNormals=i instanceof Array?i:[];this.materials=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,c){this.u=a||0;this.v=c||0}; +THREE.Face3=function(a,c,d,f,k){this.a=a;this.b=c;this.c=d;this.centroid=new THREE.Vector3;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.materials=k instanceof Array?k:[k]};THREE.Face3.prototype={toString:function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}}; +THREE.Face4=function(a,c,d,f,k,m){this.a=a;this.b=c;this.c=d;this.d=f;this.centroid=new THREE.Vector3;this.normal=k instanceof THREE.Vector3?k:new THREE.Vector3;this.vertexNormals=k instanceof Array?k:[];this.materials=m instanceof Array?m:[m]};THREE.Face4.prototype={toString:function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(a,c){this.u=a||0;this.v=c||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=[];this.uvs2=[];this.colors=[];this.boundingSphere=this.boundingBox=null;this.geometryChunks={};this.hasTangents=false}; THREE.Geometry.prototype={computeCentroids:function(){var a,c,d;a=0;for(c=this.faces.length;a0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y], +c;a++){d=this.faces[a];if(d instanceof THREE.Face3){d.vertexNormals[0].copy(f[d.a]);d.vertexNormals[1].copy(f[d.b]);d.vertexNormals[2].copy(f[d.c])}else if(d instanceof THREE.Face4){d.vertexNormals[0].copy(f[d.a]);d.vertexNormals[1].copy(f[d.b]);d.vertexNormals[2].copy(f[d.c]);d.vertexNormals[3].copy(f[d.d])}}},computeTangents:function(){function a(l,s,z,v,N,J,E){m=l.vertices[s].position;r=l.vertices[z].position;b=l.vertices[v].position;n=k[N];o=k[J];B=k[E];A=r.x-m.x;x=b.x-m.x;y=r.y-m.y;w=b.y-m.y; +I=r.z-m.z;K=b.z-m.z;u=o.u-n.u;S=B.u-n.u;F=o.v-n.v;P=B.v-n.v;e=1/(u*P-S*F);g.set((P*A-F*x)*e,(P*y-F*w)*e,(P*I-F*K)*e);p.set((u*x-S*A)*e,(u*w-S*y)*e,(u*K-S*I)*e);q[s].addSelf(g);q[z].addSelf(g);q[v].addSelf(g);h[s].addSelf(p);h[z].addSelf(p);h[v].addSelf(p)}var c,d,f,k,m,r,b,n,o,B,A,x,y,w,I,K,u,S,F,P,e,q=[],h=[],g=new THREE.Vector3,p=new THREE.Vector3,i=new THREE.Vector3,t=new THREE.Vector3,j=new THREE.Vector3;c=0;for(d=this.vertices.length;c0){this.boundingBox={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 c=1,d=this.vertices.length;cthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.z -this.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=this.boundingSphere===null?0:this.boundingSphere.radius,c=0,d=this.vertices.length;c65535){q[b].counter+=1;o=q[b].hash+"_"+q[b].counter;if(this.geometryChunks[o]==undefined)this.geometryChunks[o]={faces:[],materials:u,vertices:0}}this.geometryChunks[o].faces.push(f);this.geometryChunks[o].vertices+=j}},toString:function(){return"THREE.Geometry ( vertices: "+ +this.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=this.boundingSphere===null?0:this.boundingSphere.radius,c=0,d=this.vertices.length;c65535){o[b].counter+=1;n=o[b].hash+"_"+o[b].counter;if(this.geometryChunks[n]==undefined)this.geometryChunks[n]={faces:[],materials:r,vertices:0}}this.geometryChunks[n].faces.push(f);this.geometryChunks[n].vertices+=m}},toString:function(){return"THREE.Geometry ( vertices: "+ this.vertices+", faces: "+this.faces+", uvs: "+this.uvs+" )"}}; -THREE.Camera=function(a,c,d,f){this.fov=a;this.aspect=c;this.near=d;this.far=f;this.position=new THREE.Vector3;this.target={position:new THREE.Vector3};this.autoUpdateMatrix=true;this.projectionMatrix=null;this.matrix=new THREE.Matrix4;this.up=new THREE.Vector3(0,1,0);this.tmpVec=new THREE.Vector3;this.translateX=function(i){this.tmpVec.sub(this.target.position,this.position).normalize().multiplyScalar(i);this.tmpVec.crossSelf(this.up);this.position.addSelf(this.tmpVec);this.target.position.addSelf(this.tmpVec)}; -this.translateZ=function(i){this.tmpVec.sub(this.target.position,this.position).normalize().multiplyScalar(i);this.position.subSelf(this.tmpVec);this.target.position.subSelf(this.tmpVec)};this.updateMatrix=function(){this.matrix.lookAt(this.position,this.target.position,this.up)};this.updateProjectionMatrix=function(){this.projectionMatrix=THREE.Matrix4.makePerspective(this.fov,this.aspect,this.near,this.far)};this.updateProjectionMatrix()}; +THREE.Camera=function(a,c,d,f){this.fov=a;this.aspect=c;this.near=d;this.far=f;this.position=new THREE.Vector3;this.target={position:new THREE.Vector3};this.autoUpdateMatrix=true;this.projectionMatrix=null;this.matrix=new THREE.Matrix4;this.up=new THREE.Vector3(0,1,0);this.tmpVec=new THREE.Vector3;this.translateX=function(k){this.tmpVec.sub(this.target.position,this.position).normalize().multiplyScalar(k);this.tmpVec.crossSelf(this.up);this.position.addSelf(this.tmpVec);this.target.position.addSelf(this.tmpVec)}; +this.translateZ=function(k){this.tmpVec.sub(this.target.position,this.position).normalize().multiplyScalar(k);this.position.subSelf(this.tmpVec);this.target.position.subSelf(this.tmpVec)};this.updateMatrix=function(){this.matrix.lookAt(this.position,this.target.position,this.up)};this.updateProjectionMatrix=function(){this.projectionMatrix=THREE.Matrix4.makePerspective(this.fov,this.aspect,this.near,this.far)};this.updateProjectionMatrix()}; THREE.Camera.prototype={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,c){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.intensity=c||1};THREE.DirectionalLight.prototype=new THREE.Light; THREE.DirectionalLight.prototype.constructor=THREE.DirectionalLight;THREE.PointLight=function(a,c){THREE.Light.call(this,a);this.position=new THREE.Vector3;this.intensity=c||1};THREE.PointLight.prototype=new THREE.Light;THREE.PointLight.prototype.constructor=THREE.PointLight; THREE.Object3D=function(){this.id=THREE.Object3DCounter.value++;this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.scale=new THREE.Vector3(1,1,1);this.matrix=new THREE.Matrix4;this.rotationMatrix=new THREE.Matrix4;this.tmpMatrix=new THREE.Matrix4;this.screen=new THREE.Vector3;this.visible=this.autoUpdateMatrix=true}; @@ -96,115 +96,115 @@ THREE.MeshShaderMaterial.prototype={toString:function(){return"THREE.MeshShaderM THREE.ParticleBasicMaterial=function(a){this.id=THREE.ParticleBasicMaterialCounter.value++;this.color=new THREE.Color(16777215);this.opacity=1;this.map=null;this.size=1;this.blending=THREE.NormalBlending;this.depth_test=true;this.offset=new THREE.Vector2;this.vertex_colors=false;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.map!==undefined)this.map=a.map;if(a.size!==undefined)this.size=a.size;if(a.blending!==undefined)this.blending=a.blending; if(a.depth_test!==undefined)this.depth_test=a.depth_test;if(a.vertex_colors!==undefined)this.vertex_colors=a.vertex_colors}};THREE.ParticleBasicMaterial.prototype={toString:function(){return"THREE.ParticleBasicMaterial (
id: "+this.id+"
color: "+this.color+"
opacity: "+this.opacity+"
map: "+this.map+"
size: "+this.size+"
blending: "+this.blending+"
depth_test: "+this.depth_test+"
vertex_colors: "+this.vertex_colors+"
)"}};THREE.ParticleBasicMaterialCounter={value:0}; THREE.ParticleCircleMaterial=function(a){this.color=new THREE.Color(16777215);this.opacity=1;this.blending=THREE.NormalBlending;if(a){a.color!==undefined&&this.color.setHex(a.color);if(a.opacity!==undefined)this.opacity=a.opacity;if(a.blending!==undefined)this.blending=a.blending}};THREE.ParticleCircleMaterial.prototype={toString:function(){return"THREE.ParticleCircleMaterial (
color: "+this.color+"
opacity: "+this.opacity+"
blending: "+this.blending+"
)"}}; -THREE.ParticleDOMMaterial=function(a){this.domElement=a};THREE.ParticleDOMMaterial.prototype={toString:function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Texture=function(a,c,d,f,i,j){this.image=a;this.mapping=c!==undefined?c:new THREE.UVMapping;this.wrap_s=d!==undefined?d:THREE.ClampToEdgeWrapping;this.wrap_t=f!==undefined?f:THREE.ClampToEdgeWrapping;this.mag_filter=i!==undefined?i:THREE.LinearFilter;this.min_filter=j!==undefined?j:THREE.LinearMipMapLinearFilter}; +THREE.ParticleDOMMaterial=function(a){this.domElement=a};THREE.ParticleDOMMaterial.prototype={toString:function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Texture=function(a,c,d,f,k,m){this.image=a;this.mapping=c!==undefined?c:new THREE.UVMapping;this.wrap_s=d!==undefined?d:THREE.ClampToEdgeWrapping;this.wrap_t=f!==undefined?f:THREE.ClampToEdgeWrapping;this.mag_filter=k!==undefined?k:THREE.LinearFilter;this.min_filter=m!==undefined?m:THREE.LinearMipMapLinearFilter}; THREE.Texture.prototype={clone:function(){return new THREE.Texture(this.image,this.mapping,this.wrap_s,this.wrap_t,this.mag_filter,this.min_filter)},toString:function(){return"THREE.Texture (
image: "+this.image+"
wrap_s: "+this.wrap_s+"
wrap_t: "+this.wrap_t+"
mag_filter: "+this.mag_filter+"
min_filter: "+this.min_filter+"
)"}};THREE.MultiplyOperation=0;THREE.MixOperation=1;THREE.RepeatWrapping=0;THREE.ClampToEdgeWrapping=1;THREE.MirroredRepeatWrapping=2; THREE.NearestFilter=3;THREE.NearestMipMapNearestFilter=4;THREE.NearestMipMapLinearFilter=5;THREE.LinearFilter=6;THREE.LinearMipMapNearestFilter=7;THREE.LinearMipMapLinearFilter=8;THREE.ByteType=9;THREE.UnsignedByteType=10;THREE.ShortType=11;THREE.UnsignedShortType=12;THREE.IntType=13;THREE.UnsignedIntType=14;THREE.FloatType=15;THREE.AlphaFormat=16;THREE.RGBFormat=17;THREE.RGBAFormat=18;THREE.LuminanceFormat=19;THREE.LuminanceAlphaFormat=20; THREE.RenderTarget=function(a,c,d){this.width=a;this.height=c;d=d||{};this.wrap_s=d.wrap_s!==undefined?d.wrap_s:THREE.ClampToEdgeWrapping;this.wrap_t=d.wrap_t!==undefined?d.wrap_t:THREE.ClampToEdgeWrapping;this.mag_filter=d.mag_filter!==undefined?d.mag_filter:THREE.LinearFilter;this.min_filter=d.min_filter!==undefined?d.min_filter:THREE.LinearMipMapLinearFilter;this.format=d.format!==undefined?d.format:THREE.RGBFormat;this.type=d.type!==undefined?d.type:THREE.UnsignedByteType}; -var Uniforms={clone:function(a){var c,d,f,i={};for(c in a){i[c]={};for(d in a[c]){f=a[c][d];i[c][d]=f instanceof THREE.Color||f instanceof THREE.Vector3||f instanceof THREE.Texture?f.clone():f}}return i},merge:function(a){var c,d,f,i={};for(c=0;c=0&&n>=0&&r>=0&&v>=0)return true;else if(l<0&&n<0||r<0&&v<0)return false;else{if(l<0)m=Math.max(m,l/(l-n));else if(n<0)t=Math.min(t,l/(l-n));if(r<0)m=Math.max(m,r/(r-v));else if(v<0)t=Math.min(t,r/(r-v));if(tl&&D.z0&&I.z<1){x=G[s]=G[s]||new THREE.RenderableParticle;x.x=I.x/I.w;x.y=I.y/I.w;x.z=I.z;x.rotation=N.rotation.z;x.scale.x=N.scale.x*Math.abs(x.x-(I.x+k.projectionMatrix.n11)/(I.w+k.projectionMatrix.n14)); -x.scale.y=N.scale.y*Math.abs(x.y-(I.y+k.projectionMatrix.n22)/(I.w+k.projectionMatrix.n24));x.materials=N.materials;t.push(x);s++}}}}m&&t.sort(a);return t};this.unprojectVector=function(g,k){var m=THREE.Matrix4.makeInvert(k.matrix);m.multiplySelf(THREE.Matrix4.makeInvert(k.projectionMatrix));m.multiplyVector3(g);return g}}; -THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,d,f,i,j;this.domElement=document.createElement("div");this.setSize=function(u,b){d=u;f=b;i=d/2;j=f/2};this.render=function(u,b){var o,q,y,z,x,s,G,J;a=c.projectScene(u,b);o=0;for(q=a.length;o0){H.r+=ga.r*$;H.g+=ga.g*$;H.b+=ga.b*$}}else if($ instanceof THREE.PointLight){Y.sub($.position,V);Y.normalize();$=T.dot(Y)*ia;if($> -0){H.r+=ga.r*$;H.g+=ga.g*$;H.b+=ga.b*$}}}}function Ga(C,V,T){if(T.opacity!=0){a(T.opacity);c(T.blending);var H,Q,$,ga,ia,ja;if(T instanceof THREE.ParticleBasicMaterial){if(T.map&&T.map.image.loaded){ga=T.map.image;ia=ga.width>>1;ja=ga.height>>1;Q=V.scale.x*b;$=V.scale.y*o;T=Q*ia;H=$*ja;B.set(C.x-T,C.y-H,C.x+T,C.y+H);if(!P.instersects(B))return;q.save();q.translate(C.x,C.y);q.rotate(-V.rotation);q.scale(Q,-$);q.translate(-ia,-ja);q.drawImage(ga,0,0);q.restore()}q.beginPath();q.moveTo(C.x-10,C.y);q.lineTo(C.x+ -10,C.y);q.moveTo(C.x,C.y-10);q.lineTo(C.x,C.y+10);q.closePath();q.strokeStyle="rgb(255,255,0)";q.stroke()}else if(T instanceof THREE.ParticleCircleMaterial){if(S){X.r=ba.r+Z.r+aa.r;X.g=ba.g+Z.g+aa.g;X.b=ba.b+Z.b+aa.b;t.r=T.color.r*X.r;t.g=T.color.g*X.g;t.b=T.color.b*X.b;t.updateStyleString()}else t.__styleString=T.color.__styleString;T=V.scale.x*b;H=V.scale.y*o;B.set(C.x-T,C.y-H,C.x+T,C.y+H);if(P.instersects(B)){Q=t.__styleString;if(J!=Q)q.fillStyle=J=Q;q.save();q.translate(C.x,C.y);q.rotate(-V.rotation); -q.scale(T,H);q.beginPath();q.arc(0,0,1,0,ka,true);q.closePath();q.fill();q.restore()}}}}function Ha(C,V,T,H){if(H.opacity!=0){a(H.opacity);c(H.blending);q.beginPath();q.moveTo(C.positionScreen.x,C.positionScreen.y);q.lineTo(V.positionScreen.x,V.positionScreen.y);q.closePath();if(H instanceof THREE.LineBasicMaterial){t.__styleString=H.color.__styleString;C=H.linewidth;if(I!=C)q.lineWidth=I=C;C=t.__styleString;if(G!=C)q.strokeStyle=G=C;q.stroke();B.inflate(H.linewidth*2)}}}function ma(C,V,T,H,Q,$){if(Q.opacity!= -0){a(Q.opacity);c(Q.blending);e=C.positionScreen.x;p=C.positionScreen.y;h=V.positionScreen.x;g=V.positionScreen.y;k=T.positionScreen.x;m=T.positionScreen.y;q.beginPath();q.moveTo(e,p);q.lineTo(h,g);q.lineTo(k,m);q.lineTo(e,p);q.closePath();if(Q instanceof THREE.MeshBasicMaterial)if(Q.map)Q.map.image.loaded&&Q.map.mapping instanceof THREE.UVMapping&&za(e,p,h,g,k,m,Q.map.image,H.uvs[0].u,H.uvs[0].v,H.uvs[1].u,H.uvs[1].v,H.uvs[2].u,H.uvs[2].v);else if(Q.env_map){if(Q.env_map.image.loaded)if(Q.env_map.mapping instanceof -THREE.SphericalReflectionMapping){C=ca.matrix;Y.copy(H.vertexNormalsWorld[0]);L=(Y.x*C.n11+Y.y*C.n12+Y.z*C.n13)*0.5+0.5;N=-(Y.x*C.n21+Y.y*C.n22+Y.z*C.n23)*0.5+0.5;Y.copy(H.vertexNormalsWorld[1]);U=(Y.x*C.n11+Y.y*C.n12+Y.z*C.n13)*0.5+0.5;W=-(Y.x*C.n21+Y.y*C.n22+Y.z*C.n23)*0.5+0.5;Y.copy(H.vertexNormalsWorld[2]);M=(Y.x*C.n11+Y.y*C.n12+Y.z*C.n13)*0.5+0.5;E=-(Y.x*C.n21+Y.y*C.n22+Y.z*C.n23)*0.5+0.5;za(e,p,h,g,k,m,Q.env_map.image,L,N,U,W,M,E)}}else Q.wireframe?Da(Q.color.__styleString,Q.wireframe_linewidth): -Ea(Q.color.__styleString);else if(Q instanceof THREE.MeshLambertMaterial){if(Q.map&&!Q.wireframe){Q.map.mapping instanceof THREE.UVMapping&&za(e,p,h,g,k,m,Q.map.image,H.uvs[0].u,H.uvs[0].v,H.uvs[1].u,H.uvs[1].v,H.uvs[2].u,H.uvs[2].v);c(THREE.SubtractiveBlending)}if(S)if(!Q.wireframe&&Q.shading==THREE.SmoothShading&&H.vertexNormalsWorld.length==3){l.r=n.r=r.r=ba.r;l.g=n.g=r.g=ba.g;l.b=n.b=r.b=ba.b;xa($,H.v1.positionWorld,H.vertexNormalsWorld[0],l);xa($,H.v2.positionWorld,H.vertexNormalsWorld[1],n); -xa($,H.v3.positionWorld,H.vertexNormalsWorld[2],r);v.r=(n.r+r.r)*0.5;v.g=(n.g+r.g)*0.5;v.b=(n.b+r.b)*0.5;K=Ma(l,n,r,v);za(e,p,h,g,k,m,K,0,0,1,0,0,1)}else{X.r=ba.r;X.g=ba.g;X.b=ba.b;xa($,H.centroidWorld,H.normalWorld,X);t.r=Q.color.r*X.r;t.g=Q.color.g*X.g;t.b=Q.color.b*X.b;t.updateStyleString();Q.wireframe?Da(t.__styleString,Q.wireframe_linewidth):Ea(t.__styleString)}else Q.wireframe?Da(Q.color.__styleString,Q.wireframe_linewidth):Ea(Q.color.__styleString)}else if(Q instanceof THREE.MeshDepthMaterial){A= -ca.near;D=ca.far;l.r=l.g=l.b=1-Ia(C.positionScreen.z,A,D);n.r=n.g=n.b=1-Ia(V.positionScreen.z,A,D);r.r=r.g=r.b=1-Ia(T.positionScreen.z,A,D);v.r=(n.r+r.r)*0.5;v.g=(n.g+r.g)*0.5;v.b=(n.b+r.b)*0.5;K=Ma(l,n,r,v);za(e,p,h,g,k,m,K,0,0,1,0,0,1)}else if(Q instanceof THREE.MeshNormalMaterial){t.r=Ja(H.normalWorld.x);t.g=Ja(H.normalWorld.y);t.b=Ja(H.normalWorld.z);t.updateStyleString();Q.wireframe?Da(t.__styleString,Q.wireframe_linewidth):Ea(t.__styleString)}}}function Da(C,V){if(G!=C)q.strokeStyle=G=C;if(I!= -V)q.lineWidth=I=V;q.stroke();B.inflate(V*2)}function Ea(C){if(J!=C)q.fillStyle=J=C;q.fill()}function za(C,V,T,H,Q,$,ga,ia,ja,ra,na,sa,Aa){var pa,ta;pa=ga.width-1;ta=ga.height-1;ia*=pa;ja*=ta;ra*=pa;na*=ta;sa*=pa;Aa*=ta;T-=C;H-=V;Q-=C;$-=V;ra-=ia;na-=ja;sa-=ia;Aa-=ja;pa=ra*Aa-sa*na;if(pa!=0){ta=1/pa;pa=(Aa*T-na*Q)*ta;na=(Aa*H-na*$)*ta;T=(ra*Q-sa*T)*ta;H=(ra*$-sa*H)*ta;C=C-pa*ia-T*ja;V=V-na*ia-H*ja;q.save();q.transform(pa,na,T,H,C,V);q.clip();q.drawImage(ga,0,0);q.restore()}}function Ma(C,V,T,H){var Q= -~~(C.r*255),$=~~(C.g*255);C=~~(C.b*255);var ga=~~(V.r*255),ia=~~(V.g*255);V=~~(V.b*255);var ja=~~(T.r*255),ra=~~(T.g*255);T=~~(T.b*255);var na=~~(H.r*255),sa=~~(H.g*255);H=~~(H.b*255);ha[0]=Q<0?0:Q>255?255:Q;ha[1]=$<0?0:$>255?255:$;ha[2]=C<0?0:C>255?255:C;ha[4]=ga<0?0:ga>255?255:ga;ha[5]=ia<0?0:ia>255?255:ia;ha[6]=V<0?0:V>255?255:V;ha[8]=ja<0?0:ja>255?255:ja;ha[9]=ra<0?0:ra>255?255:ra;ha[10]=T<0?0:T>255?255:T;ha[12]=na<0?0:na>255?255:na;ha[13]=sa<0?0:sa>255?255:sa;ha[14]=H<0?0:H>255?255:H;fa.putImageData(wa, -0,0);va.drawImage(ua,0,0);return la}function Ia(C,V,T){C=(C-V)/(T-V);return C*C*(3-2*C)}function Ja(C){C=(C+1)*0.5;return C<0?0:C>1?1:C}function Ka(C,V){var T=V.x-C.x,H=V.y-C.y,Q=1/Math.sqrt(T*T+H*H);T*=Q;H*=Q;V.x+=T;V.y+=H;C.x-=T;C.y-=H}var Fa,Na,ea,qa,ya,La,Oa,Ba;this.autoClear?this.clear():q.setTransform(1,0,0,-1,b,o);d=f.projectScene(da,ca,this.sortElements);q.fillStyle="rgba( 0, 255, 255, 0.5 )";q.fillRect(P.getX(),P.getY(),P.getWidth(),P.getHeight());(S=da.lights.length>0)&&Ca(da);Fa=0;for(Na= -d.length;Fa0){U.r+=E.color.r*P;U.g+=E.color.g*P;U.b+=E.color.b*P}}else if(E instanceof THREE.PointLight){m.sub(E.position,N.centroidWorld);m.normalize();P=N.normalWorld.dot(m)*E.intensity;if(P>0){U.r+=E.color.r*P;U.g+=E.color.g*P;U.b+=E.color.b*P}}}}function c(L,N,U,W,M,E){r=f(v++);r.setAttribute("d","M "+L.positionScreen.x+ -" "+L.positionScreen.y+" L "+N.positionScreen.x+" "+N.positionScreen.y+" L "+U.positionScreen.x+","+U.positionScreen.y+"z");if(M instanceof THREE.MeshBasicMaterial)F.__styleString=M.color.__styleString;else if(M instanceof THREE.MeshLambertMaterial)if(R){e.r=p.r;e.g=p.g;e.b=p.b;a(E,W,e);F.r=M.color.r*e.r;F.g=M.color.g*e.g;F.b=M.color.b*e.b;F.updateStyleString()}else F.__styleString=M.color.__styleString;else if(M instanceof THREE.MeshDepthMaterial){k=1-M.__2near/(M.__farPlusNear-W.z*M.__farMinusNear); -F.setRGB(k,k,k)}else M instanceof THREE.MeshNormalMaterial&&F.setRGB(i(W.normalWorld.x),i(W.normalWorld.y),i(W.normalWorld.z));M.wireframe?r.setAttribute("style","fill: none; stroke: "+F.__styleString+"; stroke-width: "+M.wireframe_linewidth+"; stroke-opacity: "+M.opacity+"; stroke-linecap: "+M.wireframe_linecap+"; stroke-linejoin: "+M.wireframe_linejoin):r.setAttribute("style","fill: "+F.__styleString+"; fill-opacity: "+M.opacity);b.appendChild(r)}function d(L,N,U,W,M,E,P){r=f(v++);r.setAttribute("d", -"M "+L.positionScreen.x+" "+L.positionScreen.y+" L "+N.positionScreen.x+" "+N.positionScreen.y+" L "+U.positionScreen.x+","+U.positionScreen.y+" L "+W.positionScreen.x+","+W.positionScreen.y+"z");if(E instanceof THREE.MeshBasicMaterial)F.__styleString=E.color.__styleString;else if(E instanceof THREE.MeshLambertMaterial)if(R){e.r=p.r;e.g=p.g;e.b=p.b;a(P,M,e);F.r=E.color.r*e.r;F.g=E.color.g*e.g;F.b=E.color.b*e.b;F.updateStyleString()}else F.__styleString=E.color.__styleString;else if(E instanceof THREE.MeshDepthMaterial){k= -1-E.__2near/(E.__farPlusNear-M.z*E.__farMinusNear);F.setRGB(k,k,k)}else E instanceof THREE.MeshNormalMaterial&&F.setRGB(i(M.normalWorld.x),i(M.normalWorld.y),i(M.normalWorld.z));E.wireframe?r.setAttribute("style","fill: none; stroke: "+F.__styleString+"; stroke-width: "+E.wireframe_linewidth+"; stroke-opacity: "+E.opacity+"; stroke-linecap: "+E.wireframe_linecap+"; stroke-linejoin: "+E.wireframe_linejoin):r.setAttribute("style","fill: "+F.__styleString+"; fill-opacity: "+E.opacity);b.appendChild(r)} -function f(L){if(t[L]==null){t[L]=document.createElementNS("http://www.w3.org/2000/svg","path");K==0&&t[L].setAttribute("shape-rendering","crispEdges");return t[L]}return t[L]}function i(L){return L<0?Math.min((1+L)*0.5,0.5):0.5+Math.min(L*0.5,0.5)}var j=null,u=new THREE.Projector,b=document.createElementNS("http://www.w3.org/2000/svg","svg"),o,q,y,z,x,s,G,J,I=new THREE.Rectangle,w=new THREE.Rectangle,R=false,F=new THREE.Color(16777215),e=new THREE.Color(16777215),p=new THREE.Color(0),h=new THREE.Color(0), -g=new THREE.Color(0),k,m=new THREE.Vector3,t=[],l=[],n=[],r,v,A,D,K=1;this.domElement=b;this.sortElements=this.sortObjects=this.autoClear=true;this.setQuality=function(L){switch(L){case "high":K=1;break;case "low":K=0}};this.setSize=function(L,N){o=L;q=N;y=o/2;z=q/2;b.setAttribute("viewBox",-y+" "+-z+" "+o+" "+q);b.setAttribute("width",o);b.setAttribute("height",q);I.set(-y,-z,y,z)};this.clear=function(){for(;b.childNodes.length>0;)b.removeChild(b.childNodes[0])};this.render=function(L,N){var U,W, -M,E,P,O,B,S;this.autoClear&&this.clear();j=u.projectScene(L,N,this.sortElements);D=A=v=0;if(R=L.lights.length>0){B=L.lights;p.setRGB(0,0,0);h.setRGB(0,0,0);g.setRGB(0,0,0);U=0;for(W=B.length;U=0&&j>=0&&l>=0&&s>=0)return true;else if(t<0&&j<0||l<0&&s<0)return false;else{if(t<0)p=Math.max(p,t/(t-j));else if(j<0)i=Math.min(i,t/(t-j));if(l<0)p=Math.max(p,l/(l-s));else if(s<0)i=Math.min(i,l/(l-s));if(it&&v.z0&&K.z<1){x=w[y]=w[y]||new THREE.RenderableParticle;x.x=K.x/K.w;x.y=K.y/K.w;x.z=K.z;x.rotation=E.rotation.z;x.scale.x=E.scale.x*Math.abs(x.x-(K.x+g.projectionMatrix.n11)/(K.w+g.projectionMatrix.n14)); +x.scale.y=E.scale.y*Math.abs(x.y-(K.y+g.projectionMatrix.n22)/(K.w+g.projectionMatrix.n24));x.materials=E.materials;i.push(x);y++}}}}p&&i.sort(a);return i};this.unprojectVector=function(h,g){var p=THREE.Matrix4.makeInvert(g.matrix);p.multiplySelf(THREE.Matrix4.makeInvert(g.projectionMatrix));p.multiplyVector3(h);return h}}; +THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,d,f,k,m;this.domElement=document.createElement("div");this.setSize=function(r,b){d=r;f=b;k=d/2;m=f/2};this.render=function(r,b){var n,o,B,A,x,y,w,I;a=c.projectScene(r,b);n=0;for(o=a.length;n0){G.r+=fa.r*$;G.g+=fa.g*$;G.b+=fa.b*$}}else if($ instanceof THREE.PointLight){Z.sub($.position,V);Z.normalize();$=T.dot(Z)*ja;if($> +0){G.r+=fa.r*$;G.g+=fa.g*$;G.b+=fa.b*$}}}}function Ga(D,V,T){if(T.opacity!=0){a(T.opacity);c(T.blending);var G,R,$,fa,ja,la;if(T instanceof THREE.ParticleBasicMaterial){if(T.map&&T.map.image.loaded){fa=T.map.image;ja=fa.width>>1;la=fa.height>>1;R=V.scale.x*b;$=V.scale.y*n;T=R*ja;G=$*la;C.set(D.x-T,D.y-G,D.x+T,D.y+G);if(!L.instersects(C))return;o.save();o.translate(D.x,D.y);o.rotate(-V.rotation);o.scale(R,-$);o.translate(-ja,-la);o.drawImage(fa,0,0);o.restore()}o.beginPath();o.moveTo(D.x-10,D.y);o.lineTo(D.x+ +10,D.y);o.moveTo(D.x,D.y-10);o.lineTo(D.x,D.y+10);o.closePath();o.strokeStyle="rgb(255,255,0)";o.stroke()}else if(T instanceof THREE.ParticleCircleMaterial){if(M){W.r=ga.r+da.r+Y.r;W.g=ga.g+da.g+Y.g;W.b=ga.b+da.b+Y.b;i.r=T.color.r*W.r;i.g=T.color.g*W.g;i.b=T.color.b*W.b;i.updateStyleString()}else i.__styleString=T.color.__styleString;T=V.scale.x*b;G=V.scale.y*n;C.set(D.x-T,D.y-G,D.x+T,D.y+G);if(L.instersects(C)){R=i.__styleString;if(I!=R)o.fillStyle=I=R;o.save();o.translate(D.x,D.y);o.rotate(-V.rotation); +o.scale(T,G);o.beginPath();o.arc(0,0,1,0,ba,true);o.closePath();o.fill();o.restore()}}}}function Ha(D,V,T,G){if(G.opacity!=0){a(G.opacity);c(G.blending);o.beginPath();o.moveTo(D.positionScreen.x,D.positionScreen.y);o.lineTo(V.positionScreen.x,V.positionScreen.y);o.closePath();if(G instanceof THREE.LineBasicMaterial){i.__styleString=G.color.__styleString;D=G.linewidth;if(K!=D)o.lineWidth=K=D;D=i.__styleString;if(w!=D)o.strokeStyle=w=D;o.stroke();C.inflate(G.linewidth*2)}}}function Da(D,V,T,G,R,$){if(R.opacity!= +0){a(R.opacity);c(R.blending);P=D.positionScreen.x;e=D.positionScreen.y;q=V.positionScreen.x;h=V.positionScreen.y;g=T.positionScreen.x;p=T.positionScreen.y;o.beginPath();o.moveTo(P,e);o.lineTo(q,h);o.lineTo(g,p);o.lineTo(P,e);o.closePath();if(R instanceof THREE.MeshBasicMaterial)if(R.map)R.map.image.loaded&&R.map.mapping instanceof THREE.UVMapping&&Aa(P,e,q,h,g,p,R.map.image,G.uvs[0].u,G.uvs[0].v,G.uvs[1].u,G.uvs[1].v,G.uvs[2].u,G.uvs[2].v);else if(R.env_map){if(R.env_map.image.loaded)if(R.env_map.mapping instanceof +THREE.SphericalReflectionMapping){D=na.matrix;Z.copy(G.vertexNormalsWorld[0]);J=(Z.x*D.n11+Z.y*D.n12+Z.z*D.n13)*0.5+0.5;E=-(Z.x*D.n21+Z.y*D.n22+Z.z*D.n23)*0.5+0.5;Z.copy(G.vertexNormalsWorld[1]);U=(Z.x*D.n11+Z.y*D.n12+Z.z*D.n13)*0.5+0.5;X=-(Z.x*D.n21+Z.y*D.n22+Z.z*D.n23)*0.5+0.5;Z.copy(G.vertexNormalsWorld[2]);O=(Z.x*D.n11+Z.y*D.n12+Z.z*D.n13)*0.5+0.5;H=-(Z.x*D.n21+Z.y*D.n22+Z.z*D.n23)*0.5+0.5;Aa(P,e,q,h,g,p,R.env_map.image,J,E,U,X,O,H)}}else R.wireframe?ma(R.color.__styleString,R.wireframe_linewidth): +Ea(R.color.__styleString);else if(R instanceof THREE.MeshLambertMaterial){if(R.map&&!R.wireframe){R.map.mapping instanceof THREE.UVMapping&&Aa(P,e,q,h,g,p,R.map.image,G.uvs[0].u,G.uvs[0].v,G.uvs[1].u,G.uvs[1].v,G.uvs[2].u,G.uvs[2].v);c(THREE.SubtractiveBlending)}if(M)if(!R.wireframe&&R.shading==THREE.SmoothShading&&G.vertexNormalsWorld.length==3){t.r=j.r=l.r=ga.r;t.g=j.g=l.g=ga.g;t.b=j.b=l.b=ga.b;ya($,G.v1.positionWorld,G.vertexNormalsWorld[0],t);ya($,G.v2.positionWorld,G.vertexNormalsWorld[1],j); +ya($,G.v3.positionWorld,G.vertexNormalsWorld[2],l);s.r=(j.r+l.r)*0.5;s.g=(j.g+l.g)*0.5;s.b=(j.b+l.b)*0.5;N=Ma(t,j,l,s);Aa(P,e,q,h,g,p,N,0,0,1,0,0,1)}else{W.r=ga.r;W.g=ga.g;W.b=ga.b;ya($,G.centroidWorld,G.normalWorld,W);i.r=R.color.r*W.r;i.g=R.color.g*W.g;i.b=R.color.b*W.b;i.updateStyleString();R.wireframe?ma(i.__styleString,R.wireframe_linewidth):Ea(i.__styleString)}else R.wireframe?ma(R.color.__styleString,R.wireframe_linewidth):Ea(R.color.__styleString)}else if(R instanceof THREE.MeshDepthMaterial){z= +na.near;v=na.far;t.r=t.g=t.b=1-Ia(D.positionScreen.z,z,v);j.r=j.g=j.b=1-Ia(V.positionScreen.z,z,v);l.r=l.g=l.b=1-Ia(T.positionScreen.z,z,v);s.r=(j.r+l.r)*0.5;s.g=(j.g+l.g)*0.5;s.b=(j.b+l.b)*0.5;N=Ma(t,j,l,s);Aa(P,e,q,h,g,p,N,0,0,1,0,0,1)}else if(R instanceof THREE.MeshNormalMaterial){i.r=Ja(G.normalWorld.x);i.g=Ja(G.normalWorld.y);i.b=Ja(G.normalWorld.z);i.updateStyleString();R.wireframe?ma(i.__styleString,R.wireframe_linewidth):Ea(i.__styleString)}}}function ma(D,V){if(w!=D)o.strokeStyle=w=D;if(K!= +V)o.lineWidth=K=V;o.stroke();C.inflate(V*2)}function Ea(D){if(I!=D)o.fillStyle=I=D;o.fill()}function Aa(D,V,T,G,R,$,fa,ja,la,ua,oa,va,Ba){var ra,wa;ra=fa.width-1;wa=fa.height-1;ja*=ra;la*=wa;ua*=ra;oa*=wa;va*=ra;Ba*=wa;T-=D;G-=V;R-=D;$-=V;ua-=ja;oa-=la;va-=ja;Ba-=la;ra=ua*Ba-va*oa;if(ra!=0){wa=1/ra;ra=(Ba*T-oa*R)*wa;oa=(Ba*G-oa*$)*wa;T=(ua*R-va*T)*wa;G=(ua*$-va*G)*wa;D=D-ra*ja-T*la;V=V-oa*ja-G*la;o.save();o.transform(ra,oa,T,G,D,V);o.clip();o.drawImage(fa,0,0);o.restore()}}function Ma(D,V,T,G){var R= +~~(D.r*255),$=~~(D.g*255);D=~~(D.b*255);var fa=~~(V.r*255),ja=~~(V.g*255);V=~~(V.b*255);var la=~~(T.r*255),ua=~~(T.g*255);T=~~(T.b*255);var oa=~~(G.r*255),va=~~(G.g*255);G=~~(G.b*255);ia[0]=R<0?0:R>255?255:R;ia[1]=$<0?0:$>255?255:$;ia[2]=D<0?0:D>255?255:D;ia[4]=fa<0?0:fa>255?255:fa;ia[5]=ja<0?0:ja>255?255:ja;ia[6]=V<0?0:V>255?255:V;ia[8]=la<0?0:la>255?255:la;ia[9]=ua<0?0:ua>255?255:ua;ia[10]=T<0?0:T>255?255:T;ia[12]=oa<0?0:oa>255?255:oa;ia[13]=va<0?0:va>255?255:va;ia[14]=G<0?0:G>255?255:G;xa.putImageData(ha, +0,0);pa.drawImage(ea,0,0);return ta}function Ia(D,V,T){D=(D-V)/(T-V);return D*D*(3-2*D)}function Ja(D){D=(D+1)*0.5;return D<0?0:D>1?1:D}function Ka(D,V){var T=V.x-D.x,G=V.y-D.y,R=1/Math.sqrt(T*T+G*G);T*=R;G*=R;V.x+=T;V.y+=G;D.x-=T;D.y-=G}var Fa,Na,ca,sa,za,La,Oa,Ca;this.autoClear?this.clear():o.setTransform(1,0,0,-1,b,n);d=f.projectScene(aa,na,this.sortElements);o.fillStyle="rgba( 0, 255, 255, 0.5 )";o.fillRect(L.getX(),L.getY(),L.getWidth(),L.getHeight());(M=aa.lights.length>0)&&ka(aa);Fa=0;for(Na= +d.length;Fa0){U.r+=H.color.r*L;U.g+=H.color.g*L;U.b+=H.color.b*L}}else if(H instanceof THREE.PointLight){p.sub(H.position,E.centroidWorld);p.normalize();L=E.normalWorld.dot(p)*H.intensity;if(L>0){U.r+=H.color.r*L;U.g+=H.color.g*L;U.b+=H.color.b*L}}}}function c(J,E,U,X,O,H){l=f(s++);l.setAttribute("d","M "+J.positionScreen.x+ +" "+J.positionScreen.y+" L "+E.positionScreen.x+" "+E.positionScreen.y+" L "+U.positionScreen.x+","+U.positionScreen.y+"z");if(O instanceof THREE.MeshBasicMaterial)F.__styleString=O.color.__styleString;else if(O instanceof THREE.MeshLambertMaterial)if(S){P.r=e.r;P.g=e.g;P.b=e.b;a(H,X,P);F.r=O.color.r*P.r;F.g=O.color.g*P.g;F.b=O.color.b*P.b;F.updateStyleString()}else F.__styleString=O.color.__styleString;else if(O instanceof THREE.MeshDepthMaterial){g=1-O.__2near/(O.__farPlusNear-X.z*O.__farMinusNear); +F.setRGB(g,g,g)}else O instanceof THREE.MeshNormalMaterial&&F.setRGB(k(X.normalWorld.x),k(X.normalWorld.y),k(X.normalWorld.z));O.wireframe?l.setAttribute("style","fill: none; stroke: "+F.__styleString+"; stroke-width: "+O.wireframe_linewidth+"; stroke-opacity: "+O.opacity+"; stroke-linecap: "+O.wireframe_linecap+"; stroke-linejoin: "+O.wireframe_linejoin):l.setAttribute("style","fill: "+F.__styleString+"; fill-opacity: "+O.opacity);b.appendChild(l)}function d(J,E,U,X,O,H,L){l=f(s++);l.setAttribute("d", +"M "+J.positionScreen.x+" "+J.positionScreen.y+" L "+E.positionScreen.x+" "+E.positionScreen.y+" L "+U.positionScreen.x+","+U.positionScreen.y+" L "+X.positionScreen.x+","+X.positionScreen.y+"z");if(H instanceof THREE.MeshBasicMaterial)F.__styleString=H.color.__styleString;else if(H instanceof THREE.MeshLambertMaterial)if(S){P.r=e.r;P.g=e.g;P.b=e.b;a(L,O,P);F.r=H.color.r*P.r;F.g=H.color.g*P.g;F.b=H.color.b*P.b;F.updateStyleString()}else F.__styleString=H.color.__styleString;else if(H instanceof THREE.MeshDepthMaterial){g= +1-H.__2near/(H.__farPlusNear-O.z*H.__farMinusNear);F.setRGB(g,g,g)}else H instanceof THREE.MeshNormalMaterial&&F.setRGB(k(O.normalWorld.x),k(O.normalWorld.y),k(O.normalWorld.z));H.wireframe?l.setAttribute("style","fill: none; stroke: "+F.__styleString+"; stroke-width: "+H.wireframe_linewidth+"; stroke-opacity: "+H.opacity+"; stroke-linecap: "+H.wireframe_linecap+"; stroke-linejoin: "+H.wireframe_linejoin):l.setAttribute("style","fill: "+F.__styleString+"; fill-opacity: "+H.opacity);b.appendChild(l)} +function f(J){if(i[J]==null){i[J]=document.createElementNS("http://www.w3.org/2000/svg","path");N==0&&i[J].setAttribute("shape-rendering","crispEdges");return i[J]}return i[J]}function k(J){return J<0?Math.min((1+J)*0.5,0.5):0.5+Math.min(J*0.5,0.5)}var m=null,r=new THREE.Projector,b=document.createElementNS("http://www.w3.org/2000/svg","svg"),n,o,B,A,x,y,w,I,K=new THREE.Rectangle,u=new THREE.Rectangle,S=false,F=new THREE.Color(16777215),P=new THREE.Color(16777215),e=new THREE.Color(0),q=new THREE.Color(0), +h=new THREE.Color(0),g,p=new THREE.Vector3,i=[],t=[],j=[],l,s,z,v,N=1;this.domElement=b;this.sortElements=this.sortObjects=this.autoClear=true;this.setQuality=function(J){switch(J){case "high":N=1;break;case "low":N=0}};this.setSize=function(J,E){n=J;o=E;B=n/2;A=o/2;b.setAttribute("viewBox",-B+" "+-A+" "+n+" "+o);b.setAttribute("width",n);b.setAttribute("height",o);K.set(-B,-A,B,A)};this.clear=function(){for(;b.childNodes.length>0;)b.removeChild(b.childNodes[0])};this.render=function(J,E){var U,X, +O,H,L,Q,C,M;this.autoClear&&this.clear();m=r.projectScene(J,E,this.sortElements);v=z=s=0;if(S=J.lights.length>0){C=J.lights;e.setRGB(0,0,0);q.setRGB(0,0,0);h.setRGB(0,0,0);U=0;for(X=C.length;U0){b.bindBuffer(b.ARRAY_BUFFER,e.__webGLUVBuffer);b.bufferData(b.ARRAY_BUFFER,S,h)}if(la&&U>0){b.bindBuffer(b.ARRAY_BUFFER,e.__webGLUV2Buffer);b.bufferData(b.ARRAY_BUFFER,X,h)}if(ha){b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,e.__webGLFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER, -ka,h);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,e.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,Y,h)}};this.setLineBuffers=function(e,p){var h,g,k,m=e.vertices,t=e.colors,l=m.length,n=t.length,r=e.__vertexArray,v=e.__colorArray,A=e.__dirtyColors;if(e.__dirtyVertices){for(h=0;h0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+m.maxDirLights,"#define MAX_POINT_LIGHTS "+m.maxPointLights,m.map?"#define USE_MAP":"",m.env_map?"#define USE_ENVMAP": -"",m.light_map?"#define USE_LIGHTMAP":"",m.vertex_colors?"#define USE_COLOR":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\n"].join("\n");b.attachShader(h,i("fragment",k+n));b.attachShader(h,i("vertex",m+p));b.linkProgram(h);b.getProgramParameter(h,b.LINK_STATUS)|| -alert("Could not initialise shaders\nVALIDATE_STATUS: "+b.getProgramParameter(h,b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");h.uniforms={};h.attributes={};e.program=h;h=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition"];for(g in e.uniforms)h.push(g);g=e.program;n=0;for(p=h.length;n=0){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLColorBuffer);b.vertexAttribPointer(e.color,3,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.color)}if(e.normal>=0){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLNormalBuffer);b.vertexAttribPointer(e.normal,3,b.FLOAT, -false,0,0);b.enableVertexAttribArray(e.normal)}if(e.tangent>=0){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLTangentBuffer);b.vertexAttribPointer(e.tangent,4,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.tangent)}if(e.uv>=0)if(k.__webGLUVBuffer){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLUVBuffer);b.vertexAttribPointer(e.uv,2,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.uv)}else b.disableVertexAttribArray(e.uv);if(e.uv2>=0)if(k.__webGLUV2Buffer){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLUV2Buffer);b.vertexAttribPointer(e.uv2, -2,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.uv2)}else b.disableVertexAttribArray(e.uv2);if(m instanceof THREE.Mesh)if(g.wireframe){b.lineWidth(g.wireframe_linewidth);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,k.__webGLLineBuffer);b.drawElements(b.LINES,k.__webGLLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,k.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,k.__webGLFaceCount,b.UNSIGNED_SHORT,0)}else if(m instanceof THREE.Line){m=m.type==THREE.LineStrip?b.LINE_STRIP:b.LINES;b.lineWidth(g.linewidth); -b.drawArrays(m,0,k.__webGLLineCount)}else m instanceof THREE.ParticleSystem&&b.drawArrays(b.POINTS,0,k.__webGLParticleCount)};this.renderPass=function(e,p,h,g,k,m,t){var l,n,r,v,A;r=0;for(v=g.materials.length;r=0;h--){g=e.__webGLObjects[h].object; -p==g&&e.__webGLObjects.splice(h,1)}};this.setupMatrices=function(e,p){e._modelViewMatrix.multiplyToArray(p.matrix,e.matrix,e._modelViewMatrixArray);e._normalMatrix=THREE.Matrix4.makeInvert3x3(e._modelViewMatrix).transposeIntoArray(e._normalMatrixArray)};this.setDepthTest=function(e){e?b.enable(b.DEPTH_TEST):b.disable(b.DEPTH_TEST)};this.setFaceCulling=function(e,p){if(e){!p||p=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);if(e=="back")b.cullFace(b.BACK);else e=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK); -b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)};this.supportsVertexTextures=function(){return b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0}}; +case THREE.UnsignedByteType:return b.UNSIGNED_BYTE;case THREE.ShortType:return b.SHORT;case THREE.UnsignedShortType:return b.UNSIGNED_SHORT;case THREE.IntType:return b.INT;case THREE.UnsignedShortType:return b.UNSIGNED_INT;case THREE.FloatType:return b.FLOAT;case THREE.AlphaFormat:return b.ALPHA;case THREE.RGBFormat:return b.RGB;case THREE.RGBAFormat:return b.RGBA;case THREE.LuminanceFormat:return b.LUMINANCE;case THREE.LuminanceAlphaFormat:return b.LUMINANCE_ALPHA}return 0}var r=document.createElement("canvas"), +b,n=null,o=null,B=null,A=null,x=null,y=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],w=new THREE.Matrix4,I=new Float32Array(16),K=new Float32Array(16),u=new THREE.Vector4,S=true,F=new THREE.Color(0),P=0;if(a){if(a.antialias!==undefined)S=a.antialias;a.clearColor!==undefined&&F.setHex(a.clearColor);if(a.clearAlpha!==undefined)P=a.clearAlpha}this.domElement=r;this.autoClear=true;(function(e,q,h){try{b=r.getContext("experimental-webgl", +{antialias:e})}catch(g){console.log(g)}if(!b){alert("WebGL not supported");throw"cannot create webgl context";}b.clearColor(0,0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA);b.clearColor(q.r,q.g,q.b,h);_cullEnabled=true})(S,F,P);this.context=b;this.lights={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[]}};this.setSize= +function(e,q){r.width=e;r.height=q;b.viewport(0,0,r.width,r.height)};this.setClearColorHex=function(e,q){var h=new THREE.Color(e);b.clearColor(h.r,h.g,h.b,q)};this.setClearColor=function(e,q){b.clearColor(e.r,e.g,e.b,q)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|b.DEPTH_BUFFER_BIT)};this.setupLights=function(e,q){var h,g,p,i=0,t=0,j=0,l,s,z,v=this.lights,N=v.directional.colors,J=v.directional.positions,E=v.point.colors,U=v.point.positions,X=0,O=0;h=p=p=0;for(g=q.length;h0){b.bindBuffer(b.ARRAY_BUFFER,e.__webGLUVBuffer);b.bufferData(b.ARRAY_BUFFER,W,h)}if(pa&&X>0){b.bindBuffer(b.ARRAY_BUFFER,e.__webGLUV2Buffer); +b.bufferData(b.ARRAY_BUFFER,ga,h)}if(ta){b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,e.__webGLFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,Z,h);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,e.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,ea,h)}};this.setLineBuffers=function(e,q){var h,g,p,i=e.vertices,t=e.colors,j=i.length,l=t.length,s=e.__vertexArray,z=e.__colorArray,v=e.__dirtyColors;if(e.__dirtyVertices){for(h=0;h0?"#define VERTEX_TEXTURES": +"","#define MAX_DIR_LIGHTS "+i.maxDirLights,"#define MAX_POINT_LIGHTS "+i.maxPointLights,i.map?"#define USE_MAP":"",i.env_map?"#define USE_ENVMAP":"",i.light_map?"#define USE_LIGHTMAP":"",i.vertex_colors?"#define USE_COLOR":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\n"].join("\n"); +b.attachShader(h,k("fragment",p+l));b.attachShader(h,k("vertex",i+q));b.linkProgram(h);b.getProgramParameter(h,b.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+b.getProgramParameter(h,b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");h.uniforms={};h.attributes={};e.program=h;h=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition"];for(g in e.uniforms)h.push(g);g=e.program;l=0;for(q=h.length;l=0){b.bindBuffer(b.ARRAY_BUFFER,p.__webGLColorBuffer);b.vertexAttribPointer(e.color,3,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.color)}if(e.normal>= +0){b.bindBuffer(b.ARRAY_BUFFER,p.__webGLNormalBuffer);b.vertexAttribPointer(e.normal,3,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.normal)}if(e.tangent>=0){b.bindBuffer(b.ARRAY_BUFFER,p.__webGLTangentBuffer);b.vertexAttribPointer(e.tangent,4,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.tangent)}if(e.uv>=0)if(p.__webGLUVBuffer){b.bindBuffer(b.ARRAY_BUFFER,p.__webGLUVBuffer);b.vertexAttribPointer(e.uv,2,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.uv)}else b.disableVertexAttribArray(e.uv);if(e.uv2>= +0)if(p.__webGLUV2Buffer){b.bindBuffer(b.ARRAY_BUFFER,p.__webGLUV2Buffer);b.vertexAttribPointer(e.uv2,2,b.FLOAT,false,0,0);b.enableVertexAttribArray(e.uv2)}else b.disableVertexAttribArray(e.uv2);if(i instanceof THREE.Mesh)if(g.wireframe){b.lineWidth(g.wireframe_linewidth);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,p.__webGLLineBuffer);b.drawElements(b.LINES,p.__webGLLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,p.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,p.__webGLFaceCount,b.UNSIGNED_SHORT, +0)}else if(i instanceof THREE.Line){i=i.type==THREE.LineStrip?b.LINE_STRIP:b.LINES;b.lineWidth(g.linewidth);b.drawArrays(i,0,p.__webGLLineCount)}else i instanceof THREE.ParticleSystem&&b.drawArrays(b.POINTS,0,p.__webGLParticleCount)};this.renderPass=function(e,q,h,g,p,i,t){var j,l,s,z,v;s=0;for(z=g.materials.length;s=0;h--){g=e.__webGLObjects[h].object;q==g&&e.__webGLObjects.splice(h,1)}};this.setupMatrices=function(e,q){e._modelViewMatrix.multiplyToArray(q.matrix,e.matrix,e._modelViewMatrixArray);e._normalMatrix=THREE.Matrix4.makeInvert3x3(e._modelViewMatrix).transposeIntoArray(e._normalMatrixArray)};this.setDepthTest=function(e){e?b.enable(b.DEPTH_TEST):b.disable(b.DEPTH_TEST)};this.setFaceCulling=function(e,q){if(e){!q||q=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW); +if(e=="back")b.cullFace(b.BACK);else e=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK);b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)};this.supportsVertexTextures=function(){return b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0}}; THREE.Snippets={fog_pars_fragment:"#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif",fog_fragment:"#ifdef USE_FOG\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n#ifdef FOG_EXP2\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n#else\nfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n#endif\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float reflectivity;\nuniform samplerCube env_map;\nuniform int combine;\n#endif", envmap_fragment:"#ifdef USE_ENVMAP\nvec4 cubeColor = textureCube( env_map, vec3( -vReflect.x, vReflect.yz ) );\nif ( combine == 1 ) {\ngl_FragColor = vec4( mix( gl_FragColor.xyz, cubeColor.xyz, reflectivity ), opacity );\n} else {\ngl_FragColor = gl_FragColor * cubeColor;\n}\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float refraction_ratio;\nuniform bool useRefract;\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nif ( useRefract ) {\nvReflect = refract( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ), refraction_ratio );\n} else {\nvReflect = reflect( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ) );\n}\n#endif", map_particle_pars_fragment:"#ifdef USE_MAP\nuniform sampler2D map;\n#endif",map_particle_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, gl_PointCoord );\n#endif",map_pars_fragment:"#ifdef USE_MAP\nvarying vec2 vUv;\nuniform sampler2D map;\n#endif",map_pars_vertex:"#ifdef USE_MAP\nvarying vec2 vUv;\n#endif",map_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, vUv );\n#endif",map_vertex:"#ifdef USE_MAP\nvUv = uv;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\nuniform sampler2D light_map;\n#endif", diff --git a/build/ThreeExtras.js b/build/ThreeExtras.js index 18795d3b..bd84957e 100644 --- a/build/ThreeExtras.js +++ b/build/ThreeExtras.js @@ -13,32 +13,32 @@ THREE.Vector4=function(a,c,d,e){this.x=a||0;this.y=c||0;this.z=d||0;this.w=e||1} THREE.Vector4.prototype={set:function(a,c,d,e){this.x=a;this.y=c;this.z=d;this.w=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w||1;return this},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;this.w=a.w+c.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z-c.z;this.w=a.w-c.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.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,c){this.x+=(a.x-this.x)*c;this.y+=(a.y-this.y)*c;this.z+=(a.z-this.z)*c;this.w+=(a.w-this.w)*c},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,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3}; -THREE.Ray.prototype={intersectScene:function(a){var c,d,e=a.objects,g=[];a=0;for(c=e.length;a0&&H>0&&w+H<1}var d,e,g,f,h,b,j,l,p,A, -q,m=a.geometry,B=m.vertices,E=[];d=0;for(e=m.faces.length;dj?e:j;g=g>l? -g:l}a()};this.add3Points=function(j,l,p,A,q,m){if(b){b=false;c=jp?j>q?j:q:p>q?p:q;g=l>A?l>m?l:m:A>m?A:m}else{c=jp?j>q?j>e?j:e:q>e?q:e:p>q?p>e?p:e:q>e?q:e;g=l>A?l>m?l>g?l:g:m>g?m:g:A>m?A>g?A:g:m>g?m:g}a()};this.addRectangle=function(j){if(b){b=false;c=j.getLeft();d=j.getTop();e=j.getRight();g=j.getBottom()}else{c=c0&&H>0&&k+H<1}var d,e,g,f,h,b,j,l,t,A, +w,o=a.geometry,p=o.vertices,C=[];d=0;for(e=o.faces.length;dj?e:j;g=g>l? +g:l}a()};this.add3Points=function(j,l,t,A,w,o){if(b){b=false;c=jt?j>w?j:w:t>w?t:w;g=l>A?l>o?l:o:A>o?A:o}else{c=jt?j>w?j>e?j:e:w>e?w:e:t>w?t>e?t:e:w>e?w:e;g=l>A?l>o?l>g?l:g:o>g?o:g:A>o?A>g?A:g:o>g?o:g}a()};this.addRectangle=function(j){if(b){b=false;c=j.getLeft();d=j.getTop();e=j.getRight();g=j.getBottom()}else{c=cj.getRight()?e:j.getRight();g=g>j.getBottom()?g:j.getBottom()}a()};this.inflate=function(j){c-=j;d-=j;e+=j;g+=j;a()};this.minSelf=function(j){c=c>j.getLeft()?c:j.getLeft();d=d>j.getTop()?d:j.getTop();e=e=0&&Math.min(g,j.getBottom())-Math.max(d,j.getTop())>=0};this.empty=function(){b=true;g=e=d=c=0;a()};this.isEmpty=function(){return b};this.toString= function(){return"THREE.Rectangle ( left: "+c+", right: "+e+", top: "+d+", bottom: "+g+", width: "+f+", height: "+h+" )"}};THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a,c=this.m;a=c[1];c[1]=c[3];c[3]=a;a=c[2];c[2]=c[6];c[6]=a;a=c[5];c[5]=c[7];c[7]=a;return this},transposeIntoArray:function(a){var c=this.m;a[0]=c[0];a[1]=c[3];a[2]=c[6];a[3]=c[1];a[4]=c[4];a[5]=c[7];a[6]=c[2];a[7]=c[5];a[8]=c[8];return this}}; -THREE.Matrix4=function(a,c,d,e,g,f,h,b,j,l,p,A,q,m,B,E){this.n11=a||1;this.n12=c||0;this.n13=d||0;this.n14=e||0;this.n21=g||0;this.n22=f||1;this.n23=h||0;this.n24=b||0;this.n31=j||0;this.n32=l||0;this.n33=p||1;this.n34=A||0;this.n41=q||0;this.n42=m||0;this.n43=B||0;this.n44=E||1;this.flat=Array(16);this.m33=new THREE.Matrix3}; -THREE.Matrix4.prototype={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;return this},set:function(a,c,d,e,g,f,h,b,j,l,p,A,q,m,B,E){this.n11=a;this.n12=c;this.n13=d;this.n14=e;this.n21=g;this.n22=f;this.n23=h;this.n24=b;this.n31=j;this.n32=l;this.n33=p;this.n34=A;this.n41=q;this.n42=m;this.n43=B;this.n44=E;return this},copy:function(a){this.n11=a.n11;this.n12=a.n12;this.n13= +THREE.Matrix4=function(a,c,d,e,g,f,h,b,j,l,t,A,w,o,p,C){this.n11=a||1;this.n12=c||0;this.n13=d||0;this.n14=e||0;this.n21=g||0;this.n22=f||1;this.n23=h||0;this.n24=b||0;this.n31=j||0;this.n32=l||0;this.n33=t||1;this.n34=A||0;this.n41=w||0;this.n42=o||0;this.n43=p||0;this.n44=C||1;this.flat=Array(16);this.m33=new THREE.Matrix3}; +THREE.Matrix4.prototype={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;return this},set:function(a,c,d,e,g,f,h,b,j,l,t,A,w,o,p,C){this.n11=a;this.n12=c;this.n13=d;this.n14=e;this.n21=g;this.n22=f;this.n23=h;this.n24=b;this.n31=j;this.n32=l;this.n33=t;this.n34=A;this.n41=w;this.n42=o;this.n43=p;this.n44=C;return this},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;return this},lookAt:function(a,c,d){var e=THREE.Matrix4.__tmpVec1,g=THREE.Matrix4.__tmpVec2,f=THREE.Matrix4.__tmpVec3;f.sub(a,c).normalize();e.cross(d,f).normalize();g.cross(f,e).normalize();this.n11=e.x;this.n12=e.y;this.n13=e.z;this.n14=-e.dot(a);this.n21=g.x;this.n22=g.y;this.n23=g.z;this.n24=-g.dot(a); this.n31=f.x;this.n32=f.y;this.n33=f.z;this.n34=-f.dot(a);this.n43=this.n42=this.n41=0;this.n44=1;return this},multiplyVector3:function(a){var c=a.x,d=a.y,e=a.z,g=1/(this.n41*c+this.n42*d+this.n43*e+this.n44);a.x=(this.n11*c+this.n12*d+this.n13*e+this.n14)*g;a.y=(this.n21*c+this.n22*d+this.n23*e+this.n24)*g;a.z=(this.n31*c+this.n32*d+this.n33*e+this.n34)*g;return a},multiplyVector4:function(a){var c=a.x,d=a.y,e=a.z,g=a.w;a.x=this.n11*c+this.n12*d+this.n13*e+this.n14*g;a.y=this.n21*c+this.n22*d+this.n23* -e+this.n24*g;a.z=this.n31*c+this.n32*d+this.n33*e+this.n34*g;a.w=this.n41*c+this.n42*d+this.n43*e+this.n44*g;return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var d=a.n11,e=a.n12,g=a.n13,f=a.n14,h=a.n21,b=a.n22,j=a.n23,l=a.n24,p=a.n31, -A=a.n32,q=a.n33,m=a.n34,B=a.n41,E=a.n42,H=a.n43,x=a.n44,I=c.n11,t=c.n12,k=c.n13,w=c.n14,u=c.n21,n=c.n22,o=c.n23,v=c.n24,D=c.n31,y=c.n32,C=c.n33,z=c.n34,F=c.n41,J=c.n42,M=c.n43,Q=c.n44;this.n11=d*I+e*u+g*D+f*F;this.n12=d*t+e*n+g*y+f*J;this.n13=d*k+e*o+g*C+f*M;this.n14=d*w+e*v+g*z+f*Q;this.n21=h*I+b*u+j*D+l*F;this.n22=h*t+b*n+j*y+l*J;this.n23=h*k+b*o+j*C+l*M;this.n24=h*w+b*v+j*z+l*Q;this.n31=p*I+A*u+q*D+m*F;this.n32=p*t+A*n+q*y+m*J;this.n33=p*k+A*o+q*C+m*M;this.n34=p*w+A*v+q*z+m*Q;this.n41=B*I+E*u+ -H*D+x*F;this.n42=B*t+E*n+H*y+x*J;this.n43=B*k+E*o+H*C+x*M;this.n44=B*w+E*v+H*z+x*Q;return this},multiplyToArray:function(a,c,d){var e=a.n11,g=a.n12,f=a.n13,h=a.n14,b=a.n21,j=a.n22,l=a.n23,p=a.n24,A=a.n31,q=a.n32,m=a.n33,B=a.n34,E=a.n41,H=a.n42,x=a.n43;a=a.n44;var I=c.n11,t=c.n12,k=c.n13,w=c.n14,u=c.n21,n=c.n22,o=c.n23,v=c.n24,D=c.n31,y=c.n32,C=c.n33,z=c.n34,F=c.n41,J=c.n42,M=c.n43;c=c.n44;this.n11=e*I+g*u+f*D+h*F;this.n12=e*t+g*n+f*y+h*J;this.n13=e*k+g*o+f*C+h*M;this.n14=e*w+g*v+f*z+h*c;this.n21= -b*I+j*u+l*D+p*F;this.n22=b*t+j*n+l*y+p*J;this.n23=b*k+j*o+l*C+p*M;this.n24=b*w+j*v+l*z+p*c;this.n31=A*I+q*u+m*D+B*F;this.n32=A*t+q*n+m*y+B*J;this.n33=A*k+q*o+m*C+B*M;this.n34=A*w+q*v+m*z+B*c;this.n41=E*I+H*u+x*D+a*F;this.n42=E*t+H*n+x*y+a*J;this.n43=E*k+H*o+x*C+a*M;this.n44=E*w+H*v+x*z+a*c;d[0]=this.n11;d[1]=this.n21;d[2]=this.n31;d[3]=this.n41;d[4]=this.n12;d[5]=this.n22;d[6]=this.n32;d[7]=this.n42;d[8]=this.n13;d[9]=this.n23;d[10]=this.n33;d[11]=this.n43;d[12]=this.n14;d[13]=this.n24;d[14]=this.n34; -d[15]=this.n44;return this},multiplySelf:function(a){var c=this.n11,d=this.n12,e=this.n13,g=this.n14,f=this.n21,h=this.n22,b=this.n23,j=this.n24,l=this.n31,p=this.n32,A=this.n33,q=this.n34,m=this.n41,B=this.n42,E=this.n43,H=this.n44,x=a.n11,I=a.n21,t=a.n31,k=a.n41,w=a.n12,u=a.n22,n=a.n32,o=a.n42,v=a.n13,D=a.n23,y=a.n33,C=a.n43,z=a.n14,F=a.n24,J=a.n34;a=a.n44;this.n11=c*x+d*I+e*t+g*k;this.n12=c*w+d*u+e*n+g*o;this.n13=c*v+d*D+e*y+g*C;this.n14=c*z+d*F+e*J+g*a;this.n21=f*x+h*I+b*t+j*k;this.n22=f*w+h* -u+b*n+j*o;this.n23=f*v+h*D+b*y+j*C;this.n24=f*z+h*F+b*J+j*a;this.n31=l*x+p*I+A*t+q*k;this.n32=l*w+p*u+A*n+q*o;this.n33=l*v+p*D+A*y+q*C;this.n34=l*z+p*F+A*J+q*a;this.n41=m*x+B*I+E*t+H*k;this.n42=m*w+B*u+E*n+H*o;this.n43=m*v+B*D+E*y+H*C;this.n44=m*z+B*F+E*J+H*a;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this}, -determinant:function(){var a=this.n11,c=this.n12,d=this.n13,e=this.n14,g=this.n21,f=this.n22,h=this.n23,b=this.n24,j=this.n31,l=this.n32,p=this.n33,A=this.n34,q=this.n41,m=this.n42,B=this.n43,E=this.n44;return e*h*l*q-d*b*l*q-e*f*p*q+c*b*p*q+d*f*A*q-c*h*A*q-e*h*j*m+d*b*j*m+e*g*p*m-a*b*p*m-d*g*A*m+a*h*A*m+e*f*j*B-c*b*j*B-e*g*l*B+a*b*l*B+c*g*A*B-a*f*A*B-d*f*j*E+c*h*j*E+d*g*l*E-a*h*l*E-c*g*p*E+a*f*p*E},transpose:function(){function a(c,d,e){var g=c[d];c[d]=c[e];c[e]=g}a(this,"n21","n12");a(this,"n31", +e+this.n24*g;a.z=this.n31*c+this.n32*d+this.n33*e+this.n34*g;a.w=this.n41*c+this.n42*d+this.n43*e+this.n44*g;return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var d=a.n11,e=a.n12,g=a.n13,f=a.n14,h=a.n21,b=a.n22,j=a.n23,l=a.n24,t=a.n31, +A=a.n32,w=a.n33,o=a.n34,p=a.n41,C=a.n42,H=a.n43,y=a.n44,I=c.n11,v=c.n12,L=c.n13,k=c.n14,B=c.n21,n=c.n22,m=c.n23,z=c.n24,q=c.n31,D=c.n32,x=c.n33,u=c.n34,F=c.n41,J=c.n42,G=c.n43,T=c.n44;this.n11=d*I+e*B+g*q+f*F;this.n12=d*v+e*n+g*D+f*J;this.n13=d*L+e*m+g*x+f*G;this.n14=d*k+e*z+g*u+f*T;this.n21=h*I+b*B+j*q+l*F;this.n22=h*v+b*n+j*D+l*J;this.n23=h*L+b*m+j*x+l*G;this.n24=h*k+b*z+j*u+l*T;this.n31=t*I+A*B+w*q+o*F;this.n32=t*v+A*n+w*D+o*J;this.n33=t*L+A*m+w*x+o*G;this.n34=t*k+A*z+w*u+o*T;this.n41=p*I+C*B+ +H*q+y*F;this.n42=p*v+C*n+H*D+y*J;this.n43=p*L+C*m+H*x+y*G;this.n44=p*k+C*z+H*u+y*T;return this},multiplyToArray:function(a,c,d){var e=a.n11,g=a.n12,f=a.n13,h=a.n14,b=a.n21,j=a.n22,l=a.n23,t=a.n24,A=a.n31,w=a.n32,o=a.n33,p=a.n34,C=a.n41,H=a.n42,y=a.n43;a=a.n44;var I=c.n11,v=c.n12,L=c.n13,k=c.n14,B=c.n21,n=c.n22,m=c.n23,z=c.n24,q=c.n31,D=c.n32,x=c.n33,u=c.n34,F=c.n41,J=c.n42,G=c.n43;c=c.n44;this.n11=e*I+g*B+f*q+h*F;this.n12=e*v+g*n+f*D+h*J;this.n13=e*L+g*m+f*x+h*G;this.n14=e*k+g*z+f*u+h*c;this.n21= +b*I+j*B+l*q+t*F;this.n22=b*v+j*n+l*D+t*J;this.n23=b*L+j*m+l*x+t*G;this.n24=b*k+j*z+l*u+t*c;this.n31=A*I+w*B+o*q+p*F;this.n32=A*v+w*n+o*D+p*J;this.n33=A*L+w*m+o*x+p*G;this.n34=A*k+w*z+o*u+p*c;this.n41=C*I+H*B+y*q+a*F;this.n42=C*v+H*n+y*D+a*J;this.n43=C*L+H*m+y*x+a*G;this.n44=C*k+H*z+y*u+a*c;d[0]=this.n11;d[1]=this.n21;d[2]=this.n31;d[3]=this.n41;d[4]=this.n12;d[5]=this.n22;d[6]=this.n32;d[7]=this.n42;d[8]=this.n13;d[9]=this.n23;d[10]=this.n33;d[11]=this.n43;d[12]=this.n14;d[13]=this.n24;d[14]=this.n34; +d[15]=this.n44;return this},multiplySelf:function(a){var c=this.n11,d=this.n12,e=this.n13,g=this.n14,f=this.n21,h=this.n22,b=this.n23,j=this.n24,l=this.n31,t=this.n32,A=this.n33,w=this.n34,o=this.n41,p=this.n42,C=this.n43,H=this.n44,y=a.n11,I=a.n21,v=a.n31,L=a.n41,k=a.n12,B=a.n22,n=a.n32,m=a.n42,z=a.n13,q=a.n23,D=a.n33,x=a.n43,u=a.n14,F=a.n24,J=a.n34;a=a.n44;this.n11=c*y+d*I+e*v+g*L;this.n12=c*k+d*B+e*n+g*m;this.n13=c*z+d*q+e*D+g*x;this.n14=c*u+d*F+e*J+g*a;this.n21=f*y+h*I+b*v+j*L;this.n22=f*k+h* +B+b*n+j*m;this.n23=f*z+h*q+b*D+j*x;this.n24=f*u+h*F+b*J+j*a;this.n31=l*y+t*I+A*v+w*L;this.n32=l*k+t*B+A*n+w*m;this.n33=l*z+t*q+A*D+w*x;this.n34=l*u+t*F+A*J+w*a;this.n41=o*y+p*I+C*v+H*L;this.n42=o*k+p*B+C*n+H*m;this.n43=o*z+p*q+C*D+H*x;this.n44=o*u+p*F+C*J+H*a;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this}, +determinant:function(){var a=this.n11,c=this.n12,d=this.n13,e=this.n14,g=this.n21,f=this.n22,h=this.n23,b=this.n24,j=this.n31,l=this.n32,t=this.n33,A=this.n34,w=this.n41,o=this.n42,p=this.n43,C=this.n44;return e*h*l*w-d*b*l*w-e*f*t*w+c*b*t*w+d*f*A*w-c*h*A*w-e*h*j*o+d*b*j*o+e*g*t*o-a*b*t*o-d*g*A*o+a*h*A*o+e*f*j*p-c*b*j*p-e*g*l*p+a*b*l*p+c*g*A*p-a*f*A*p-d*f*j*C+c*h*j*C+d*g*l*C-a*h*l*C-c*g*t*C+a*f*t*C},transpose:function(){function a(c,d,e){var g=c[d];c[d]=c[e];c[e]=g}a(this,"n21","n12");a(this,"n31", "n13");a(this,"n32","n23");a(this,"n41","n14");a(this,"n42","n24");a(this,"n43","n34");return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){var a=this.flat;a[0]=this.n11;a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]= this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArray:function(a){a[0]=this.n11;a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},setTranslation:function(a,c,d){this.set(1,0,0,a,0,1,0,c,0,0,1,d,0,0,0, 1);return this},setScale:function(a,c,d){this.set(a,0,0,0,0,c,0,0,0,0,d,0,0,0,0,1);return this},setRotX:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,c,-a,0,0,a,c,0,0,0,0,1);return this},setRotY:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,0,a,0,0,1,0,0,-a,0,c,0,0,0,0,1);return this},setRotZ:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,-a,0,0,a,c,0,0,0,0,1,0,0,0,0,1);return this},setRotAxis:function(a,c){var d=Math.cos(c),e=Math.sin(c),g=1-d,f=a.x,h=a.y,b=a.z, j=g*f,l=g*h;this.set(j*f+d,j*h-e*b,j*b+e*h,0,j*h+e*b,l*h+d,l*b-e*f,0,j*b-e*h,l*b+e*f,g*b*b+d,0,0,0,0,1);return this},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(a,c,d){var e=new THREE.Matrix4;e.setTranslation(a,c,d);return e}; THREE.Matrix4.scaleMatrix=function(a,c,d){var e=new THREE.Matrix4;e.setScale(a,c,d);return e};THREE.Matrix4.rotationXMatrix=function(a){var c=new THREE.Matrix4;c.setRotX(a);return c};THREE.Matrix4.rotationYMatrix=function(a){var c=new THREE.Matrix4;c.setRotY(a);return c};THREE.Matrix4.rotationZMatrix=function(a){var c=new THREE.Matrix4;c.setRotZ(a);return c};THREE.Matrix4.rotationAxisAngleMatrix=function(a,c){var d=new THREE.Matrix4;d.setRotAxis(a,c);return d}; -THREE.Matrix4.makeInvert=function(a){var c=a.n11,d=a.n12,e=a.n13,g=a.n14,f=a.n21,h=a.n22,b=a.n23,j=a.n24,l=a.n31,p=a.n32,A=a.n33,q=a.n34,m=a.n41,B=a.n42,E=a.n43,H=a.n44,x=new THREE.Matrix4;x.n11=b*q*B-j*A*B+j*p*E-h*q*E-b*p*H+h*A*H;x.n12=g*A*B-e*q*B-g*p*E+d*q*E+e*p*H-d*A*H;x.n13=e*j*B-g*b*B+g*h*E-d*j*E-e*h*H+d*b*H;x.n14=g*b*p-e*j*p-g*h*A+d*j*A+e*h*q-d*b*q;x.n21=j*A*m-b*q*m-j*l*E+f*q*E+b*l*H-f*A*H;x.n22=e*q*m-g*A*m+g*l*E-c*q*E-e*l*H+c*A*H;x.n23=g*b*m-e*j*m-g*f*E+c*j*E+e*f*H-c*b*H;x.n24=e*j*l-g*b*l+ -g*f*A-c*j*A-e*f*q+c*b*q;x.n31=h*q*m-j*p*m+j*l*B-f*q*B-h*l*H+f*p*H;x.n32=g*p*m-d*q*m-g*l*B+c*q*B+d*l*H-c*p*H;x.n33=e*j*m-g*h*m+g*f*B-c*j*B-d*f*H+c*h*H;x.n34=g*h*l-d*j*l-g*f*p+c*j*p+d*f*q-c*h*q;x.n41=b*p*m-h*A*m-b*l*B+f*A*B+h*l*E-f*p*E;x.n42=d*A*m-e*p*m+e*l*B-c*A*B-d*l*E+c*p*E;x.n43=e*h*m-d*b*m-e*f*B+c*b*B+d*f*E-c*h*E;x.n44=d*b*l-e*h*l+e*f*p-c*b*p-d*f*A+c*h*A;x.multiplyScalar(1/a.determinant());return x}; -THREE.Matrix4.makeInvert3x3=function(a){var c=a.m33,d=c.m,e=a.n33*a.n22-a.n32*a.n23,g=-a.n33*a.n21+a.n31*a.n23,f=a.n32*a.n21-a.n31*a.n22,h=-a.n33*a.n12+a.n32*a.n13,b=a.n33*a.n11-a.n31*a.n13,j=-a.n32*a.n11+a.n31*a.n12,l=a.n23*a.n12-a.n22*a.n13,p=-a.n23*a.n11+a.n21*a.n13,A=a.n22*a.n11-a.n21*a.n12;a=a.n11*e+a.n21*h+a.n31*l;if(a==0)throw"matrix not invertible";a=1/a;d[0]=a*e;d[1]=a*g;d[2]=a*f;d[3]=a*h;d[4]=a*b;d[5]=a*j;d[6]=a*l;d[7]=a*p;d[8]=a*A;return c}; +THREE.Matrix4.makeInvert=function(a){var c=a.n11,d=a.n12,e=a.n13,g=a.n14,f=a.n21,h=a.n22,b=a.n23,j=a.n24,l=a.n31,t=a.n32,A=a.n33,w=a.n34,o=a.n41,p=a.n42,C=a.n43,H=a.n44,y=new THREE.Matrix4;y.n11=b*w*p-j*A*p+j*t*C-h*w*C-b*t*H+h*A*H;y.n12=g*A*p-e*w*p-g*t*C+d*w*C+e*t*H-d*A*H;y.n13=e*j*p-g*b*p+g*h*C-d*j*C-e*h*H+d*b*H;y.n14=g*b*t-e*j*t-g*h*A+d*j*A+e*h*w-d*b*w;y.n21=j*A*o-b*w*o-j*l*C+f*w*C+b*l*H-f*A*H;y.n22=e*w*o-g*A*o+g*l*C-c*w*C-e*l*H+c*A*H;y.n23=g*b*o-e*j*o-g*f*C+c*j*C+e*f*H-c*b*H;y.n24=e*j*l-g*b*l+ +g*f*A-c*j*A-e*f*w+c*b*w;y.n31=h*w*o-j*t*o+j*l*p-f*w*p-h*l*H+f*t*H;y.n32=g*t*o-d*w*o-g*l*p+c*w*p+d*l*H-c*t*H;y.n33=e*j*o-g*h*o+g*f*p-c*j*p-d*f*H+c*h*H;y.n34=g*h*l-d*j*l-g*f*t+c*j*t+d*f*w-c*h*w;y.n41=b*t*o-h*A*o-b*l*p+f*A*p+h*l*C-f*t*C;y.n42=d*A*o-e*t*o+e*l*p-c*A*p-d*l*C+c*t*C;y.n43=e*h*o-d*b*o-e*f*p+c*b*p+d*f*C-c*h*C;y.n44=d*b*l-e*h*l+e*f*t-c*b*t-d*f*A+c*h*A;y.multiplyScalar(1/a.determinant());return y}; +THREE.Matrix4.makeInvert3x3=function(a){var c=a.m33,d=c.m,e=a.n33*a.n22-a.n32*a.n23,g=-a.n33*a.n21+a.n31*a.n23,f=a.n32*a.n21-a.n31*a.n22,h=-a.n33*a.n12+a.n32*a.n13,b=a.n33*a.n11-a.n31*a.n13,j=-a.n32*a.n11+a.n31*a.n12,l=a.n23*a.n12-a.n22*a.n13,t=-a.n23*a.n11+a.n21*a.n13,A=a.n22*a.n11-a.n21*a.n12;a=a.n11*e+a.n21*h+a.n31*l;if(a==0)throw"matrix not invertible";a=1/a;d[0]=a*e;d[1]=a*g;d[2]=a*f;d[3]=a*h;d[4]=a*b;d[5]=a*j;d[6]=a*l;d[7]=a*t;d[8]=a*A;return c}; THREE.Matrix4.makeFrustum=function(a,c,d,e,g,f){var h,b,j;h=new THREE.Matrix4;b=2*g/(c-a);j=2*g/(e-d);a=(c+a)/(c-a);d=(e+d)/(e-d);e=-(f+g)/(f-g);g=-2*f*g/(f-g);h.n11=b;h.n12=0;h.n13=a;h.n14=0;h.n21=0;h.n22=j;h.n23=d;h.n24=0;h.n31=0;h.n32=0;h.n33=e;h.n34=g;h.n41=0;h.n42=0;h.n43=-1;h.n44=0;return h};THREE.Matrix4.makePerspective=function(a,c,d,e){var g;a=d*Math.tan(a*Math.PI/360);g=-a;return THREE.Matrix4.makeFrustum(g*c,a*c,g,a,d,e)}; THREE.Matrix4.makeOrtho=function(a,c,d,e,g,f){var h,b,j,l;h=new THREE.Matrix4;b=c-a;j=d-e;l=f-g;a=(c+a)/b;d=(d+e)/j;g=(f+g)/l;h.n11=2/b;h.n12=0;h.n13=0;h.n14=-a;h.n21=0;h.n22=2/j;h.n23=0;h.n24=-d;h.n31=0;h.n32=0;h.n33=-2/l;h.n34=-g;h.n41=0;h.n42=0;h.n43=0;h.n44=1;return h};THREE.Matrix4.__tmpVec1=new THREE.Vector3;THREE.Matrix4.__tmpVec2=new THREE.Vector3;THREE.Matrix4.__tmpVec3=new THREE.Vector3; THREE.Vertex=function(a,c){this.position=a||new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.normal=c||new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.normalScreen=new THREE.Vector3;this.tangent=new THREE.Vector4;this.__visible=true};THREE.Vertex.prototype={toString:function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}}; @@ -49,12 +49,12 @@ THREE.Geometry.prototype={computeCentroids:function(){var a,c,d;a=0;for(c=this.f d.centroid.addSelf(this.vertices[d.d].position);d.centroid.divideScalar(4)}}},computeFaceNormals:function(a){var c,d,e,g,f,h,b=new THREE.Vector3,j=new THREE.Vector3;e=0;for(g=this.vertices.length;e0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y], +this.vertices[e.d].normal.copy(e.vertexNormals[3])}}c=0;for(d=this.vertices.length;c0){this.boundingBox={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 c=1,d=this.vertices.length;cthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.z -this.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=this.boundingSphere===null?0:this.boundingSphere.radius,c=0,d=this.vertices.length;c65535){l[b].counter+=1;j=l[b].hash+"_"+l[b].counter;if(this.geometryChunks[j]==undefined)this.geometryChunks[j]={faces:[],materials:h,vertices:0}}this.geometryChunks[j].faces.push(e);this.geometryChunks[j].vertices+=f}},toString:function(){return"THREE.Geometry ( vertices: "+ this.vertices+", faces: "+this.faces+", uvs: "+this.uvs+" )"}}; THREE.Camera=function(a,c,d,e){this.fov=a;this.aspect=c;this.near=d;this.far=e;this.position=new THREE.Vector3;this.target={position:new THREE.Vector3};this.autoUpdateMatrix=true;this.projectionMatrix=null;this.matrix=new THREE.Matrix4;this.up=new THREE.Vector3(0,1,0);this.tmpVec=new THREE.Vector3;this.translateX=function(g){this.tmpVec.sub(this.target.position,this.position).normalize().multiplyScalar(g);this.tmpVec.crossSelf(this.up);this.position.addSelf(this.tmpVec);this.target.position.addSelf(this.tmpVec)}; @@ -104,106 +104,106 @@ var Uniforms={clone:function(a){var c,d,e,g={};for(c in a){g[c]={};for(d in a[c] THREE.SphericalReflectionMapping=function(){};THREE.SphericalRefractionMapping=function(){};THREE.UVMapping=function(){}; THREE.Scene=function(){this.objects=[];this.lights=[];this.fog=null;this.addObject=function(a){this.objects.indexOf(a)===-1&&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.indexOf(a)===-1&&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.Fog=function(a,c,d){this.color=new THREE.Color(a);this.near=c||1;this.far=d||1E3};THREE.FogExp2=function(a,c){this.color=new THREE.Color(a);this.density=c||2.5E-4}; -THREE.Projector=function(){function a(n,o){return o.z-n.z}function c(n,o){var v=0,D=1,y=n.z+n.w,C=o.z+o.w,z=-n.z+n.w,F=-o.z+o.w;if(y>=0&&C>=0&&z>=0&&F>=0)return true;else if(y<0&&C<0||z<0&&F<0)return false;else{if(y<0)v=Math.max(v,y/(y-C));else if(C<0)D=Math.min(D,y/(y-C));if(z<0)v=Math.max(v,z/(z-F));else if(F<0)D=Math.min(D,z/(z-F));if(Dy&&M.z0&&H.z<1){q=B[m]=B[m]||new THREE.RenderableParticle;q.x=H.x/H.w;q.y=H.y/H.w;q.z=H.z;q.rotation=U.rotation.z;q.scale.x=U.scale.x*Math.abs(q.x-(H.x+o.projectionMatrix.n11)/ -(H.w+o.projectionMatrix.n14));q.scale.y=U.scale.y*Math.abs(q.y-(H.y+o.projectionMatrix.n22)/(H.w+o.projectionMatrix.n24));q.materials=U.materials;D.push(q);m++}}}}v&&D.sort(a);return D};this.unprojectVector=function(n,o){var v=THREE.Matrix4.makeInvert(o.matrix);v.multiplySelf(THREE.Matrix4.makeInvert(o.projectionMatrix));v.multiplyVector3(n);return n}}; -THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,d,e,g,f;this.domElement=document.createElement("div");this.setSize=function(h,b){d=h;e=b;g=d/2;f=e/2};this.render=function(h,b){var j,l,p,A,q,m,B,E;a=c.projectScene(h,b);j=0;for(l=a.length;j0){R.r+=na.r*ga;R.g+=na.g*ga;R.b+=na.b*ga}}else if(ga instanceof THREE.PointLight){L.sub(ga.position,fa);L.normalize(); -ga=aa.dot(L)*oa;if(ga>0){R.r+=na.r*ga;R.g+=na.g*ga;R.b+=na.b*ga}}}}function Ja(P,fa,aa){if(aa.opacity!=0){a(aa.opacity);c(aa.blending);var R,Y,ga,na,oa,pa;if(aa instanceof THREE.ParticleBasicMaterial){if(aa.map&&aa.map.image.loaded){na=aa.map.image;oa=na.width>>1;pa=na.height>>1;Y=fa.scale.x*b;ga=fa.scale.y*j;aa=Y*oa;R=ga*pa;K.set(P.x-aa,P.y-R,P.x+aa,P.y+R);if(Z.instersects(K)){l.save();l.translate(P.x,P.y);l.rotate(-fa.rotation);l.scale(Y,-ga);l.translate(-oa,-pa);l.drawImage(na,0,0);l.restore()}}}else if(aa instanceof -THREE.ParticleCircleMaterial){if(W){ba.r=ha.r+ea.r+G.r;ba.g=ha.g+ea.g+G.g;ba.b=ha.b+ea.b+G.b;D.r=aa.color.r*ba.r;D.g=aa.color.g*ba.g;D.b=aa.color.b*ba.b;D.updateStyleString()}else D.__styleString=aa.color.__styleString;aa=fa.scale.x*b;R=fa.scale.y*j;K.set(P.x-aa,P.y-R,P.x+aa,P.y+R);if(Z.instersects(K)){Y=D.__styleString;if(E!=Y)l.fillStyle=E=Y;l.save();l.translate(P.x,P.y);l.rotate(-fa.rotation);l.scale(aa,R);l.beginPath();l.arc(0,0,1,0,N,true);l.closePath();l.fill();l.restore()}}}}function Ka(P, -fa,aa,R){if(R.opacity!=0){a(R.opacity);c(R.blending);l.beginPath();l.moveTo(P.positionScreen.x,P.positionScreen.y);l.lineTo(fa.positionScreen.x,fa.positionScreen.y);l.closePath();if(R instanceof THREE.LineBasicMaterial){D.__styleString=R.color.__styleString;P=R.linewidth;if(H!=P)l.lineWidth=H=P;P=D.__styleString;if(B!=P)l.strokeStyle=B=P;l.stroke();K.inflate(R.linewidth*2)}}}function ra(P,fa,aa,R,Y,ga){if(Y.opacity!=0){a(Y.opacity);c(Y.blending);k=P.positionScreen.x;w=P.positionScreen.y;u=fa.positionScreen.x; -n=fa.positionScreen.y;o=aa.positionScreen.x;v=aa.positionScreen.y;l.beginPath();l.moveTo(k,w);l.lineTo(u,n);l.lineTo(o,v);l.lineTo(k,w);l.closePath();if(Y instanceof THREE.MeshBasicMaterial)if(Y.map)Y.map.image.loaded&&Y.map.mapping instanceof THREE.UVMapping&&Ca(k,w,u,n,o,v,Y.map.image,R.uvs[0].u,R.uvs[0].v,R.uvs[1].u,R.uvs[1].v,R.uvs[2].u,R.uvs[2].v);else if(Y.env_map){if(Y.env_map.image.loaded)if(Y.env_map.mapping instanceof THREE.SphericalReflectionMapping){P=ja.matrix;L.copy(R.vertexNormalsWorld[0]); -S=(L.x*P.n11+L.y*P.n12+L.z*P.n13)*0.5+0.5;U=-(L.x*P.n21+L.y*P.n22+L.z*P.n23)*0.5+0.5;L.copy(R.vertexNormalsWorld[1]);ca=(L.x*P.n11+L.y*P.n12+L.z*P.n13)*0.5+0.5;da=-(L.x*P.n21+L.y*P.n22+L.z*P.n23)*0.5+0.5;L.copy(R.vertexNormalsWorld[2]);T=(L.x*P.n11+L.y*P.n12+L.z*P.n13)*0.5+0.5;O=-(L.x*P.n21+L.y*P.n22+L.z*P.n23)*0.5+0.5;Ca(k,w,u,n,o,v,Y.env_map.image,S,U,ca,da,T,O)}}else Y.wireframe?Ga(Y.color.__styleString,Y.wireframe_linewidth):Ha(Y.color.__styleString);else if(Y instanceof THREE.MeshLambertMaterial){if(Y.map&& -!Y.wireframe){Y.map.mapping instanceof THREE.UVMapping&&Ca(k,w,u,n,o,v,Y.map.image,R.uvs[0].u,R.uvs[0].v,R.uvs[1].u,R.uvs[1].v,R.uvs[2].u,R.uvs[2].v);c(THREE.SubtractiveBlending)}if(W)if(!Y.wireframe&&Y.shading==THREE.SmoothShading&&R.vertexNormalsWorld.length==3){y.r=C.r=z.r=ha.r;y.g=C.g=z.g=ha.g;y.b=C.b=z.b=ha.b;Aa(ga,R.v1.positionWorld,R.vertexNormalsWorld[0],y);Aa(ga,R.v2.positionWorld,R.vertexNormalsWorld[1],C);Aa(ga,R.v3.positionWorld,R.vertexNormalsWorld[2],z);F.r=(C.r+z.r)*0.5;F.g=(C.g+z.g)* -0.5;F.b=(C.b+z.b)*0.5;Q=Pa(y,C,z,F);Ca(k,w,u,n,o,v,Q,0,0,1,0,0,1)}else{ba.r=ha.r;ba.g=ha.g;ba.b=ha.b;Aa(ga,R.centroidWorld,R.normalWorld,ba);D.r=Y.color.r*ba.r;D.g=Y.color.g*ba.g;D.b=Y.color.b*ba.b;D.updateStyleString();Y.wireframe?Ga(D.__styleString,Y.wireframe_linewidth):Ha(D.__styleString)}else Y.wireframe?Ga(Y.color.__styleString,Y.wireframe_linewidth):Ha(Y.color.__styleString)}else if(Y instanceof THREE.MeshDepthMaterial){J=ja.near;M=ja.far;y.r=y.g=y.b=1-La(P.positionScreen.z,J,M);C.r=C.g=C.b= -1-La(fa.positionScreen.z,J,M);z.r=z.g=z.b=1-La(aa.positionScreen.z,J,M);F.r=(C.r+z.r)*0.5;F.g=(C.g+z.g)*0.5;F.b=(C.b+z.b)*0.5;Q=Pa(y,C,z,F);Ca(k,w,u,n,o,v,Q,0,0,1,0,0,1)}else if(Y instanceof THREE.MeshNormalMaterial){D.r=Ma(R.normalWorld.x);D.g=Ma(R.normalWorld.y);D.b=Ma(R.normalWorld.z);D.updateStyleString();Y.wireframe?Ga(D.__styleString,Y.wireframe_linewidth):Ha(D.__styleString)}}}function Ga(P,fa){if(B!=P)l.strokeStyle=B=P;if(H!=fa)l.lineWidth=H=fa;l.stroke();K.inflate(fa*2)}function Ha(P){if(E!= -P)l.fillStyle=E=P;l.fill()}function Ca(P,fa,aa,R,Y,ga,na,oa,pa,xa,sa,ya,Da){var va,za;va=na.width-1;za=na.height-1;oa*=va;pa*=za;xa*=va;sa*=za;ya*=va;Da*=za;aa-=P;R-=fa;Y-=P;ga-=fa;xa-=oa;sa-=pa;ya-=oa;Da-=pa;va=xa*Da-ya*sa;if(va!=0){za=1/va;va=(Da*aa-sa*Y)*za;sa=(Da*R-sa*ga)*za;aa=(xa*Y-ya*aa)*za;R=(xa*ga-ya*R)*za;P=P-va*oa-aa*pa;fa=fa-sa*oa-R*pa;l.save();l.transform(va,sa,aa,R,P,fa);l.clip();l.drawImage(na,0,0);l.restore()}}function Pa(P,fa,aa,R){var Y=~~(P.r*255),ga=~~(P.g*255);P=~~(P.b*255);var na= -~~(fa.r*255),oa=~~(fa.g*255);fa=~~(fa.b*255);var pa=~~(aa.r*255),xa=~~(aa.g*255);aa=~~(aa.b*255);var sa=~~(R.r*255),ya=~~(R.g*255);R=~~(R.b*255);ia[0]=Y<0?0:Y>255?255:Y;ia[1]=ga<0?0:ga>255?255:ga;ia[2]=P<0?0:P>255?255:P;ia[4]=na<0?0:na>255?255:na;ia[5]=oa<0?0:oa>255?255:oa;ia[6]=fa<0?0:fa>255?255:fa;ia[8]=pa<0?0:pa>255?255:pa;ia[9]=xa<0?0:xa>255?255:xa;ia[10]=aa<0?0:aa>255?255:aa;ia[12]=sa<0?0:sa>255?255:sa;ia[13]=ya<0?0:ya>255?255:ya;ia[14]=R<0?0:R>255?255:R;$.putImageData(ma,0,0);ta.drawImage(X, -0,0);return qa}function La(P,fa,aa){P=(P-fa)/(aa-fa);return P*P*(3-2*P)}function Ma(P){P=(P+1)*0.5;return P<0?0:P>1?1:P}function Na(P,fa){var aa=fa.x-P.x,R=fa.y-P.y,Y=1/Math.sqrt(aa*aa+R*R);aa*=Y;R*=Y;fa.x+=aa;fa.y+=R;P.x-=aa;P.y-=R}var Ia,Qa,la,wa,Ba,Oa,Ra,Ea;this.autoClear?this.clear():l.setTransform(1,0,0,-1,b,j);d=e.projectScene(ka,ja,this.sortElements);(W=ka.lights.length>0)&&Fa(ka);Ia=0;for(Qa=d.length;Ia0){ca.r+=O.color.r*Z;ca.g+=O.color.g*Z;ca.b+=O.color.b*Z}}else if(O instanceof THREE.PointLight){v.sub(O.position,U.centroidWorld);v.normalize();Z=U.normalWorld.dot(v)*O.intensity;if(Z>0){ca.r+=O.color.r*Z;ca.g+=O.color.g*Z;ca.b+=O.color.b*Z}}}}function c(S,U,ca,da,T,O){z=e(F++);z.setAttribute("d", -"M "+S.positionScreen.x+" "+S.positionScreen.y+" L "+U.positionScreen.x+" "+U.positionScreen.y+" L "+ca.positionScreen.x+","+ca.positionScreen.y+"z");if(T instanceof THREE.MeshBasicMaterial)t.__styleString=T.color.__styleString;else if(T instanceof THREE.MeshLambertMaterial)if(I){k.r=w.r;k.g=w.g;k.b=w.b;a(O,da,k);t.r=T.color.r*k.r;t.g=T.color.g*k.g;t.b=T.color.b*k.b;t.updateStyleString()}else t.__styleString=T.color.__styleString;else if(T instanceof THREE.MeshDepthMaterial){o=1-T.__2near/(T.__farPlusNear- -da.z*T.__farMinusNear);t.setRGB(o,o,o)}else T instanceof THREE.MeshNormalMaterial&&t.setRGB(g(da.normalWorld.x),g(da.normalWorld.y),g(da.normalWorld.z));T.wireframe?z.setAttribute("style","fill: none; stroke: "+t.__styleString+"; stroke-width: "+T.wireframe_linewidth+"; stroke-opacity: "+T.opacity+"; stroke-linecap: "+T.wireframe_linecap+"; stroke-linejoin: "+T.wireframe_linejoin):z.setAttribute("style","fill: "+t.__styleString+"; fill-opacity: "+T.opacity);b.appendChild(z)}function d(S,U,ca,da,T, -O,Z){z=e(F++);z.setAttribute("d","M "+S.positionScreen.x+" "+S.positionScreen.y+" L "+U.positionScreen.x+" "+U.positionScreen.y+" L "+ca.positionScreen.x+","+ca.positionScreen.y+" L "+da.positionScreen.x+","+da.positionScreen.y+"z");if(O instanceof THREE.MeshBasicMaterial)t.__styleString=O.color.__styleString;else if(O instanceof THREE.MeshLambertMaterial)if(I){k.r=w.r;k.g=w.g;k.b=w.b;a(Z,T,k);t.r=O.color.r*k.r;t.g=O.color.g*k.g;t.b=O.color.b*k.b;t.updateStyleString()}else t.__styleString=O.color.__styleString; -else if(O instanceof THREE.MeshDepthMaterial){o=1-O.__2near/(O.__farPlusNear-T.z*O.__farMinusNear);t.setRGB(o,o,o)}else O instanceof THREE.MeshNormalMaterial&&t.setRGB(g(T.normalWorld.x),g(T.normalWorld.y),g(T.normalWorld.z));O.wireframe?z.setAttribute("style","fill: none; stroke: "+t.__styleString+"; stroke-width: "+O.wireframe_linewidth+"; stroke-opacity: "+O.opacity+"; stroke-linecap: "+O.wireframe_linecap+"; stroke-linejoin: "+O.wireframe_linejoin):z.setAttribute("style","fill: "+t.__styleString+ -"; fill-opacity: "+O.opacity);b.appendChild(z)}function e(S){if(D[S]==null){D[S]=document.createElementNS("http://www.w3.org/2000/svg","path");Q==0&&D[S].setAttribute("shape-rendering","crispEdges");return D[S]}return D[S]}function g(S){return S<0?Math.min((1+S)*0.5,0.5):0.5+Math.min(S*0.5,0.5)}var f=null,h=new THREE.Projector,b=document.createElementNS("http://www.w3.org/2000/svg","svg"),j,l,p,A,q,m,B,E,H=new THREE.Rectangle,x=new THREE.Rectangle,I=false,t=new THREE.Color(16777215),k=new THREE.Color(16777215), -w=new THREE.Color(0),u=new THREE.Color(0),n=new THREE.Color(0),o,v=new THREE.Vector3,D=[],y=[],C=[],z,F,J,M,Q=1;this.domElement=b;this.sortElements=this.sortObjects=this.autoClear=true;this.setQuality=function(S){switch(S){case "high":Q=1;break;case "low":Q=0}};this.setSize=function(S,U){j=S;l=U;p=j/2;A=l/2;b.setAttribute("viewBox",-p+" "+-A+" "+j+" "+l);b.setAttribute("width",j);b.setAttribute("height",l);H.set(-p,-A,p,A)};this.clear=function(){for(;b.childNodes.length>0;)b.removeChild(b.childNodes[0])}; -this.render=function(S,U){var ca,da,T,O,Z,V,K,W;this.autoClear&&this.clear();f=h.projectScene(S,U,this.sortElements);M=J=F=0;if(I=S.lights.length>0){K=S.lights;w.setRGB(0,0,0);u.setRGB(0,0,0);n.setRGB(0,0,0);ca=0;for(da=K.length;ca=0&&x>=0&&u>=0&&F>=0)return true;else if(D<0&&x<0||u<0&&F<0)return false;else{if(D<0)z=Math.max(z,D/(D-x));else if(x<0)q=Math.min(q,D/(D-x));if(u<0)z=Math.max(z,u/(u-F));else if(F<0)q=Math.min(q,u/(u-F));if(qD&&G.z0&&H.z<1){w=p[o]=p[o]||new THREE.RenderableParticle;w.x=H.x/H.w;w.y=H.y/H.w;w.z=H.z;w.rotation=O.rotation.z;w.scale.x=O.scale.x*Math.abs(w.x-(H.x+m.projectionMatrix.n11)/ +(H.w+m.projectionMatrix.n14));w.scale.y=O.scale.y*Math.abs(w.y-(H.y+m.projectionMatrix.n22)/(H.w+m.projectionMatrix.n24));w.materials=O.materials;q.push(w);o++}}}}z&&q.sort(a);return q};this.unprojectVector=function(n,m){var z=THREE.Matrix4.makeInvert(m.matrix);z.multiplySelf(THREE.Matrix4.makeInvert(m.projectionMatrix));z.multiplyVector3(n);return n}}; +THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,d,e,g,f;this.domElement=document.createElement("div");this.setSize=function(h,b){d=h;e=b;g=d/2;f=e/2};this.render=function(h,b){var j,l,t,A,w,o,p,C;a=c.projectScene(h,b);j=0;for(l=a.length;j0){Q.r+=ma.r*fa;Q.g+=ma.g*fa;Q.b+=ma.b*fa}}else if(fa instanceof THREE.PointLight){N.sub(fa.position,ea);N.normalize();fa= +$.dot(N)*na;if(fa>0){Q.r+=ma.r*fa;Q.g+=ma.g*fa;Q.b+=ma.b*fa}}}}function Ja(P,ea,$){if($.opacity!=0){a($.opacity);c($.blending);var Q,Z,fa,ma,na,pa;if($ instanceof THREE.ParticleBasicMaterial){if($.map&&$.map.image.loaded){ma=$.map.image;na=ma.width>>1;pa=ma.height>>1;Z=ea.scale.x*b;fa=ea.scale.y*j;$=Z*na;Q=fa*pa;M.set(P.x-$,P.y-Q,P.x+$,P.y+Q);if(X.instersects(M)){l.save();l.translate(P.x,P.y);l.rotate(-ea.rotation);l.scale(Z,-fa);l.translate(-na,-pa);l.drawImage(ma,0,0);l.restore()}}}else if($ instanceof +THREE.ParticleCircleMaterial){if(S){aa.r=ja.r+ha.r+E.r;aa.g=ja.g+ha.g+E.g;aa.b=ja.b+ha.b+E.b;q.r=$.color.r*aa.r;q.g=$.color.g*aa.g;q.b=$.color.b*aa.b;q.updateStyleString()}else q.__styleString=$.color.__styleString;$=ea.scale.x*b;Q=ea.scale.y*j;M.set(P.x-$,P.y-Q,P.x+$,P.y+Q);if(X.instersects(M)){Z=q.__styleString;if(C!=Z)l.fillStyle=C=Z;l.save();l.translate(P.x,P.y);l.rotate(-ea.rotation);l.scale($,Q);l.beginPath();l.arc(0,0,1,0,K,true);l.closePath();l.fill();l.restore()}}}}function Ka(P,ea,$,Q){if(Q.opacity!= +0){a(Q.opacity);c(Q.blending);l.beginPath();l.moveTo(P.positionScreen.x,P.positionScreen.y);l.lineTo(ea.positionScreen.x,ea.positionScreen.y);l.closePath();if(Q instanceof THREE.LineBasicMaterial){q.__styleString=Q.color.__styleString;P=Q.linewidth;if(H!=P)l.lineWidth=H=P;P=q.__styleString;if(p!=P)l.strokeStyle=p=P;l.stroke();M.inflate(Q.linewidth*2)}}}function Ga(P,ea,$,Q,Z,fa){if(Z.opacity!=0){a(Z.opacity);c(Z.blending);L=P.positionScreen.x;k=P.positionScreen.y;B=ea.positionScreen.x;n=ea.positionScreen.y; +m=$.positionScreen.x;z=$.positionScreen.y;l.beginPath();l.moveTo(L,k);l.lineTo(B,n);l.lineTo(m,z);l.lineTo(L,k);l.closePath();if(Z instanceof THREE.MeshBasicMaterial)if(Z.map)Z.map.image.loaded&&Z.map.mapping instanceof THREE.UVMapping&&Da(L,k,B,n,m,z,Z.map.image,Q.uvs[0].u,Q.uvs[0].v,Q.uvs[1].u,Q.uvs[1].v,Q.uvs[2].u,Q.uvs[2].v);else if(Z.env_map){if(Z.env_map.image.loaded)if(Z.env_map.mapping instanceof THREE.SphericalReflectionMapping){P=sa.matrix;N.copy(Q.vertexNormalsWorld[0]);U=(N.x*P.n11+N.y* +P.n12+N.z*P.n13)*0.5+0.5;O=-(N.x*P.n21+N.y*P.n22+N.z*P.n23)*0.5+0.5;N.copy(Q.vertexNormalsWorld[1]);ba=(N.x*P.n11+N.y*P.n12+N.z*P.n13)*0.5+0.5;ca=-(N.x*P.n21+N.y*P.n22+N.z*P.n23)*0.5+0.5;N.copy(Q.vertexNormalsWorld[2]);W=(N.x*P.n11+N.y*P.n12+N.z*P.n13)*0.5+0.5;R=-(N.x*P.n21+N.y*P.n22+N.z*P.n23)*0.5+0.5;Da(L,k,B,n,m,z,Z.env_map.image,U,O,ba,ca,W,R)}}else Z.wireframe?qa(Z.color.__styleString,Z.wireframe_linewidth):Ha(Z.color.__styleString);else if(Z instanceof THREE.MeshLambertMaterial){if(Z.map&&!Z.wireframe){Z.map.mapping instanceof +THREE.UVMapping&&Da(L,k,B,n,m,z,Z.map.image,Q.uvs[0].u,Q.uvs[0].v,Q.uvs[1].u,Q.uvs[1].v,Q.uvs[2].u,Q.uvs[2].v);c(THREE.SubtractiveBlending)}if(S)if(!Z.wireframe&&Z.shading==THREE.SmoothShading&&Q.vertexNormalsWorld.length==3){D.r=x.r=u.r=ja.r;D.g=x.g=u.g=ja.g;D.b=x.b=u.b=ja.b;Ba(fa,Q.v1.positionWorld,Q.vertexNormalsWorld[0],D);Ba(fa,Q.v2.positionWorld,Q.vertexNormalsWorld[1],x);Ba(fa,Q.v3.positionWorld,Q.vertexNormalsWorld[2],u);F.r=(x.r+u.r)*0.5;F.g=(x.g+u.g)*0.5;F.b=(x.b+u.b)*0.5;T=Pa(D,x,u,F); +Da(L,k,B,n,m,z,T,0,0,1,0,0,1)}else{aa.r=ja.r;aa.g=ja.g;aa.b=ja.b;Ba(fa,Q.centroidWorld,Q.normalWorld,aa);q.r=Z.color.r*aa.r;q.g=Z.color.g*aa.g;q.b=Z.color.b*aa.b;q.updateStyleString();Z.wireframe?qa(q.__styleString,Z.wireframe_linewidth):Ha(q.__styleString)}else Z.wireframe?qa(Z.color.__styleString,Z.wireframe_linewidth):Ha(Z.color.__styleString)}else if(Z instanceof THREE.MeshDepthMaterial){J=sa.near;G=sa.far;D.r=D.g=D.b=1-La(P.positionScreen.z,J,G);x.r=x.g=x.b=1-La(ea.positionScreen.z,J,G);u.r= +u.g=u.b=1-La($.positionScreen.z,J,G);F.r=(x.r+u.r)*0.5;F.g=(x.g+u.g)*0.5;F.b=(x.b+u.b)*0.5;T=Pa(D,x,u,F);Da(L,k,B,n,m,z,T,0,0,1,0,0,1)}else if(Z instanceof THREE.MeshNormalMaterial){q.r=Ma(Q.normalWorld.x);q.g=Ma(Q.normalWorld.y);q.b=Ma(Q.normalWorld.z);q.updateStyleString();Z.wireframe?qa(q.__styleString,Z.wireframe_linewidth):Ha(q.__styleString)}}}function qa(P,ea){if(p!=P)l.strokeStyle=p=P;if(H!=ea)l.lineWidth=H=ea;l.stroke();M.inflate(ea*2)}function Ha(P){if(C!=P)l.fillStyle=C=P;l.fill()}function Da(P, +ea,$,Q,Z,fa,ma,na,pa,ya,ua,za,Ea){var wa,Aa;wa=ma.width-1;Aa=ma.height-1;na*=wa;pa*=Aa;ya*=wa;ua*=Aa;za*=wa;Ea*=Aa;$-=P;Q-=ea;Z-=P;fa-=ea;ya-=na;ua-=pa;za-=na;Ea-=pa;wa=ya*Ea-za*ua;if(wa!=0){Aa=1/wa;wa=(Ea*$-ua*Z)*Aa;ua=(Ea*Q-ua*fa)*Aa;$=(ya*Z-za*$)*Aa;Q=(ya*fa-za*Q)*Aa;P=P-wa*na-$*pa;ea=ea-ua*na-Q*pa;l.save();l.transform(wa,ua,$,Q,P,ea);l.clip();l.drawImage(ma,0,0);l.restore()}}function Pa(P,ea,$,Q){var Z=~~(P.r*255),fa=~~(P.g*255);P=~~(P.b*255);var ma=~~(ea.r*255),na=~~(ea.g*255);ea=~~(ea.b*255); +var pa=~~($.r*255),ya=~~($.g*255);$=~~($.b*255);var ua=~~(Q.r*255),za=~~(Q.g*255);Q=~~(Q.b*255);ia[0]=Z<0?0:Z>255?255:Z;ia[1]=fa<0?0:fa>255?255:fa;ia[2]=P<0?0:P>255?255:P;ia[4]=ma<0?0:ma>255?255:ma;ia[5]=na<0?0:na>255?255:na;ia[6]=ea<0?0:ea>255?255:ea;ia[8]=pa<0?0:pa>255?255:pa;ia[9]=ya<0?0:ya>255?255:ya;ia[10]=$<0?0:$>255?255:$;ia[12]=ua<0?0:ua>255?255:ua;ia[13]=za<0?0:za>255?255:za;ia[14]=Q<0?0:Q>255?255:Q;da.putImageData(ga,0,0);ra.drawImage(V,0,0);return ta}function La(P,ea,$){P=(P-ea)/($-ea); +return P*P*(3-2*P)}function Ma(P){P=(P+1)*0.5;return P<0?0:P>1?1:P}function Na(P,ea){var $=ea.x-P.x,Q=ea.y-P.y,Z=1/Math.sqrt($*$+Q*Q);$*=Z;Q*=Z;ea.x+=$;ea.y+=Q;P.x-=$;P.y-=Q}var Ia,Qa,la,xa,Ca,Oa,Ra,Fa;this.autoClear?this.clear():l.setTransform(1,0,0,-1,b,j);d=e.projectScene(ka,sa,this.sortElements);(S=ka.lights.length>0)&&oa(ka);Ia=0;for(Qa=d.length;Ia0){ba.r+=R.color.r*X;ba.g+=R.color.g*X;ba.b+=R.color.b*X}}else if(R instanceof THREE.PointLight){z.sub(R.position,O.centroidWorld);z.normalize();X=O.normalWorld.dot(z)*R.intensity;if(X>0){ba.r+=R.color.r*X;ba.g+=R.color.g*X;ba.b+=R.color.b*X}}}}function c(U,O,ba,ca,W,R){u=e(F++);u.setAttribute("d", +"M "+U.positionScreen.x+" "+U.positionScreen.y+" L "+O.positionScreen.x+" "+O.positionScreen.y+" L "+ba.positionScreen.x+","+ba.positionScreen.y+"z");if(W instanceof THREE.MeshBasicMaterial)v.__styleString=W.color.__styleString;else if(W instanceof THREE.MeshLambertMaterial)if(I){L.r=k.r;L.g=k.g;L.b=k.b;a(R,ca,L);v.r=W.color.r*L.r;v.g=W.color.g*L.g;v.b=W.color.b*L.b;v.updateStyleString()}else v.__styleString=W.color.__styleString;else if(W instanceof THREE.MeshDepthMaterial){m=1-W.__2near/(W.__farPlusNear- +ca.z*W.__farMinusNear);v.setRGB(m,m,m)}else W instanceof THREE.MeshNormalMaterial&&v.setRGB(g(ca.normalWorld.x),g(ca.normalWorld.y),g(ca.normalWorld.z));W.wireframe?u.setAttribute("style","fill: none; stroke: "+v.__styleString+"; stroke-width: "+W.wireframe_linewidth+"; stroke-opacity: "+W.opacity+"; stroke-linecap: "+W.wireframe_linecap+"; stroke-linejoin: "+W.wireframe_linejoin):u.setAttribute("style","fill: "+v.__styleString+"; fill-opacity: "+W.opacity);b.appendChild(u)}function d(U,O,ba,ca,W, +R,X){u=e(F++);u.setAttribute("d","M "+U.positionScreen.x+" "+U.positionScreen.y+" L "+O.positionScreen.x+" "+O.positionScreen.y+" L "+ba.positionScreen.x+","+ba.positionScreen.y+" L "+ca.positionScreen.x+","+ca.positionScreen.y+"z");if(R instanceof THREE.MeshBasicMaterial)v.__styleString=R.color.__styleString;else if(R instanceof THREE.MeshLambertMaterial)if(I){L.r=k.r;L.g=k.g;L.b=k.b;a(X,W,L);v.r=R.color.r*L.r;v.g=R.color.g*L.g;v.b=R.color.b*L.b;v.updateStyleString()}else v.__styleString=R.color.__styleString; +else if(R instanceof THREE.MeshDepthMaterial){m=1-R.__2near/(R.__farPlusNear-W.z*R.__farMinusNear);v.setRGB(m,m,m)}else R instanceof THREE.MeshNormalMaterial&&v.setRGB(g(W.normalWorld.x),g(W.normalWorld.y),g(W.normalWorld.z));R.wireframe?u.setAttribute("style","fill: none; stroke: "+v.__styleString+"; stroke-width: "+R.wireframe_linewidth+"; stroke-opacity: "+R.opacity+"; stroke-linecap: "+R.wireframe_linecap+"; stroke-linejoin: "+R.wireframe_linejoin):u.setAttribute("style","fill: "+v.__styleString+ +"; fill-opacity: "+R.opacity);b.appendChild(u)}function e(U){if(q[U]==null){q[U]=document.createElementNS("http://www.w3.org/2000/svg","path");T==0&&q[U].setAttribute("shape-rendering","crispEdges");return q[U]}return q[U]}function g(U){return U<0?Math.min((1+U)*0.5,0.5):0.5+Math.min(U*0.5,0.5)}var f=null,h=new THREE.Projector,b=document.createElementNS("http://www.w3.org/2000/svg","svg"),j,l,t,A,w,o,p,C,H=new THREE.Rectangle,y=new THREE.Rectangle,I=false,v=new THREE.Color(16777215),L=new THREE.Color(16777215), +k=new THREE.Color(0),B=new THREE.Color(0),n=new THREE.Color(0),m,z=new THREE.Vector3,q=[],D=[],x=[],u,F,J,G,T=1;this.domElement=b;this.sortElements=this.sortObjects=this.autoClear=true;this.setQuality=function(U){switch(U){case "high":T=1;break;case "low":T=0}};this.setSize=function(U,O){j=U;l=O;t=j/2;A=l/2;b.setAttribute("viewBox",-t+" "+-A+" "+j+" "+l);b.setAttribute("width",j);b.setAttribute("height",l);H.set(-t,-A,t,A)};this.clear=function(){for(;b.childNodes.length>0;)b.removeChild(b.childNodes[0])}; +this.render=function(U,O){var ba,ca,W,R,X,Y,M,S;this.autoClear&&this.clear();f=h.projectScene(U,O,this.sortElements);G=J=F=0;if(I=U.lights.length>0){M=U.lights;k.setRGB(0,0,0);B.setRGB(0,0,0);n.setRGB(0,0,0);ba=0;for(ca=M.length;ba0){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLUVBuffer);b.bufferData(b.ARRAY_BUFFER,W,u)}if(qa&&ca>0){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLUV2Buffer);b.bufferData(b.ARRAY_BUFFER,ba,u)}if(ia){b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,k.__webGLFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER, -N,u);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,k.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,L,u)}};this.setLineBuffers=function(k,w){var u,n,o,v=k.vertices,D=k.colors,y=v.length,C=D.length,z=k.__vertexArray,F=k.__colorArray,J=k.__dirtyColors;if(k.__dirtyVertices){for(u=0;u0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+v.maxDirLights,"#define MAX_POINT_LIGHTS "+v.maxPointLights,v.map?"#define USE_MAP":"",v.env_map?"#define USE_ENVMAP": -"",v.light_map?"#define USE_LIGHTMAP":"",v.vertex_colors?"#define USE_COLOR":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\n"].join("\n");b.attachShader(u,g("fragment",o+C));b.attachShader(u,g("vertex",v+w));b.linkProgram(u);b.getProgramParameter(u,b.LINK_STATUS)|| -alert("Could not initialise shaders\nVALIDATE_STATUS: "+b.getProgramParameter(u,b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");u.uniforms={};u.attributes={};k.program=u;u=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition"];for(n in k.uniforms)u.push(n);n=k.program;C=0;for(w=u.length;C=0){b.bindBuffer(b.ARRAY_BUFFER,o.__webGLColorBuffer);b.vertexAttribPointer(k.color,3,b.FLOAT,false,0,0);b.enableVertexAttribArray(k.color)}if(k.normal>=0){b.bindBuffer(b.ARRAY_BUFFER,o.__webGLNormalBuffer);b.vertexAttribPointer(k.normal,3,b.FLOAT, -false,0,0);b.enableVertexAttribArray(k.normal)}if(k.tangent>=0){b.bindBuffer(b.ARRAY_BUFFER,o.__webGLTangentBuffer);b.vertexAttribPointer(k.tangent,4,b.FLOAT,false,0,0);b.enableVertexAttribArray(k.tangent)}if(k.uv>=0)if(o.__webGLUVBuffer){b.bindBuffer(b.ARRAY_BUFFER,o.__webGLUVBuffer);b.vertexAttribPointer(k.uv,2,b.FLOAT,false,0,0);b.enableVertexAttribArray(k.uv)}else b.disableVertexAttribArray(k.uv);if(k.uv2>=0)if(o.__webGLUV2Buffer){b.bindBuffer(b.ARRAY_BUFFER,o.__webGLUV2Buffer);b.vertexAttribPointer(k.uv2, -2,b.FLOAT,false,0,0);b.enableVertexAttribArray(k.uv2)}else b.disableVertexAttribArray(k.uv2);if(v instanceof THREE.Mesh)if(n.wireframe){b.lineWidth(n.wireframe_linewidth);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,o.__webGLLineBuffer);b.drawElements(b.LINES,o.__webGLLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,o.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,o.__webGLFaceCount,b.UNSIGNED_SHORT,0)}else if(v instanceof THREE.Line){v=v.type==THREE.LineStrip?b.LINE_STRIP:b.LINES;b.lineWidth(n.linewidth); -b.drawArrays(v,0,o.__webGLLineCount)}else v instanceof THREE.ParticleSystem&&b.drawArrays(b.POINTS,0,o.__webGLParticleCount)};this.renderPass=function(k,w,u,n,o,v,D){var y,C,z,F,J;z=0;for(F=n.materials.length;z=0;u--){n=k.__webGLObjects[u].object; -w==n&&k.__webGLObjects.splice(u,1)}};this.setupMatrices=function(k,w){k._modelViewMatrix.multiplyToArray(w.matrix,k.matrix,k._modelViewMatrixArray);k._normalMatrix=THREE.Matrix4.makeInvert3x3(k._modelViewMatrix).transposeIntoArray(k._normalMatrixArray)};this.setDepthTest=function(k){k?b.enable(b.DEPTH_TEST):b.disable(b.DEPTH_TEST)};this.setFaceCulling=function(k,w){if(k){!w||w=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);if(k=="back")b.cullFace(b.BACK);else k=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK); +b,j=null,l=null,t=null,A=null,w=null,o=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],p=new THREE.Matrix4,C=new Float32Array(16),H=new Float32Array(16),y=new THREE.Vector4,I=true,v=new THREE.Color(0),L=0;if(a){if(a.antialias!==undefined)I=a.antialias;a.clearColor!==undefined&&v.setHex(a.clearColor);if(a.clearAlpha!==undefined)L=a.clearAlpha}this.domElement=h;this.autoClear=true;(function(k,B,n){try{b=h.getContext("experimental-webgl", +{antialias:k})}catch(m){console.log(m)}if(!b){alert("WebGL not supported");throw"cannot create webgl context";}b.clearColor(0,0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA);b.clearColor(B.r,B.g,B.b,n);_cullEnabled=true})(I,v,L);this.context=b;this.lights={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[]}};this.setSize= +function(k,B){h.width=k;h.height=B;b.viewport(0,0,h.width,h.height)};this.setClearColorHex=function(k,B){var n=new THREE.Color(k);b.clearColor(n.r,n.g,n.b,B)};this.setClearColor=function(k,B){b.clearColor(k.r,k.g,k.b,B)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|b.DEPTH_BUFFER_BIT)};this.setupLights=function(k,B){var n,m,z,q=0,D=0,x=0,u,F,J,G=this.lights,T=G.directional.colors,U=G.directional.positions,O=G.point.colors,ba=G.point.positions,ca=0,W=0;n=z=z=0;for(m=B.length;n0){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLUVBuffer);b.bufferData(b.ARRAY_BUFFER,aa,n)}if(ra&&ca>0){b.bindBuffer(b.ARRAY_BUFFER,k.__webGLUV2Buffer);b.bufferData(b.ARRAY_BUFFER, +ja,n)}if(ta){b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,k.__webGLFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,N,n);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,k.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,V,n)}};this.setLineBuffers=function(k,B){var n,m,z,q=k.vertices,D=k.colors,x=q.length,u=D.length,F=k.__vertexArray,J=k.__colorArray,G=k.__dirtyColors;if(k.__dirtyVertices){for(n=0;n0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+q.maxDirLights,"#define MAX_POINT_LIGHTS "+ +q.maxPointLights,q.map?"#define USE_MAP":"",q.env_map?"#define USE_ENVMAP":"",q.light_map?"#define USE_LIGHTMAP":"",q.vertex_colors?"#define USE_COLOR":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\n"].join("\n");b.attachShader(n,g("fragment",z+u));b.attachShader(n, +g("vertex",q+B));b.linkProgram(n);b.getProgramParameter(n,b.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+b.getProgramParameter(n,b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");n.uniforms={};n.attributes={};k.program=n;n=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition"];for(m in k.uniforms)n.push(m);m=k.program;u=0;for(B=n.length;u=0){b.bindBuffer(b.ARRAY_BUFFER,z.__webGLColorBuffer);b.vertexAttribPointer(k.color,3,b.FLOAT,false,0,0);b.enableVertexAttribArray(k.color)}if(k.normal>=0){b.bindBuffer(b.ARRAY_BUFFER,z.__webGLNormalBuffer);b.vertexAttribPointer(k.normal,3,b.FLOAT, +false,0,0);b.enableVertexAttribArray(k.normal)}if(k.tangent>=0){b.bindBuffer(b.ARRAY_BUFFER,z.__webGLTangentBuffer);b.vertexAttribPointer(k.tangent,4,b.FLOAT,false,0,0);b.enableVertexAttribArray(k.tangent)}if(k.uv>=0)if(z.__webGLUVBuffer){b.bindBuffer(b.ARRAY_BUFFER,z.__webGLUVBuffer);b.vertexAttribPointer(k.uv,2,b.FLOAT,false,0,0);b.enableVertexAttribArray(k.uv)}else b.disableVertexAttribArray(k.uv);if(k.uv2>=0)if(z.__webGLUV2Buffer){b.bindBuffer(b.ARRAY_BUFFER,z.__webGLUV2Buffer);b.vertexAttribPointer(k.uv2, +2,b.FLOAT,false,0,0);b.enableVertexAttribArray(k.uv2)}else b.disableVertexAttribArray(k.uv2);if(q instanceof THREE.Mesh)if(m.wireframe){b.lineWidth(m.wireframe_linewidth);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,z.__webGLLineBuffer);b.drawElements(b.LINES,z.__webGLLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,z.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,z.__webGLFaceCount,b.UNSIGNED_SHORT,0)}else if(q instanceof THREE.Line){q=q.type==THREE.LineStrip?b.LINE_STRIP:b.LINES;b.lineWidth(m.linewidth); +b.drawArrays(q,0,z.__webGLLineCount)}else q instanceof THREE.ParticleSystem&&b.drawArrays(b.POINTS,0,z.__webGLParticleCount)};this.renderPass=function(k,B,n,m,z,q,D){var x,u,F,J,G;F=0;for(J=m.materials.length;F=0;n--){m=k.__webGLObjects[n].object; +B==m&&k.__webGLObjects.splice(n,1)}};this.setupMatrices=function(k,B){k._modelViewMatrix.multiplyToArray(B.matrix,k.matrix,k._modelViewMatrixArray);k._normalMatrix=THREE.Matrix4.makeInvert3x3(k._modelViewMatrix).transposeIntoArray(k._normalMatrixArray)};this.setDepthTest=function(k){k?b.enable(b.DEPTH_TEST):b.disable(b.DEPTH_TEST)};this.setFaceCulling=function(k,B){if(k){!B||B=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);if(k=="back")b.cullFace(b.BACK);else k=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK); b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)};this.supportsVertexTextures=function(){return b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0}}; THREE.Snippets={fog_pars_fragment:"#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif",fog_fragment:"#ifdef USE_FOG\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n#ifdef FOG_EXP2\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n#else\nfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n#endif\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float reflectivity;\nuniform samplerCube env_map;\nuniform int combine;\n#endif", envmap_fragment:"#ifdef USE_ENVMAP\nvec4 cubeColor = textureCube( env_map, vec3( -vReflect.x, vReflect.yz ) );\nif ( combine == 1 ) {\ngl_FragColor = vec4( mix( gl_FragColor.xyz, cubeColor.xyz, reflectivity ), opacity );\n} else {\ngl_FragColor = gl_FragColor * cubeColor;\n}\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float refraction_ratio;\nuniform bool useRefract;\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nif ( useRefract ) {\nvReflect = refract( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ), refraction_ratio );\n} else {\nvReflect = reflect( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ) );\n}\n#endif", @@ -229,17 +229,17 @@ THREE.RenderableFace3=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=ne THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.materials=null}; THREE.Detector={canvas:!!document.createElement("canvas").getContext,webgl:window.Uint8Array!=undefined,workers:!!window.Worker,addGetWebGLMessage:function(a){var c=document.body,d="oldie";if(a){if(a.parent!==undefined)c=a.parent;if(a.id!==undefined)d=a.id}a=document.createElement("center");var e=document.createElement("div");e.innerHTML='Sorry, your browser doesn\'t support WebGL
\n
\nPlease try in\nChrome 9+ /\nFirefox 4+ /\nSafari OSX 10.6+';e.id= d;d=e.style;d.fontFamily="monospace";d.fontSize="13px";d.textAlign="center";d.background="#eee";d.color="#000";d.padding="1em";d.width="475px";d.margin="5em auto 0";a.appendChild(e);c.appendChild(a);return e}}; -var GeometryUtils={merge:function(a,c){var d=c instanceof THREE.Mesh,e=a.vertices.length,g=d?c.geometry:c,f=a.vertices,h=g.vertices,b=a.faces,j=g.faces,l=a.uvs;g=g.uvs;d&&c.autoUpdateMatrix&&c.updateMatrix();for(var p=0,A=h.length;p25)f=25;g=(f-1)*0.5;d=Array(f);for(c=e=0;c25)f=25;g=(f-1)*0.5;d=Array(f);for(c=e=0;c0||(p=this.vertices.push(new THREE.Vertex(new THREE.Vector3(A,b,q)))-1);l.push(p)}c.push(l)}var m,B,E;g=c.length;for(d=0;d0)for(e=0;e1){m=this.vertices[h].position.clone(); -B=this.vertices[j].position.clone();E=this.vertices[l].position.clone();m.normalize();B.normalize();E.normalize();this.faces.push(new THREE.Face3(h,j,l,[new THREE.Vector3(m.x,m.y,m.z),new THREE.Vector3(B.x,B.y,B.z),new THREE.Vector3(E.x,E.y,E.z)]));this.uvs.push([p,A,H])}}}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.sortFacesByMaterial();this.boundingSphere={radius:a}};Sphere.prototype=new THREE.Geometry;Sphere.prototype.constructor=Sphere; +var Sphere=function(a,c,d){THREE.Geometry.call(this);var e,g=Math.PI,f=Math.max(3,c||8),h=Math.max(2,d||6);c=[];for(d=0;d0||(t=this.vertices.push(new THREE.Vertex(new THREE.Vector3(A,b,w)))-1);l.push(t)}c.push(l)}var o,p,C;g=c.length;for(d=0;d0)for(e=0;e1){o=this.vertices[h].position.clone(); +p=this.vertices[j].position.clone();C=this.vertices[l].position.clone();o.normalize();p.normalize();C.normalize();this.faces.push(new THREE.Face3(h,j,l,[new THREE.Vector3(o.x,o.y,o.z),new THREE.Vector3(p.x,p.y,p.z),new THREE.Vector3(C.x,C.y,C.z)]));this.uvs.push([t,A,H])}}}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.sortFacesByMaterial();this.boundingSphere={radius:a}};Sphere.prototype=new THREE.Geometry;Sphere.prototype.constructor=Sphere; var Torus=function(a,c,d,e){this.radius=a||100;this.tube=c||40;this.segmentsR=d||8;this.segmentsT=e||6;a=[];THREE.Geometry.call(this);for(c=0;c<=this.segmentsR;++c)for(d=0;d<=this.segmentsT;++d){e=d/this.segmentsT*2*Math.PI;var g=c/this.segmentsR*2*Math.PI;this.vertices.push(new THREE.Vertex(new THREE.Vector3((this.radius+this.tube*Math.cos(g))*Math.cos(e),(this.radius+this.tube*Math.cos(g))*Math.sin(e),this.tube*Math.sin(g))));a.push([d/this.segmentsT,1-c/this.segmentsR])}for(c=1;c<=this.segmentsR;++c)for(d= 1;d<=this.segmentsT;++d){e=(this.segmentsT+1)*c+d;g=(this.segmentsT+1)*c+d-1;var f=(this.segmentsT+1)*(c-1)+d-1,h=(this.segmentsT+1)*(c-1)+d;this.faces.push(new THREE.Face4(e,g,f,h));this.uvs.push([new THREE.UV(a[e][0],a[e][1]),new THREE.UV(a[g][0],a[g][1]),new THREE.UV(a[f][0],a[f][1]),new THREE.UV(a[h][0],a[h][1])])}delete a;this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.sortFacesByMaterial()};Torus.prototype=new THREE.Geometry;Torus.prototype.constructor=Torus; -var Icosahedron=function(a){function c(A,q,m){var B=Math.sqrt(A*A+q*q+m*m);return g.vertices.push(new THREE.Vertex(new THREE.Vector3(A/B,q/B,m/B)))-1}function d(A,q,m,B){B.faces.push(new THREE.Face3(A,q,m))}function e(A,q){var m=g.vertices[A].position,B=g.vertices[q].position;return c((m.x+B.x)/2,(m.y+B.y)/2,(m.z+B.z)/2)}var g=this,f=new THREE.Geometry,h;this.subdivisions=a||0;THREE.Geometry.call(this);a=(1+Math.sqrt(5))/2;c(-1,a,0);c(1,a,0);c(-1,-a,0);c(1,-a,0);c(0,-1,a);c(0,1,a);c(0,-1,-a);c(0, -1,-a);c(a,0,-1);c(a,0,1);c(-a,0,-1);c(-a,0,1);d(0,11,5,f);d(0,5,1,f);d(0,1,7,f);d(0,7,10,f);d(0,10,11,f);d(1,5,9,f);d(5,11,4,f);d(11,10,2,f);d(10,7,6,f);d(7,1,8,f);d(3,9,4,f);d(3,4,2,f);d(3,2,6,f);d(3,6,8,f);d(3,8,9,f);d(4,9,5,f);d(2,4,11,f);d(6,2,10,f);d(8,6,7,f);d(9,8,1,f);for(a=0;a=this.maxCount-3&&b(this)};this.begin= -function(){this.count=0;this.hasNormal=this.hasPos=false};this.end=function(d){if(this.count!=0){for(var e=this.count*3;ethis.size-1)j=this.size-1;var q=Math.floor(l-b);if(q<1)q=1;l=Math.floor(l+b);if(l>this.size-1)l=this.size-1;var m=Math.floor(p-b);if(m<1)m=1;b=Math.floor(p+b); -if(b>this.size-1)b=this.size-1;var B,E,H,x,I,t;for(A=A;A0)this.field[H+B]+=x}}}};this.addPlaneX=function(d,e){var g,f,h,b,j,l=this.size,p=this.yd,A=this.zd,q=this.field,m=l*Math.sqrt(d/e);if(m>l)m=l;for(g=0;g0)for(f=0;fp)B=p;for(f=0;f0){j=f*A;for(g=0;gsize)dist=size;for(h=0;h0){j=zd*h;for(f=0;fthis.size-1)j=this.size-1;var w=Math.floor(l-b);if(w<1)w=1;l=Math.floor(l+b);if(l>this.size-1)l=this.size-1;var o=Math.floor(t-b);if(o<1)o=1;b=Math.floor(t+b); +if(b>this.size-1)b=this.size-1;var p,C,H,y,I,v;for(A=A;A0)this.field[H+p]+=y}}}};this.addPlaneX=function(d,e){var g,f,h,b,j,l=this.size,t=this.yd,A=this.zd,w=this.field,o=l*Math.sqrt(d/e);if(o>l)o=l;for(g=0;g0)for(f=0;ft)p=t;for(f=0;f0){j=f*A;for(g=0;gsize)dist=size;for(h=0;h0){j=zd*h;for(f=0;f>7)-127;L=($&127)<<16|X<<8|L;if(L==0&&ia==-127)return 0;return(1-2*(ma>>7))*(1+L*Math.pow(2,-23))*Math.pow(2,ia)}function b(G,N){var L=p(G,N),X=p(G,N+1),$=p(G,N+2);return(p(G,N+3)<<24)+($<<16)+(X<<8)+L}function j(G,N){var L=p(G,N);return(p(G,N+1)<<8)+L}function l(G,N){var L=p(G,N);return L>127?L-256:L}function p(G,N){return G.charCodeAt(N)&255}function A(G){var N,L,X;N= -b(a,G);L=b(a,G+u);X=b(a,G+n);G=j(a,G+o);THREE.Loader.prototype.f3(x,N,L,X,G)}function q(G){var N,L,X,$,ma,ia;N=b(a,G);L=b(a,G+u);X=b(a,G+n);$=j(a,G+o);ma=b(a,G+v);ia=b(a,G+D);G=b(a,G+y);THREE.Loader.prototype.f3n(x,k,N,L,X,$,ma,ia,G)}function m(G){var N,L,X,$;N=b(a,G);L=b(a,G+C);X=b(a,G+z);$=b(a,G+F);G=j(a,G+J);THREE.Loader.prototype.f4(x,N,L,X,$,G)}function B(G){var N,L,X,$,ma,ia,qa,ta;N=b(a,G);L=b(a,G+C);X=b(a,G+z);$=b(a,G+F);ma=j(a,G+J);ia=b(a,G+M);qa=b(a,G+Q);ta=b(a,G+S);G=b(a,G+U);THREE.Loader.prototype.f4n(x, -k,N,L,X,$,ma,ia,qa,ta,G)}function E(G){var N,L;N=b(a,G);L=b(a,G+ca);G=b(a,G+da);THREE.Loader.prototype.uv3(x.uvs,w[N*2],w[N*2+1],w[L*2],w[L*2+1],w[G*2],w[G*2+1])}function H(G){var N,L,X;N=b(a,G);L=b(a,G+T);X=b(a,G+O);G=b(a,G+Z);THREE.Loader.prototype.uv4(x.uvs,w[N*2],w[N*2+1],w[L*2],w[L*2+1],w[X*2],w[X*2+1],w[G*2],w[G*2+1])}var x=this,I=0,t,k=[],w=[],u,n,o,v,D,y,C,z,F,J,M,Q,S,U,ca,da,T,O,Z,V,K,W,ba,ha,ea;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(x,e,f);t={signature:a.substr(I, -8),header_bytes:p(a,I+8),vertex_coordinate_bytes:p(a,I+9),normal_coordinate_bytes:p(a,I+10),uv_coordinate_bytes:p(a,I+11),vertex_index_bytes:p(a,I+12),normal_index_bytes:p(a,I+13),uv_index_bytes:p(a,I+14),material_index_bytes:p(a,I+15),nvertices:b(a,I+16),nnormals:b(a,I+16+4),nuvs:b(a,I+16+8),ntri_flat:b(a,I+16+12),ntri_smooth:b(a,I+16+16),ntri_flat_uv:b(a,I+16+20),ntri_smooth_uv:b(a,I+16+24),nquad_flat:b(a,I+16+28),nquad_smooth:b(a,I+16+32),nquad_flat_uv:b(a,I+16+36),nquad_smooth_uv:b(a,I+16+40)}; -I+=t.header_bytes;u=t.vertex_index_bytes;n=t.vertex_index_bytes*2;o=t.vertex_index_bytes*3;v=t.vertex_index_bytes*3+t.material_index_bytes;D=t.vertex_index_bytes*3+t.material_index_bytes+t.normal_index_bytes;y=t.vertex_index_bytes*3+t.material_index_bytes+t.normal_index_bytes*2;C=t.vertex_index_bytes;z=t.vertex_index_bytes*2;F=t.vertex_index_bytes*3;J=t.vertex_index_bytes*4;M=t.vertex_index_bytes*4+t.material_index_bytes;Q=t.vertex_index_bytes*4+t.material_index_bytes+t.normal_index_bytes;S=t.vertex_index_bytes* -4+t.material_index_bytes+t.normal_index_bytes*2;U=t.vertex_index_bytes*4+t.material_index_bytes+t.normal_index_bytes*3;ca=t.uv_index_bytes;da=t.uv_index_bytes*2;T=t.uv_index_bytes;O=t.uv_index_bytes*2;Z=t.uv_index_bytes*3;f=t.vertex_index_bytes*3+t.material_index_bytes;ea=t.vertex_index_bytes*4+t.material_index_bytes;V=t.ntri_flat*f;K=t.ntri_smooth*(f+t.normal_index_bytes*3);W=t.ntri_flat_uv*(f+t.uv_index_bytes*3);ba=t.ntri_smooth_uv*(f+t.normal_index_bytes*3+t.uv_index_bytes*3);ha=t.nquad_flat*ea; -f=t.nquad_smooth*(ea+t.normal_index_bytes*4);ea=t.nquad_flat_uv*(ea+t.uv_index_bytes*4);I+=function(G){var N,L,X,$=t.vertex_coordinate_bytes*3,ma=G+t.nvertices*$;for(G=G;G>7)-127;N=(da&127)<<16|V<<8|N;if(N==0&&ia==-127)return 0;return(1-2*(ga>>7))*(1+N*Math.pow(2,-23))*Math.pow(2,ia)}function b(E,K){var N=t(E,K),V=t(E,K+1),da=t(E,K+2);return(t(E,K+3)<<24)+(da<<16)+(V<<8)+N}function j(E,K){var N=t(E,K);return(t(E,K+1)<<8)+N}function l(E,K){var N=t(E,K);return N>127?N-256:N}function t(E,K){return E.charCodeAt(K)&255}function A(E){var K, +N,V;K=b(a,E);N=b(a,E+B);V=b(a,E+n);E=j(a,E+m);THREE.Loader.prototype.f3(y,K,N,V,E)}function w(E){var K,N,V,da,ga,ia;K=b(a,E);N=b(a,E+B);V=b(a,E+n);da=j(a,E+m);ga=b(a,E+z);ia=b(a,E+q);E=b(a,E+D);THREE.Loader.prototype.f3n(y,L,K,N,V,da,ga,ia,E)}function o(E){var K,N,V,da;K=b(a,E);N=b(a,E+x);V=b(a,E+u);da=b(a,E+F);E=j(a,E+J);THREE.Loader.prototype.f4(y,K,N,V,da,E)}function p(E){var K,N,V,da,ga,ia,ta,ra;K=b(a,E);N=b(a,E+x);V=b(a,E+u);da=b(a,E+F);ga=j(a,E+J);ia=b(a,E+G);ta=b(a,E+T);ra=b(a,E+U);E=b(a,E+ +O);THREE.Loader.prototype.f4n(y,L,K,N,V,da,ga,ia,ta,ra,E)}function C(E){var K,N;K=b(a,E);N=b(a,E+ba);E=b(a,E+ca);THREE.Loader.prototype.uv3(y.uvs,k[K*2],k[K*2+1],k[N*2],k[N*2+1],k[E*2],k[E*2+1])}function H(E){var K,N,V;K=b(a,E);N=b(a,E+W);V=b(a,E+R);E=b(a,E+X);THREE.Loader.prototype.uv4(y.uvs,k[K*2],k[K*2+1],k[N*2],k[N*2+1],k[V*2],k[V*2+1],k[E*2],k[E*2+1])}var y=this,I=0,v,L=[],k=[],B,n,m,z,q,D,x,u,F,J,G,T,U,O,ba,ca,W,R,X,Y,M,S,aa,ja,ha;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(y, +e,f);v={signature:a.substr(I,8),header_bytes:t(a,I+8),vertex_coordinate_bytes:t(a,I+9),normal_coordinate_bytes:t(a,I+10),uv_coordinate_bytes:t(a,I+11),vertex_index_bytes:t(a,I+12),normal_index_bytes:t(a,I+13),uv_index_bytes:t(a,I+14),material_index_bytes:t(a,I+15),nvertices:b(a,I+16),nnormals:b(a,I+16+4),nuvs:b(a,I+16+8),ntri_flat:b(a,I+16+12),ntri_smooth:b(a,I+16+16),ntri_flat_uv:b(a,I+16+20),ntri_smooth_uv:b(a,I+16+24),nquad_flat:b(a,I+16+28),nquad_smooth:b(a,I+16+32),nquad_flat_uv:b(a,I+16+36), +nquad_smooth_uv:b(a,I+16+40)};I+=v.header_bytes;B=v.vertex_index_bytes;n=v.vertex_index_bytes*2;m=v.vertex_index_bytes*3;z=v.vertex_index_bytes*3+v.material_index_bytes;q=v.vertex_index_bytes*3+v.material_index_bytes+v.normal_index_bytes;D=v.vertex_index_bytes*3+v.material_index_bytes+v.normal_index_bytes*2;x=v.vertex_index_bytes;u=v.vertex_index_bytes*2;F=v.vertex_index_bytes*3;J=v.vertex_index_bytes*4;G=v.vertex_index_bytes*4+v.material_index_bytes;T=v.vertex_index_bytes*4+v.material_index_bytes+ +v.normal_index_bytes;U=v.vertex_index_bytes*4+v.material_index_bytes+v.normal_index_bytes*2;O=v.vertex_index_bytes*4+v.material_index_bytes+v.normal_index_bytes*3;ba=v.uv_index_bytes;ca=v.uv_index_bytes*2;W=v.uv_index_bytes;R=v.uv_index_bytes*2;X=v.uv_index_bytes*3;f=v.vertex_index_bytes*3+v.material_index_bytes;ha=v.vertex_index_bytes*4+v.material_index_bytes;Y=v.ntri_flat*f;M=v.ntri_smooth*(f+v.normal_index_bytes*3);S=v.ntri_flat_uv*(f+v.uv_index_bytes*3);aa=v.ntri_smooth_uv*(f+v.normal_index_bytes* +3+v.uv_index_bytes*3);ja=v.nquad_flat*ha;f=v.nquad_smooth*(ha+v.normal_index_bytes*4);ha=v.nquad_flat_uv*(ha+v.uv_index_bytes*4);I+=function(E){var K,N,V,da=v.vertex_coordinate_bytes*3,ga=E+v.nvertices*da;for(E=E;E + + + three.js - io - blender - vertex colors - webgl + + + + + +
+
three.js - vertex colors - blender export - webgl
+ + + + + + + + diff --git a/examples/obj/cubecolors/.htaccess b/examples/obj/cubecolors/.htaccess new file mode 100644 index 00000000..746a0633 --- /dev/null +++ b/examples/obj/cubecolors/.htaccess @@ -0,0 +1,7 @@ + +SetOutputFilter DEFLATE + + + +SetOutputFilter DEFLATE + diff --git a/examples/obj/cubecolors/cubecolors.blend b/examples/obj/cubecolors/cubecolors.blend new file mode 100644 index 0000000000000000000000000000000000000000..c46e779c8d3bf5245b3bb70c14516c442ef9f0ae GIT binary patch literal 555964 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%0DD(h2{ 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 0.0 and (m.specular_color[0] > 0 or m.specular_color[1] > 0 or m.specular_color[2] > 0): + material['shading'] = "Phong" + else: + material['shading'] = "Lambert" return materials -def generate_materials_string(mesh, scene): +def generate_materials_string(mesh, scene, use_colors): random.seed(42) # to get well defined color order for debug materials @@ -508,12 +564,12 @@ def generate_materials_string(mesh, scene): # extract real materials from the mesh mtl.update(extract_materials(mesh, scene)) - return generate_materials(mtl, materials) + return generate_materials(mtl, materials, use_colors) # ##################################################### # ASCII exporter # ##################################################### -def generate_ascii_model(mesh, scene, use_normals, use_uv_coords, align_model): +def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, align_model): vertices = mesh.vertices[:] @@ -527,6 +583,7 @@ def generate_ascii_model(mesh, scene, use_normals, use_uv_coords, align_model): sfaces = sort_faces(mesh.faces, use_normals, use_uv_coords) normals = extract_vertex_normals(mesh, use_normals) + colors = extract_vertex_colors(mesh, use_colors) uvs = extract_uvs(mesh, use_uv_coords) text = TEMPLATE_FILE_ASCII % { @@ -544,8 +601,9 @@ def generate_ascii_model(mesh, scene, use_normals, use_uv_coords, align_model): "uvs" : generate_uvs(uvs, use_uv_coords), "normals" : generate_normals(normals, use_normals), + "colors" : generate_vertex_colors(colors, use_colors), - "materials" : generate_materials_string(mesh, scene), + "materials" : generate_materials_string(mesh, scene, use_colors), "nvertex" : len(mesh.vertices), "nface" : len(mesh.faces), @@ -557,7 +615,7 @@ def generate_ascii_model(mesh, scene, use_normals, use_uv_coords, align_model): # ##################################################### # Main # ##################################################### -def save(operator, context, filepath="", use_modifiers=True, use_normals=True, use_uv_coords=True, align_model=1): +def save(operator, context, filepath="", use_modifiers=True, use_normals=True, use_colors=True, use_uv_coords=True, align_model=1): def rvec3d(v): return round(v[0], 6), round(v[1], 6), round(v[2], 6) @@ -594,6 +652,10 @@ def save(operator, context, filepath="", use_modifiers=True, use_normals=True, u faceUV = (len(mesh.uv_textures) > 0) vertexUV = (len(mesh.sticky) > 0) + vertexColors = len(mesh.vertex_colors) > 0 + + if not vertexColors: + use_colors = False if (not faceUV) and (not vertexUV): use_uv_coords = False @@ -603,7 +665,12 @@ def save(operator, context, filepath="", use_modifiers=True, use_normals=True, u if not active_uv_layer: use_uv_coords = False - text = generate_ascii_model(mesh, scene, use_normals, use_uv_coords, align_model) + if vertexColors: + active_col_layer = mesh.vertex_colors.active + if not active_col_layer: + use_colors = False + + text = generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, align_model) file = open(filepath, 'w') file.write(text) file.close()