Three.js 208.8 KB
Newer Older
M
Mr.doob 已提交
1
// Three.js r35 - http://github.com/mrdoob/three.js
2
var THREE=THREE||{};THREE.Color=function(a){this.setHex(a)};
A
alteredq 已提交
3
THREE.Color.prototype={autoUpdate:!0,setRGB:function(a,c,b){this.r=a;this.g=c;this.b=b;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHSV:function(a,c,b){var d,e,g,h,j,k;if(b==0)d=e=g=0;else{h=Math.floor(a*6);j=a*6-h;a=b*(1-c);k=b*(1-c*j);c=b*(1-c*(1-j));switch(h){case 1:d=k;e=b;g=a;break;case 2:d=a;e=b;g=c;break;case 3:d=a;e=k;g=b;break;case 4:d=c;e=a;g=b;break;case 5:d=b;e=a;g=k;break;case 6:case 0:d=b;e=c;g=a}}this.r=d;this.g=e;this.b=g;if(this.autoUpdate){this.updateHex();
4
this.updateStyleString()}},setHex:function(a){this.hex=~~a&16777215;if(this.autoUpdate){this.updateRGB();this.updateStyleString()}},updateHex:function(){this.hex=~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},updateRGB: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)}};
M
Mikael Emtinger 已提交
5 6 7 8 9 10 11 12 13 14
THREE.Vector2=function(a,c){this.set(a||0,c||0)};
THREE.Vector2.prototype={set:function(a,c){this.x=a;this.y=c;return this},copy:function(a){this.set(a.x,a.y);return this},addSelf:function(a){this.set(this.x+a.x,this.y+a.y);return this},add:function(a,c){this.set(a.x+c.x,a.y+c.y);return this},subSelf:function(a){this.set(this.x-a.x,this.y-a.y);return this},sub:function(a,c){this.set(a.x-c.x,a.y-c.y);return this},multiplyScalar:function(a){this.set(this.x*a,this.y*a);return this},negate:function(){this.set(-this.x,-this.y);return this},unit:function(){this.multiplyScalar(1/
this.length());return this},length:function(){return Math.sqrt(this.lengthSq())},lengthSq:function(){return this.x*this.x+this.y*this.y},clone:function(){return new THREE.Vector2(this.x,this.y)}};THREE.Vector3=function(a,c,b){this.set(a||0,c||0,b||0)};
THREE.Vector3.prototype={set:function(a,c,b){this.x=a;this.y=c;this.z=b;return this},copy:function(a){this.set(a.x,a.y,a.z);return this},add:function(a,c){this.set(a.x+c.x,a.y+c.y,a.z+c.z);return this},addSelf:function(a){this.set(this.x+a.x,this.y+a.y,this.z+a.z);return this},addScalar:function(a){this.set(this.x+a,this.y+a,this.z+a);return this},sub:function(a,c){this.set(a.x-c.x,a.y-c.y,a.z-c.z);return this},subSelf:function(a){this.set(this.x-a.x,this.y-a.y,this.z-a.z);return this},cross:function(a,
c){this.set(a.y*c.z-a.z*c.y,a.z*c.x-a.x*c.z,a.x*c.y-a.y*c.x);return this},crossSelf:function(a){var c=this.x,b=this.y,d=this.z;this.set(b*a.z-d*a.y,d*a.x-c*a.z,c*a.y-b*a.x);return this},multiply:function(a,c){this.set(a.x*c.x,a.y*c.y,a.z*c.z);return this},multiplySelf:function(a){this.set(this.x*a.x,this.y*a.y,this.z*a.z);return this},multiplyScalar:function(a){this.set(this.x*a,this.y*a,this.z*a);return this},divideSelf:function(a){this.set(this.x/a.x,this.y/a.y,this.z/a.z);return this},divideScalar:function(a){this.set(this.x/
a,this.y/a,this.z/a);return this},negate:function(){this.set(-this.x,-this.y,-this.z);return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var c=this.x-a.x,b=this.y-a.y;a=this.z-a.z;return c*c+b*b+a*a},length:function(){return Math.sqrt(this.lengthSq())},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},lengthManhattan:function(){return this.x+this.y+this.z},normalize:function(){var a=
this.length();a>0?this.multiplyScalar(1/a):this.set(0,0,0);return this},setPositionFromMatrix:function(a){this.x=a.n14;this.y=a.n24;this.z=a.n34},setRotationFromMatrix:function(a){this.y=Math.asin(a.n13);var c=Math.cos(this.y);if(Math.abs(c)>1.0E-5){this.x=Math.atan2(-a.n23/c,a.n33/c);this.z=Math.atan2(-a.n13/c,a.n11/c)}else{this.x=0;this.z=Math.atan2(a.n21,a.n22)}},setLength:function(a){return this.normalize().multiplyScalar(a)},isZero:function(){return Math.abs(this.x)<1.0E-4&&Math.abs(this.y)<
1.0E-4&&Math.abs(this.z)<1.0E-4},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)}};THREE.Vector4=function(a,c,b,d){this.set(a||0,c||0,b||0,d||1)};
THREE.Vector4.prototype={set:function(a,c,b,d){this.x=a;this.y=c;this.z=b;this.w=d;return this},copy:function(a){this.set(a.x,a.y,a.z,a.w||1);return this},add:function(a,c){this.set(a.x+c.x,a.y+c.y,a.z+c.z,a.w+c.w);return this},addSelf:function(a){this.set(this.x+a.x,this.y+a.y,this.z+a.z,this.w+a.w);return this},sub:function(a,c){this.set(a.x-c.x,a.y-c.y,a.z-c.z,a.w-c.w);return this},subSelf:function(a){this.set(this.x-a.x,this.y-a.y,this.z-a.z,this.w-a.w);return this},multiplyScalar:function(a){this.set(this.x*
a,this.y*a,this.z*a,this.w*a);return this},divideScalar:function(a){this.set(this.x/a,this.y/a,this.z/a,this.w/a);return this},lerpSelf:function(a,c){this.set(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)}};THREE.Ray=function(a,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3};
M
Mikael Emtinger 已提交
15 16 17
THREE.Ray.prototype={intersectScene:function(a){var c,b,d=a.objects,e=[];a=0;for(c=d.length;a<c;a++){b=d[a];b instanceof THREE.Mesh&&(e=e.concat(this.intersectObject(b)))}e.sort(function(g,h){return g.distance-h.distance});return e},intersectObject:function(a){function c(F,w,G,x){x=x.clone().subSelf(w);G=G.clone().subSelf(w);var N=F.clone().subSelf(w);F=x.dot(x);w=x.dot(G);x=x.dot(N);var L=G.dot(G);G=G.dot(N);N=1/(F*L-w*w);L=(L*x-w*G)*N;F=(F*G-w*x)*N;return L>0&&F>0&&L+F<1}var b,d,e,g,h,j,k,l,o,v,
u,t=a.geometry,y=t.vertices,C=[];b=0;for(d=t.faces.length;b<d;b++){e=t.faces[b];v=this.origin.clone();u=this.direction.clone();k=a.matrixWorld;g=k.multiplyVector3(y[e.a].position.clone());h=k.multiplyVector3(y[e.b].position.clone());j=k.multiplyVector3(y[e.c].position.clone());k=e instanceof THREE.Face4?k.multiplyVector3(y[e.d].position.clone()):null;l=a.matrixRotationWorld.multiplyVector3(e.normal.clone());o=u.dot(l);if(o<0){l=l.dot((new THREE.Vector3).sub(g,v))/o;v=v.addSelf(u.multiplyScalar(l));
if(e instanceof THREE.Face3){if(c(v,g,h,j)){e={distance:this.origin.distanceTo(v),point:v,face:e,object:a};C.push(e)}}else if(e instanceof THREE.Face4&&(c(v,g,h,k)||c(v,h,j,k))){e={distance:this.origin.distanceTo(v),point:v,face:e,object:a};C.push(e)}}}return C}};
A
alteredq 已提交
18 19
THREE.Rectangle=function(){function a(){g=d-c;h=e-b}var c,b,d,e,g,h,j=!0;this.getX=function(){return c};this.getY=function(){return b};this.getWidth=function(){return g};this.getHeight=function(){return h};this.getLeft=function(){return c};this.getTop=function(){return b};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(k,l,o,v){j=!1;c=k;b=l;d=o;e=v;a()};this.addPoint=function(k,l){if(j){j=!1;c=k;b=l;d=k;e=l}else{c=c<k?c:k;b=b<l?b:l;d=d>k?d:k;e=e>l?e:l}a()};
this.add3Points=function(k,l,o,v,u,t){if(j){j=!1;c=k<o?k<u?k:u:o<u?o:u;b=l<v?l<t?l:t:v<t?v:t;d=k>o?k>u?k:u:o>u?o:u;e=l>v?l>t?l:t:v>t?v:t}else{c=k<o?k<u?k<c?k:c:u<c?u:c:o<u?o<c?o:c:u<c?u:c;b=l<v?l<t?l<b?l:b:t<b?t:b:v<t?v<b?v:b:t<b?t:b;d=k>o?k>u?k>d?k:d:u>d?u:d:o>u?o>d?o:d:u>d?u:d;e=l>v?l>t?l>e?l:e:t>e?t:e:v>t?v>e?v:e:t>e?t:e}a()};this.addRectangle=function(k){if(j){j=!1;c=k.getLeft();b=k.getTop();d=k.getRight();e=k.getBottom()}else{c=c<k.getLeft()?c:k.getLeft();b=b<k.getTop()?b:k.getTop();d=d>k.getRight()?
A
alteredq 已提交
20
d:k.getRight();e=e>k.getBottom()?e:k.getBottom()}a()};this.inflate=function(k){c-=k;b-=k;d+=k;e+=k;a()};this.minSelf=function(k){c=c>k.getLeft()?c:k.getLeft();b=b>k.getTop()?b:k.getTop();d=d<k.getRight()?d:k.getRight();e=e<k.getBottom()?e:k.getBottom();a()};this.instersects=function(k){return Math.min(d,k.getRight())-Math.max(c,k.getLeft())>=0&&Math.min(e,k.getBottom())-Math.max(b,k.getTop())>=0};this.empty=function(){j=!0;e=d=b=c=0;a()};this.isEmpty=function(){return j}};
M
Mikael Emtinger 已提交
21
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}};
M
Mikael Emtinger 已提交
22 23
THREE.Matrix4=function(a,c,b,d,e,g,h,j,k,l,o,v,u,t,y,C){this.set(a||1,c||0,b||0,d||0,e||0,g||1,h||0,j||0,k||0,l||0,o||1,v||0,u||0,t||0,y||0,C||1);this.flat=Array(16);this.m33=new THREE.Matrix3};
THREE.Matrix4.prototype={set:function(a,c,b,d,e,g,h,j,k,l,o,v,u,t,y,C){this.n11=a;this.n12=c;this.n13=b;this.n14=d;this.n21=e;this.n22=g;this.n23=h;this.n24=j;this.n31=k;this.n32=l;this.n33=o;this.n34=v;this.n41=u;this.n42=t;this.n43=y;this.n44=C;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a,c,b){var d=THREE.Matrix4.__v1,
M
Mr.doob 已提交
24 25
e=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,c).normalize();if(g.length()===0)g.z=1;d.cross(b,g).normalize();if(d.length()===0){g.x+=1.0E-4;d.cross(b,g).normalize()}e.cross(g,d).normalize();this.n11=d.x;this.n12=e.x;this.n13=g.x;this.n21=d.y;this.n22=e.y;this.n23=g.y;this.n31=d.z;this.n32=e.z;this.n33=g.z;return this},multiplyVector3:function(a){var c=a.x,b=a.y,d=a.z,e=1/(this.n41*c+this.n42*b+this.n43*d+this.n44);a.x=(this.n11*c+this.n12*b+this.n13*d+this.n14)*e;a.y=(this.n21*c+this.n22*b+this.n23*
d+this.n24)*e;a.z=(this.n31*c+this.n32*b+this.n33*d+this.n34)*e;return a},multiplyVector4:function(a){var c=a.x,b=a.y,d=a.z,e=a.w;a.x=this.n11*c+this.n12*b+this.n13*d+this.n14*e;a.y=this.n21*c+this.n22*b+this.n23*d+this.n24*e;a.z=this.n31*c+this.n32*b+this.n33*d+this.n34*e;a.w=this.n41*c+this.n42*b+this.n43*d+this.n44*e;return a},rotateAxis:function(a){var c=a.x,b=a.y,d=a.z;a.x=c*this.n11+b*this.n12+d*this.n13;a.y=c*this.n21+b*this.n22+d*this.n23;a.z=c*this.n31+b*this.n32+d*this.n33;a.normalize();
M
Mikael Emtinger 已提交
26 27
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 b=a.n11,d=a.n12,e=a.n13,g=a.n14,h=a.n21,j=a.n22,k=a.n23,l=a.n24,o=a.n31,v=a.n32,u=a.n33,t=a.n34,y=a.n41,C=a.n42,F=a.n43,w=a.n44,G=c.n11,x=c.n12,N=c.n13,L=c.n14,Y=c.n21,M=c.n22,
f=c.n23,W=c.n24,R=c.n31,da=c.n32,ga=c.n33,I=c.n34;this.n11=b*G+d*Y+e*R;this.n12=b*x+d*M+e*da;this.n13=b*N+d*f+e*ga;this.n14=b*L+d*W+e*I+g;this.n21=h*G+j*Y+k*R;this.n22=h*x+j*M+k*da;this.n23=h*N+j*f+k*ga;this.n24=h*L+j*W+k*I+l;this.n31=o*G+v*Y+u*R;this.n32=o*x+v*M+u*da;this.n33=o*N+v*f+u*ga;this.n34=o*L+v*W+u*I+t;this.n41=y*G+C*Y+F*R;this.n42=y*x+C*M+F*da;this.n43=y*N+C*f+F*ga;this.n44=y*L+C*W+F*I+w;return this},multiplyToArray:function(a,c,b){this.multiply(a,c);b[0]=this.n11;b[1]=this.n21;b[2]=this.n31;
M
Mikael Emtinger 已提交
28
b[3]=this.n41;b[4]=this.n12;b[5]=this.n22;b[6]=this.n32;b[7]=this.n42;b[8]=this.n13;b[9]=this.n23;b[10]=this.n33;b[11]=this.n43;b[12]=this.n14;b[13]=this.n24;b[14]=this.n34;b[15]=this.n44;return this},multiplySelf:function(a){this.multiply(this,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=
M
Mikael Emtinger 已提交
29
this.n11,c=this.n12,b=this.n13,d=this.n14,e=this.n21,g=this.n22,h=this.n23,j=this.n24,k=this.n31,l=this.n32,o=this.n33,v=this.n34,u=this.n41,t=this.n42,y=this.n43,C=this.n44;return d*h*l*u-b*j*l*u-d*g*o*u+c*j*o*u+b*g*v*u-c*h*v*u-d*h*k*t+b*j*k*t+d*e*o*t-a*j*o*t-b*e*v*t+a*h*v*t+d*g*k*y-c*j*k*y-d*e*l*y+a*j*l*y+c*e*v*y-a*g*v*y-b*g*k*C+c*h*k*C+b*e*l*C-a*h*l*C-c*e*o*C+a*g*o*C},transpose:function(){var a;a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31=this.n13;this.n13=a;a=this.n32;this.n32=
30 31
this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14=a;a=this.n42;this.n42=this.n24;this.n24=a;a=this.n43;this.n43=this.n34;this.n43=a;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(){this.flat[0]=this.n11;this.flat[1]=this.n21;
this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},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]=
M
Mikael Emtinger 已提交
32
this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,c){a[c]=this.n11;a[c+1]=this.n21;a[c+2]=this.n31;a[c+3]=this.n41;a[c+4]=this.n12;a[c+5]=this.n22;a[c+6]=this.n32;a[c+7]=this.n42;a[c+8]=this.n13;a[c+9]=this.n23;a[c+10]=this.n33;a[c+11]=this.n43;a[c+12]=this.n14;a[c+13]=this.n24;a[c+14]=this.n34;a[c+15]=this.n44;return a},setTranslation:function(a,c,b){this.set(1,0,0,a,0,1,0,c,0,0,1,b,0,0,0,1);return this},setScale:function(a,
A
alteredq 已提交
33 34 35
c,b){this.set(a,0,0,0,0,c,0,0,0,0,b,0,0,0,0,1);return this},setRotationX: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},setRotationY: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},setRotationZ: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},setRotationAxis:function(a,c){var b=Math.cos(c),d=Math.sin(c),e=1-b,g=a.x,h=a.y,j=a.z,k=e*g,l=e*h;this.set(k*
g+b,k*h-d*j,k*j+d*h,0,k*h+d*j,l*h+b,l*j-d*g,0,k*j-d*h,l*j+d*g,e*j*j+b,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},setRotationFromEuler:function(a){var c=a.x,b=a.y,d=a.z;a=Math.cos(c);c=Math.sin(c);var e=Math.cos(b);b=Math.sin(b);var g=Math.cos(d);d=Math.sin(d);var h=a*b,j=c*b;this.n11=e*g;this.n12=-e*d;this.n13=b;this.n21=j*g+a*d;this.n22=-j*d+a*g;this.n23=-c*e;this.n31=-h*g+c*d;this.n32=h*d+c*g;this.n33=a*e;return this},setRotationFromQuaternion:function(a){var c=
a.x,b=a.y,d=a.z,e=a.w,g=c+c,h=b+b,j=d+d;a=c*g;var k=c*h;c*=j;var l=b*h;b*=j;d*=j;g*=e;h*=e;e*=j;this.n11=1-(l+d);this.n12=k-e;this.n13=c+h;this.n21=k+e;this.n22=1-(a+d);this.n23=b-g;this.n31=c-h;this.n32=b+g;this.n33=1-(a+l);return this},scale:function(a){var c=a.x,b=a.y;a=a.z;this.n11*=c;this.n12*=b;this.n13*=a;this.n21*=c;this.n22*=b;this.n23*=a;this.n31*=c;this.n32*=b;this.n33*=a;this.n41*=c;this.n42*=b;this.n43*=a;return this},extractPosition:function(a){this.n14=a.n14;this.n24=a.n24;this.n34=
M
Mr.doob 已提交
36
a.n34},extractRotation:function(a,c){var b=1/c.x,d=1/c.y,e=1/c.z;this.n11=a.n11*b;this.n21=a.n21*b;this.n31=a.n31*b;this.n12=a.n12*d;this.n22=a.n22*d;this.n32=a.n32*d;this.n13=a.n13*e;this.n23=a.n23*e;this.n33=a.n33*e}};
M
Mikael Emtinger 已提交
37 38
THREE.Matrix4.makeInvert=function(a,c){var b=a.n11,d=a.n12,e=a.n13,g=a.n14,h=a.n21,j=a.n22,k=a.n23,l=a.n24,o=a.n31,v=a.n32,u=a.n33,t=a.n34,y=a.n41,C=a.n42,F=a.n43,w=a.n44;c===undefined&&(c=new THREE.Matrix4);c.n11=k*t*C-l*u*C+l*v*F-j*t*F-k*v*w+j*u*w;c.n12=g*u*C-e*t*C-g*v*F+d*t*F+e*v*w-d*u*w;c.n13=e*l*C-g*k*C+g*j*F-d*l*F-e*j*w+d*k*w;c.n14=g*k*v-e*l*v-g*j*u+d*l*u+e*j*t-d*k*t;c.n21=l*u*y-k*t*y-l*o*F+h*t*F+k*o*w-h*u*w;c.n22=e*t*y-g*u*y+g*o*F-b*t*F-e*o*w+b*u*w;c.n23=g*k*y-e*l*y-g*h*F+b*l*F+e*h*w-b*k*w;
c.n24=e*l*o-g*k*o+g*h*u-b*l*u-e*h*t+b*k*t;c.n31=j*t*y-l*v*y+l*o*C-h*t*C-j*o*w+h*v*w;c.n32=g*v*y-d*t*y-g*o*C+b*t*C+d*o*w-b*v*w;c.n33=e*l*y-g*j*y+g*h*C-b*l*C-d*h*w+b*j*w;c.n34=g*j*o-d*l*o-g*h*v+b*l*v+d*h*t-b*j*t;c.n41=k*v*y-j*u*y-k*o*C+h*u*C+j*o*F-h*v*F;c.n42=d*u*y-e*v*y+e*o*C-b*u*C-d*o*F+b*v*F;c.n43=e*j*y-d*k*y-e*h*C+b*k*C+d*h*F-b*j*F;c.n44=d*k*o-e*j*o+e*h*v-b*k*v-d*h*u+b*j*u;c.multiplyScalar(1/a.determinant());return c};
A
alteredq 已提交
39
THREE.Matrix4.makeInvert3x3=function(a){var c=a.m33,b=c.m,d=a.n33*a.n22-a.n32*a.n23,e=-a.n33*a.n21+a.n31*a.n23,g=a.n32*a.n21-a.n31*a.n22,h=-a.n33*a.n12+a.n32*a.n13,j=a.n33*a.n11-a.n31*a.n13,k=-a.n32*a.n11+a.n31*a.n12,l=a.n23*a.n12-a.n22*a.n13,o=-a.n23*a.n11+a.n21*a.n13,v=a.n22*a.n11-a.n21*a.n12;a=a.n11*d+a.n21*h+a.n31*l;if(a==0)throw"matrix not invertible";a=1/a;b[0]=a*d;b[1]=a*e;b[2]=a*g;b[3]=a*h;b[4]=a*j;b[5]=a*k;b[6]=a*l;b[7]=a*o;b[8]=a*v;return c};
A
alteredq 已提交
40
THREE.Matrix4.makeFrustum=function(a,c,b,d,e,g){var h;h=new THREE.Matrix4;h.n11=2*e/(c-a);h.n12=0;h.n13=(c+a)/(c-a);h.n14=0;h.n21=0;h.n22=2*e/(d-b);h.n23=(d+b)/(d-b);h.n24=0;h.n31=0;h.n32=0;h.n33=-(g+e)/(g-e);h.n34=-2*g*e/(g-e);h.n41=0;h.n42=0;h.n43=-1;h.n44=0;return h};THREE.Matrix4.makePerspective=function(a,c,b,d){var e;a=b*Math.tan(a*Math.PI/360);e=-a;return THREE.Matrix4.makeFrustum(e*c,a*c,e,a,b,d)};
A
alteredq 已提交
41
THREE.Matrix4.makeOrtho=function(a,c,b,d,e,g){var h,j,k,l;h=new THREE.Matrix4;j=c-a;k=b-d;l=g-e;h.n11=2/j;h.n12=0;h.n13=0;h.n14=-((c+a)/j);h.n21=0;h.n22=2/k;h.n23=0;h.n24=-((b+d)/k);h.n31=0;h.n32=0;h.n33=-2/l;h.n34=-((g+e)/l);h.n41=0;h.n42=0;h.n43=0;h.n44=1;return h};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3;
42
THREE.Object3D=function(){this.parent=undefined;this.children=[];this.up=new THREE.Vector3(0,1,0);this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.scale=new THREE.Vector3(1,1,1);this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixAutoUpdate=!0;this.matrixWorldNeedsUpdate=!0;this.quaternion=new THREE.Quaternion;this.useQuaternion=!1;this.boundRadius=0;this.boundRadiusScale=1;this.visible=
M
Mr.doob 已提交
43
!0;this._vector=new THREE.Vector3};
M
Mikael Emtinger 已提交
44 45 46 47
THREE.Object3D.prototype={translate:function(a,c){this.matrix.rotateAxis(c);this.position.addSelf(c.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a,this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},lookAt:function(a){this.matrix.lookAt(this.position,a,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)},addChild:function(a){if(this.children.indexOf(a)===-1){a.parent!==
undefined&&a.parent.removeChild(a);a.parent=this;this.children.push(a);for(var c=this;c instanceof THREE.Scene===!1&&c!==undefined;)c=c.parent;c!==undefined&&c.addChildRecurse(a)}},removeChild:function(a){var c=this.children.indexOf(a);if(c!==-1){a.parent=undefined;this.children.splice(c,1)}},updateMatrix:function(){this.matrix.setPosition(this.position);this.useQuaternion?this.matrix.setRotationFromQuaternion(this.quaternion):this.matrix.setRotationFromEuler(this.rotation);if(this.scale.x!==1||this.scale.y!==
1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}return!0},update:function(a,c,b){if(this.visible){this.matrixAutoUpdate&&(c|=this.updateMatrix());if(c||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;c=!0}a=0;for(var d=this.children.length;a<d;a++)this.children[a].update(this.matrixWorld,
c,b)}}};THREE.Quaternion=function(a,c,b,d){this.set(a||0,c||0,b||0,d!==undefined?d:1)};
A
alteredq 已提交
48 49
THREE.Quaternion.prototype={set:function(a,c,b,d){this.x=a;this.y=c;this.z=b;this.w=d;return this},setFromEuler:function(a){var c=0.5*Math.PI/360,b=a.x*c,d=a.y*c,e=a.z*c;a=Math.cos(d);d=Math.sin(d);c=Math.cos(-e);e=Math.sin(-e);var g=Math.cos(b);b=Math.sin(b);var h=a*c,j=d*e;this.w=h*g-j*b;this.x=h*b+j*g;this.y=d*c*g+a*e*b;this.z=a*e*g-d*c*b;return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=
-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);if(a==0)this.w=this.z=this.y=this.x=0;else{a=1/a;this.x*=a;this.y*=a;this.z*=a;this.w*=a}return this},multiplySelf:function(a){var c=this.x,b=this.y,d=this.z,e=this.w,g=a.x,h=a.y,j=a.z;a=a.w;this.x=c*a+e*g+b*j-d*h;this.y=b*a+e*h+d*g-c*j;this.z=d*a+e*j+c*h-b*g;this.w=e*a-c*g-b*h-d*j;return this},
A
alteredq 已提交
50
multiplyVector3:function(a,c){c||(c=a);var b=a.x,d=a.y,e=a.z,g=this.x,h=this.y,j=this.z,k=this.w,l=k*b+h*e-j*d,o=k*d+j*b-g*e,v=k*e+g*d-h*b;b=-g*b-h*d-j*e;c.x=l*k+b*-g+o*-j-v*-h;c.y=o*k+b*-h+v*-g-l*-j;c.z=v*k+b*-j+l*-h-o*-g;return c}};
A
alteredq 已提交
51
THREE.Quaternion.slerp=function(a,c,b,d){var e=a.w*c.w+a.x*c.x+a.y*c.y+a.z*c.z;if(Math.abs(e)>=1){b.w=a.w;b.x=a.x;b.y=a.y;b.z=a.z;return b}var g=Math.acos(e),h=Math.sqrt(1-e*e);if(Math.abs(h)<0.0010){b.w=0.5*(a.w+c.w);b.x=0.5*(a.x+c.x);b.y=0.5*(a.y+c.y);b.z=0.5*(a.z+c.z);return b}e=Math.sin((1-d)*g)/h;d=Math.sin(d*g)/h;b.w=a.w*e+c.w*d;b.x=a.x*e+c.x*d;b.y=a.y*e+c.y*d;b.z=a.z*e+c.z*d;return b};
M
Mikael Emtinger 已提交
52
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=!0};
A
alteredq 已提交
53
THREE.Face3=function(a,c,b,d,e){this.a=a;this.b=c;this.c=b;this.centroid=new THREE.Vector3;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.materials=e instanceof Array?e:[e]};THREE.Face4=function(a,c,b,d,e,g){this.a=a;this.b=c;this.c=b;this.d=d;this.centroid=new THREE.Vector3;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.materials=g instanceof Array?g:[g]};
M
Mikael Emtinger 已提交
54 55
THREE.UV=function(a,c){this.set(a||0,c||0)};THREE.UV.prototype={set:function(a,c){this.u=a;this.v=c;return this},copy:function(a){this.set(a.u,a.v);return this}};THREE.Geometry=function(){this.id="Geometry"+THREE.GeometryIdCounter++;this.vertices=[];this.faces=[];this.uvs=[];this.uvs2=[];this.colors=[];this.morphTargets=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.hasTangents=!1};
THREE.Geometry.prototype={computeCentroids:function(){var a,c,b;a=0;for(c=this.faces.length;a<c;a++){b=this.faces[a];b.centroid.set(0,0,0);if(b instanceof THREE.Face3){b.centroid.addSelf(this.vertices[b.a].position);b.centroid.addSelf(this.vertices[b.b].position);b.centroid.addSelf(this.vertices[b.c].position);b.centroid.divideScalar(3)}else if(b instanceof THREE.Face4){b.centroid.addSelf(this.vertices[b.a].position);b.centroid.addSelf(this.vertices[b.b].position);b.centroid.addSelf(this.vertices[b.c].position);
56
b.centroid.addSelf(this.vertices[b.d].position);b.centroid.divideScalar(4)}}},computeFaceNormals:function(a){var c,b,d,e,g,h,j=new THREE.Vector3,k=new THREE.Vector3;d=0;for(e=this.vertices.length;d<e;d++){g=this.vertices[d];g.normal.set(0,0,0)}d=0;for(e=this.faces.length;d<e;d++){g=this.faces[d];if(a&&g.vertexNormals.length){j.set(0,0,0);c=0;for(b=g.vertexNormals.length;c<b;c++)j.addSelf(g.vertexNormals[c]);j.divideScalar(3)}else{c=this.vertices[g.a];b=this.vertices[g.b];h=this.vertices[g.c];j.sub(h.position,
M
Mikael Emtinger 已提交
57 58
b.position);k.sub(c.position,b.position);j.crossSelf(k)}j.isZero()||j.normalize();g.normal.copy(j)}},computeVertexNormals:function(){var a,c,b,d;if(this.__tmpVertices==undefined){d=this.__tmpVertices=Array(this.vertices.length);a=0;for(c=this.vertices.length;a<c;a++)d[a]=new THREE.Vector3;a=0;for(c=this.faces.length;a<c;a++){b=this.faces[a];if(b instanceof THREE.Face3)b.vertexNormals=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];else if(b instanceof THREE.Face4)b.vertexNormals=[new THREE.Vector3,
new THREE.Vector3,new THREE.Vector3,new THREE.Vector3]}}else{d=this.__tmpVertices;a=0;for(c=this.vertices.length;a<c;a++)d[a].set(0,0,0)}a=0;for(c=this.faces.length;a<c;a++){b=this.faces[a];if(b instanceof THREE.Face3){d[b.a].addSelf(b.normal);d[b.b].addSelf(b.normal);d[b.c].addSelf(b.normal)}else if(b instanceof THREE.Face4){d[b.a].addSelf(b.normal);d[b.b].addSelf(b.normal);d[b.c].addSelf(b.normal);d[b.d].addSelf(b.normal)}}a=0;for(c=this.vertices.length;a<c;a++)d[a].normalize();a=0;for(c=this.faces.length;a<
M
Mikael Emtinger 已提交
59 60
c;a++){b=this.faces[a];if(b instanceof THREE.Face3){b.vertexNormals[0].copy(d[b.a]);b.vertexNormals[1].copy(d[b.b]);b.vertexNormals[2].copy(d[b.c])}else if(b instanceof THREE.Face4){b.vertexNormals[0].copy(d[b.a]);b.vertexNormals[1].copy(d[b.b]);b.vertexNormals[2].copy(d[b.c]);b.vertexNormals[3].copy(d[b.d])}}},computeTangents:function(){function a(I,ca,za,ea,xa,ja,ha){g=I.vertices[ca].position;h=I.vertices[za].position;j=I.vertices[ea].position;k=e[xa];l=e[ja];o=e[ha];v=h.x-g.x;u=j.x-g.x;t=h.y-g.y;
y=j.y-g.y;C=h.z-g.z;F=j.z-g.z;w=l.u-k.u;G=o.u-k.u;x=l.v-k.v;N=o.v-k.v;L=1/(w*N-G*x);f.set((N*v-x*u)*L,(N*t-x*y)*L,(N*C-x*F)*L);W.set((w*u-G*v)*L,(w*y-G*t)*L,(w*F-G*C)*L);Y[ca].addSelf(f);Y[za].addSelf(f);Y[ea].addSelf(f);M[ca].addSelf(W);M[za].addSelf(W);M[ea].addSelf(W)}var c,b,d,e,g,h,j,k,l,o,v,u,t,y,C,F,w,G,x,N,L,Y=[],M=[],f=new THREE.Vector3,W=new THREE.Vector3,R=new THREE.Vector3,da=new THREE.Vector3,ga=new THREE.Vector3;c=0;for(b=this.vertices.length;c<b;c++){Y[c]=new THREE.Vector3;M[c]=new THREE.Vector3}c=
A
alteredq 已提交
61
0;for(b=this.faces.length;c<b;c++){d=this.faces[c];e=this.uvs[c];if(d instanceof THREE.Face3){a(this,d.a,d.b,d.c,0,1,2);this.vertices[d.a].normal.copy(d.vertexNormals[0]);this.vertices[d.b].normal.copy(d.vertexNormals[1]);this.vertices[d.c].normal.copy(d.vertexNormals[2])}else if(d instanceof THREE.Face4){a(this,d.a,d.b,d.c,0,1,2);a(this,d.a,d.b,d.d,0,1,3);this.vertices[d.a].normal.copy(d.vertexNormals[0]);this.vertices[d.b].normal.copy(d.vertexNormals[1]);this.vertices[d.c].normal.copy(d.vertexNormals[2]);
M
Mikael Emtinger 已提交
62 63 64
this.vertices[d.d].normal.copy(d.vertexNormals[3])}}c=0;for(b=this.vertices.length;c<b;c++){ga.copy(this.vertices[c].normal);d=Y[c];R.copy(d);R.subSelf(ga.multiplyScalar(ga.dot(d))).normalize();da.cross(this.vertices[c].normal,d);d=da.dot(M[c]);d=d<0?-1:1;this.vertices[c].tangent.set(R.x,R.y,R.z,d)}this.hasTangents=!0},computeBoundingBox:function(){var a;if(this.vertices.length>0){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,b=this.vertices.length;c<b;c++){a=this.vertices[c];if(a.position.x<this.boundingBox.x[0])this.boundingBox.x[0]=a.position.x;else if(a.position.x>this.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.y<this.boundingBox.y[0])this.boundingBox.y[0]=a.position.y;else if(a.position.y>this.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.z<this.boundingBox.z[0])this.boundingBox.z[0]=a.position.z;else 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,b=this.vertices.length;c<b;c++)a=Math.max(a,this.vertices[c].position.length());this.boundingSphere={radius:a}}};THREE.GeometryIdCounter=0;
M
Mikael Emtinger 已提交
65
THREE.Spline=function(){function a(u,t,y,C,F,w,G){u=(y-u)*0.5;C=(C-t)*0.5;return(2*(t-y)+u+C)*G+(-3*(t-y)-2*u-C)*w+u*F+t}var c=[],b={x:0,y:0,z:0},d,e,g,h,j,k,l,o,v;this.getPoint=function(u,t){d=(u.length-1)*t;e=Math.floor(d);g=d-e;c[0]=e==0?e:e-1;c[1]=e;c[2]=e>u.length-2?e:e+1;c[3]=e>u.length-3?e:e+2;k=u[c[0]];l=u[c[1]];o=u[c[2]];v=u[c[3]];h=g*g;j=g*h;b.x=a(k.x,l.x,o.x,v.x,g,h,j);b.y=a(k.y,l.y,o.y,v.y,g,h,j);b.z=a(k.z,l.z,o.z,v.z,g,h,j);return b}};
M
Mr.doob 已提交
66
THREE.AnimationHandler=function(){var a=[],c={},b={};b.update=function(e){for(var g=0;g<a.length;g++)a[g].update(e)};b.addToUpdate=function(e){a.indexOf(e)===-1&&a.push(e)};b.removeFromUpdate=function(e){e=a.indexOf(e);e!==-1&&a.splice(e,1)};b.add=function(e){c[e.name]!==undefined&&console.log("THREE.AnimationHandler.add: Warning! "+e.name+" already exists in library. Overwriting.");c[e.name]=e;if(e.initialized!==!0){for(var g=0;g<e.hierarchy.length;g++){for(var h=0;h<e.hierarchy[g].keys.length;h++){if(e.hierarchy[g].keys[h].time<
M
Mikael Emtinger 已提交
67 68 69 70
0)e.hierarchy[g].keys[h].time=0;if(e.hierarchy[g].keys[h].rot!==undefined&&!(e.hierarchy[g].keys[h].rot instanceof THREE.Quaternion)){var j=e.hierarchy[g].keys[h].rot;e.hierarchy[g].keys[h].rot=new THREE.Quaternion(j[0],j[1],j[2],j[3])}}if(e.hierarchy[g].keys[0].morphTargets!==undefined){j={};for(h=0;h<e.hierarchy[g].keys.length;h++)for(var k=0;k<e.hierarchy[g].keys[h].morphTargets.length;k++){var l=e.hierarchy[g].keys[h].morphTargets[k];j[l]=-1}e.hierarchy[g].usedMorphTargets=j;for(h=0;h<e.hierarchy[g].keys.length;h++){var o=
{};for(l in j){for(k=0;k<e.hierarchy[g].keys[h].morphTargets.length;k++)if(e.hierarchy[g].keys[h].morphTargets[k]===l){o[l]=e.hierarchy[g].keys[h].morphTargetsInfluences[k];break}k===e.hierarchy[g].keys[h].morphTargets.length&&(o[l]=0)}e.hierarchy[g].keys[h].morphTargetsInfluences=o}}for(h=1;h<e.hierarchy[g].keys.length;h++)if(e.hierarchy[g].keys[h].time===e.hierarchy[g].keys[h-1].time){e.hierarchy[g].keys.splice(h,1);h--}for(h=1;h<e.hierarchy[g].keys.length;h++)e.hierarchy[g].keys[h].index=h}h=parseInt(e.length*
e.fps,10);e.JIT={};e.JIT.hierarchy=[];for(g=0;g<e.hierarchy.length;g++)e.JIT.hierarchy.push(Array(h));e.initialized=!0}};b.get=function(e){if(typeof e==="string")if(c[e])return c[e];else{console.log("THREE.AnimationHandler.get: Couldn't find animation "+e);return null}};b.parse=function(e){var g=[];if(e instanceof THREE.SkinnedMesh)for(var h=0;h<e.bones.length;h++)g.push(e.bones[h]);else d(e,g);return g};var d=function(e,g){g.push(e);for(var h=0;h<e.children.length;h++)d(e.children[h],g)};b.LINEAR=
0;b.CATMULLROM=1;b.CATMULLROM_FORWARD=2;return b}();THREE.Animation=function(a,c,b,d){this.root=a;this.data=THREE.AnimationHandler.get(c);this.hierarchy=THREE.AnimationHandler.parse(a);this.currentTime=0;this.timeScale=1;this.isPlaying=!1;this.isPaused=!0;this.loop=!0;this.interpolationType=b!==undefined?b:THREE.AnimationHandler.LINEAR;this.JITCompile=d!==undefined?d:!0;this.points=[];this.target=new THREE.Vector3};
71 72
THREE.Animation.prototype.play=function(a,c){if(!this.isPlaying){this.isPlaying=!0;this.loop=a!==undefined?a:!0;this.currentTime=c!==undefined?c:0;var b,d=this.hierarchy.length,e;for(b=0;b<d;b++){e=this.hierarchy[b];if(this.interpolationType!==THREE.AnimationHandler.CATMULLROM_FORWARD)e.useQuaternion=!0;e.matrixAutoUpdate=!0;if(e.animationCache===undefined){e.animationCache={};e.animationCache.prevKey={pos:0,rot:0,scl:0};e.animationCache.nextKey={pos:0,rot:0,scl:0};e.animationCache.originalMatrix=
e instanceof THREE.Bone?e.skinMatrix:e.matrix}var g=e.animationCache.prevKey;e=e.animationCache.nextKey;g.pos=this.data.hierarchy[b].keys[0];g.rot=this.data.hierarchy[b].keys[0];g.scl=this.data.hierarchy[b].keys[0];e.pos=this.getNextKeyWith("pos",b,1);e.rot=this.getNextKeyWith("rot",b,1);e.scl=this.getNextKeyWith("scl",b,1)}this.update(0)}this.isPaused=!1;THREE.AnimationHandler.addToUpdate(this)};
M
Mr.doob 已提交
73
THREE.Animation.prototype.pause=function(){this.isPaused?THREE.AnimationHandler.addToUpdate(this):THREE.AnimationHandler.removeFromUpdate(this);this.isPaused=!this.isPaused};
M
Mikael Emtinger 已提交
74
THREE.Animation.prototype.stop=function(){this.isPlaying=!1;this.isPaused=!1;THREE.AnimationHandler.removeFromUpdate(this);for(var a=0;a<this.hierarchy.length;a++)if(this.hierarchy[a].animationCache!==undefined){if(this.hierarchy[a]instanceof THREE.Bone)this.hierarchy[a].skinMatrix=this.hierarchy[a].animationCache.originalMatrix;else this.hierarchy[a].matrix=this.hierarchy[a].animationCache.originalMatrix;delete this.hierarchy[a].animationCache}};
M
Mikael Emtinger 已提交
75 76
THREE.Animation.prototype.update=function(a){if(this.isPlaying){var c=["pos","rot","scl"],b,d,e,g,h,j,k,l,o=this.data.JIT.hierarchy,v,u;this.currentTime+=a*this.timeScale;u=this.currentTime;v=this.currentTime%=this.data.length;l=parseInt(Math.min(v*this.data.fps,this.data.length*this.data.fps),10);for(var t=0,y=this.hierarchy.length;t<y;t++){a=this.hierarchy[t];k=a.animationCache;if(this.JITCompile&&o[t][l]!==undefined)if(a instanceof THREE.Bone){a.skinMatrix=o[t][l];a.matrixAutoUpdate=!1;a.matrixWorldNeedsUpdate=
!1}else{a.matrix=o[t][l];a.matrixAutoUpdate=!1;a.matrixWorldNeedsUpdate=!0}else{if(this.JITCompile)if(a instanceof THREE.Bone)a.skinMatrix=a.animationCache.originalMatrix;else a.matrix=a.animationCache.originalMatrix;for(var C=0;C<3;C++){b=c[C];h=k.prevKey[b];j=k.nextKey[b];if(j.time<=u){if(v<u)if(this.loop){h=this.data.hierarchy[t].keys[0];for(j=this.getNextKeyWith(b,t,1);j.time<v;){h=j;j=this.getNextKeyWith(b,t,j.index+1)}}else{this.stop();return}else{do{h=j;j=this.getNextKeyWith(b,t,j.index+1)}while(j.time<
A
alteredq 已提交
77
v)}k.prevKey[b]=h;k.nextKey[b]=j}a.matrixAutoUpdate=!0;a.matrixWorldNeedsUpdate=!0;d=(v-h.time)/(j.time-h.time);e=h[b];g=j[b];if(d<0||d>1){console.log("THREE.Animation.update: Warning! Scale out of bounds:"+d+" on bone "+t);d=d<0?0:1}if(b==="pos"){b=a.position;if(this.interpolationType===THREE.AnimationHandler.LINEAR){b.x=e[0]+(g[0]-e[0])*d;b.y=e[1]+(g[1]-e[1])*d;b.z=e[2]+(g[2]-e[2])*d}else if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){this.points[0]=
78
this.getPrevKeyWith("pos",t,h.index-1).pos;this.points[1]=e;this.points[2]=g;this.points[3]=this.getNextKeyWith("pos",t,j.index+1).pos;d=d*0.33+0.33;e=this.interpolateCatmullRom(this.points,d);b.x=e[0];b.y=e[1];b.z=e[2];if(this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){d=this.interpolateCatmullRom(this.points,d*1.01);this.target.set(d[0],d[1],d[2]);this.target.subSelf(b);this.target.y=0;this.target.normalize();d=Math.atan2(this.target.x,this.target.z);a.rotation.set(0,d,0)}}}else if(b===
A
alteredq 已提交
79 80
"rot")THREE.Quaternion.slerp(e,g,a.quaternion,d);else if(b==="scl"){b=a.scale;b.x=e[0]+(g[0]-e[0])*d;b.y=e[1]+(g[1]-e[1])*d;b.z=e[2]+(g[2]-e[2])*d}}}}if(this.JITCompile&&o[0][l]===undefined){this.hierarchy[0].update(undefined,!0);for(t=0;t<this.hierarchy.length;t++)o[t][l]=this.hierarchy[t]instanceof THREE.Bone?this.hierarchy[t].skinMatrix.clone():this.hierarchy[t].matrix.clone()}}};
THREE.Animation.prototype.interpolateCatmullRom=function(a,c){var b=[],d=[],e,g,h,j,k,l;e=(a.length-1)*c;g=Math.floor(e);e-=g;b[0]=g==0?g:g-1;b[1]=g;b[2]=g>a.length-2?g:g+1;b[3]=g>a.length-3?g:g+2;g=a[b[0]];j=a[b[1]];k=a[b[2]];l=a[b[3]];b=e*e;h=e*b;d[0]=this.interpolate(g[0],j[0],k[0],l[0],e,b,h);d[1]=this.interpolate(g[1],j[1],k[1],l[1],e,b,h);d[2]=this.interpolate(g[2],j[2],k[2],l[2],e,b,h);return d};
A
alteredq 已提交
81 82 83 84
THREE.Animation.prototype.interpolate=function(a,c,b,d,e,g,h){a=(b-a)*0.5;d=(d-c)*0.5;return(2*(c-b)+a+d)*h+(-3*(c-b)-2*a-d)*g+a*e+c};THREE.Animation.prototype.getNextKeyWith=function(a,c,b){var d=this.data.hierarchy[c].keys;if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)b=b<d.length-1?b:d.length-1;else b%=d.length;for(;b<d.length;b++)if(d[b][a]!==undefined)return d[b];return this.data.hierarchy[c].keys[0]};
THREE.Animation.prototype.getPrevKeyWith=function(a,c,b){var d=this.data.hierarchy[c].keys;for(b=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?b>0?b:0:b>=0?b:b+d.length;b>=0;b--)if(d[b][a]!==undefined)return d[b];return this.data.hierarchy[c].keys[d.length-1]};
THREE.Camera=function(a,c,b,d,e){THREE.Object3D.call(this);this.fov=a||50;this.aspect=c||1;this.near=b||0.1;this.far=d||2E3;this.target=e||new THREE.Object3D;this.useTarget=!0;this.matrixWorldInverse=new THREE.Matrix4;this.projectionMatrix=null;this.updateProjectionMatrix()};THREE.Camera.prototype=new THREE.Object3D;THREE.Camera.prototype.constructor=THREE.Camera;THREE.Camera.prototype.supr=THREE.Object3D.prototype;
THREE.Camera.prototype.translate=function(a,c){this.matrix.rotateAxis(c);this.position.addSelf(c.multiplyScalar(a));this.target.position.addSelf(c.multiplyScalar(a))};THREE.Camera.prototype.updateProjectionMatrix=function(){this.projectionMatrix=THREE.Matrix4.makePerspective(this.fov,this.aspect,this.near,this.far)};
M
Mikael Emtinger 已提交
85 86 87
THREE.Camera.prototype.update=function(a,c,b){if(this.useTarget){this.matrix.lookAt(this.position,this.target.position,this.up);this.matrix.setPosition(this.position);a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse);c=!0}else{this.matrixAutoUpdate&&(c|=this.updateMatrix());if(c||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixWorldNeedsUpdate=
!1;c=!0;THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse)}}for(a=0;a<this.children.length;a++)this.children[a].update(this.matrixWorld,c,b)};
THREE.QuakeCamera=function(a){function c(b,d){return function(){d.apply(b,arguments)}}THREE.Camera.call(this,a.fov,a.aspect,a.near,a.far,a.target);this.movementSpeed=1;this.lookSpeed=0.0050;this.noFly=!1;this.lookVertical=!0;this.autoForward=!1;this.dragToLook=!1;this.heightSpeed=!1;this.heightCoef=1;this.heightMin=0;this.domElement=document;if(a){if(a.movementSpeed!==undefined)this.movementSpeed=a.movementSpeed;if(a.lookSpeed!==undefined)this.lookSpeed=a.lookSpeed;if(a.noFly!==undefined)this.noFly=
A
alteredq 已提交
88
a.noFly;if(a.lookVertical!==undefined)this.lookVertical=a.lookVertical;if(a.autoForward!==undefined)this.autoForward=a.autoForward;if(a.dragToLook!==undefined)this.dragToLook=a.dragToLook;if(a.heightSpeed!==undefined)this.heightSpeed=a.heightSpeed;if(a.heightCoef!==undefined)this.heightCoef=a.heightCoef;if(a.heightMin!==undefined)this.heightMin=a.heightMin;if(a.heightMax!==undefined)this.heightMax=a.heightMax;if(a.domElement!==undefined)this.domElement=a.domElement}this.theta=this.phi=this.lon=this.lat=
M
Mikael Emtinger 已提交
89 90
this.mouseY=this.mouseX=this.autoSpeedFactor=0;this.moveForward=!1;this.moveBackward=!1;this.moveLeft=!1;this.moveRight=!1;this.mouseDragOn=!1;this.windowHalfX=window.innerWidth/2;this.windowHalfY=window.innerHeight/2;this.onMouseDown=function(b){b.preventDefault();b.stopPropagation();if(!this.dragToLook)switch(b.button){case 0:this.moveForward=!0;break;case 2:this.moveBackward=!0}this.mouseDragOn=!0};this.onMouseUp=function(b){b.preventDefault();b.stopPropagation();if(!this.dragToLook)switch(b.button){case 0:this.moveForward=
!1;break;case 2:this.moveBackward=!1}this.mouseDragOn=!1};this.onMouseMove=function(b){this.mouseX=b.clientX-this.windowHalfX;this.mouseY=b.clientY-this.windowHalfY};this.onKeyDown=function(b){switch(b.keyCode){case 38:case 87:this.moveForward=!0;break;case 37:case 65:this.moveLeft=!0;break;case 40:case 83:this.moveBackward=!0;break;case 39:case 68:this.moveRight=!0}};this.onKeyUp=function(b){switch(b.keyCode){case 38:case 87:this.moveForward=!1;break;case 37:case 65:this.moveLeft=!1;break;case 40:case 83:this.moveBackward=
91
!1;break;case 39:case 68:this.moveRight=!1}};this.update=function(){this.autoSpeedFactor=this.heightSpeed?((this.position.y<this.heightMin?this.heightMin:this.position.y>this.heightMax?this.heightMax:this.position.y)-this.heightMin)*this.heightCoef:0;(this.moveForward||this.autoForward)&&this.translateZ(-(this.movementSpeed+this.autoSpeedFactor));this.moveBackward&&this.translateZ(this.movementSpeed);this.moveLeft&&this.translateX(-this.movementSpeed);this.moveRight&&this.translateX(this.movementSpeed);
M
Mikael Emtinger 已提交
92 93
var b=this.lookSpeed;this.dragToLook&&!this.mouseDragOn&&(b=0);this.lon+=this.mouseX*b;this.lookVertical&&(this.lat-=this.mouseY*b);this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*Math.PI/180;this.theta=this.lon*Math.PI/180;b=this.target.position;var d=this.position;b.x=d.x+100*Math.sin(this.phi)*Math.cos(this.theta);b.y=d.y+100*Math.cos(this.phi);b.z=d.z+100*Math.sin(this.phi)*Math.sin(this.theta);this.supr.update.call(this)};this.domElement.addEventListener("contextmenu",function(b){b.preventDefault()},
!1);this.domElement.addEventListener("mousemove",c(this,this.onMouseMove),!1);this.domElement.addEventListener("mousedown",c(this,this.onMouseDown),!1);this.domElement.addEventListener("mouseup",c(this,this.onMouseUp),!1);this.domElement.addEventListener("keydown",c(this,this.onKeyDown),!1);this.domElement.addEventListener("keyup",c(this,this.onKeyUp),!1)};THREE.QuakeCamera.prototype=new THREE.Camera;THREE.QuakeCamera.prototype.constructor=THREE.QuakeCamera;THREE.QuakeCamera.prototype.supr=THREE.Camera.prototype;
A
alteredq 已提交
94
THREE.QuakeCamera.prototype.translate=function(a,c){this.matrix.rotateAxis(c);if(this.noFly)c.y=0;this.position.addSelf(c.multiplyScalar(a));this.target.position.addSelf(c.multiplyScalar(a))};
M
Mikael Emtinger 已提交
95 96 97
THREE.PathCamera=function(a){function c(l,o){var v=l[0]-o[0],u=l[1]-o[1],t=l[2]-o[2];return Math.sqrt(v*v+u*u+t*t)}function b(l,o,v,u){var t={name:v,fps:0.6,length:u,hierarchy:[]},y,C;y=o.length;var F,w,G=[];C=new THREE.Spline;var x=0;for(F=0;F<o.length;F++){w=o[F];G[F]={x:w[0],y:w[1],z:w[2]}}var N=[o[0][0],o[0][1],o[0][2]];for(F=1;F<G.length*100;F++){w=F/(G.length*100);position=C.getPoint(G,w);x+=c([position.x,position.y,position.z],N);N=[position.x,position.y,position.z]}F=x;G=0;x=y-1;C={parent:-1,
keys:[]};C.keys[0]={time:0,pos:o[0],rot:[0,0,0,1],scl:[1,1,1]};C.keys[x]={time:u,pos:o[x],rot:[0,0,0,1],scl:[1,1,1]};console.log("path totalLength: ",F);for(y=1;y<x;y++){G+=u*c(o[y],o[y-1])/F;C.keys[y]={time:G,pos:o[y]}}t.hierarchy[0]=C;THREE.AnimationHandler.add(t);return new THREE.Animation(l,v,THREE.AnimationHandler.CATMULLROM_FORWARD,!1)}function d(l,o){var v,u,t=new THREE.Geometry,y=new THREE.Spline,C=[];for(v=0;v<o.length;v++){u=o[v];C[v]={x:u[0],y:u[1],z:u[2]}}for(v=0;v<C.length*10;v++){u=
v/(C.length*10);u=y.getPoint(C,u);t.vertices[v]=new THREE.Vertex(new THREE.Vector3(u.x,u.y,u.z))}v=new THREE.LineBasicMaterial({color:16711680,linewidth:3});lineObj=new THREE.Line(t,v);lineObj.scale.set(1,1,1);l.addChild(lineObj);v=new Sphere(1,16,8);y=new THREE.MeshBasicMaterial({color:65280});for(i=0;i<o.length;i++){t=new THREE.Mesh(v,y);t.position.set(o[i][0],o[i][1],o[i][2]);t.updateMatrix();l.addChild(t)}}THREE.Camera.call(this,a.fov,a.aspect,a.near,a.far,a.target);this.duration=1E4;this.waypoints=
A
alteredq 已提交
98 99 100 101 102 103 104 105 106
[];this.debugPath=new THREE.Object3D;this.debugDummy=new THREE.Object3D;this.animationParent=new THREE.Object3D;this.lookSpeed=0.0050;this.lookVertical=!0;this.lookHorizontal=!0;this.verticalAngleMap={srcRange:[0,6.28],dstRange:[0,6.28]};this.horizontalAngleMap={srcRange:[0,6.28],dstRange:[0,6.28]};this.domElement=document;if(a){if(a.duration!==undefined)this.duration=a.duration*1E3;if(a.waypoints!==undefined)this.waypoints=a.waypoints;if(a.createDebugPath!==undefined)this.createDebugPath=a.createDebugPath;
if(a.createDebugDummy!==undefined)this.createDebugDummy=a.createDebugDummy;if(a.lookSpeed!==undefined)this.lookSpeed=a.lookSpeed;if(a.lookVertical!==undefined)this.lookVertical=a.lookVertical;if(a.lookHorizontal!==undefined)this.lookHorizontal=a.lookHorizontal;if(a.verticalAngleMap!==undefined)this.verticalAngleMap=a.verticalAngleMap;if(a.horizontalAngleMap!==undefined)this.horizontalAngleMap=a.horizontalAngleMap;if(a.domElement!==undefined)this.domElement=a.domElement}this.theta=this.phi=this.lon=
this.lat=this.mouseY=this.mouseX=0;this.windowHalfX=window.innerWidth/2;this.windowHalfY=window.innerHeight/2;var e=Math.PI*2,g=Math.PI/180;this.updateManual=function(){var l,o;this.lookHorizontal&&(this.lon+=this.mouseX*this.lookSpeed);this.lookVertical&&(this.lat-=this.mouseY*this.lookSpeed);this.lon=Math.max(0,Math.min(360,this.lon));this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*g;this.theta=this.lon*g;l=this.phi%e;this.phi=l>=0?l:l+e;l=this.verticalAngleMap.srcRange;o=this.verticalAngleMap.dstRange;
this.phi=(this.phi-l[0])*(o[1]-o[0])/(l[1]-l[0])+o[0];l=this.horizontalAngleMap.srcRange;o=this.horizontalAngleMap.dstRange;this.theta=(this.theta-l[0])*(o[1]-o[0])/(l[1]-l[0])+o[0];l=this.target.position;o=this.position;l.x=o.x+100*Math.sin(this.phi)*Math.cos(this.theta);l.y=o.y+100*Math.cos(this.phi);l.z=o.z+100*Math.sin(this.phi)*Math.sin(this.theta);this.supr.update.call(this)};this.onMouseMove=function(l){this.mouseX=l.clientX-this.windowHalfX;this.mouseY=l.clientY-this.windowHalfY};if(this.createDebugDummy){a=
new THREE.MeshLambertMaterial({color:30719});var h=new THREE.MeshLambertMaterial({color:65280}),j=new Cube(10,10,20),k=new Cube(2,2,10);this.animationParent=new THREE.Mesh(j,a);a=new THREE.Mesh(k,h);a.position.set(0,10,0);this.animation=b(this.animationParent,this.waypoints,"cameraPath01",this.duration);this.animationParent.addChild(this);this.animationParent.addChild(a)}else{this.animation=b(this.animationParent,this.waypoints,"cameraPath01",this.duration);this.animationParent.addChild(this)}this.createDebugPath&&
d(this.debugPath,this.waypoints);this.domElement.addEventListener("mousemove",function(l,o){return function(){o.apply(l,arguments)}}(this,this.onMouseMove),!1)};THREE.PathCamera.prototype=new THREE.Camera;THREE.PathCamera.prototype.constructor=THREE.PathCamera;THREE.PathCamera.prototype.supr=THREE.Camera.prototype;THREE.Light=function(a){THREE.Object3D.call(this);this.color=new THREE.Color(a)};THREE.Light.prototype=new THREE.Object3D;THREE.Light.prototype.constructor=THREE.Light;
THREE.Light.prototype.supr=THREE.Object3D.prototype;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.FlatShading=0;THREE.SmoothShading=1;THREE.NormalBlending=0;THREE.AdditiveBlending=1;THREE.SubtractiveBlending=2;THREE.BillboardBlending=3;THREE.ReverseSubtractiveBlending=4;THREE.MaterialCounter={value:0};THREE.CubeReflectionMapping=function(){};THREE.CubeRefractionMapping=function(){};
THREE.LatitudeReflectionMapping=function(){};THREE.LatitudeRefractionMapping=function(){};THREE.SphericalReflectionMapping=function(){};THREE.SphericalRefractionMapping=function(){};THREE.UVMapping=function(){};
107 108
THREE.LineBasicMaterial=function(a){this.id=THREE.MaterialCounter.value++;this.color=new THREE.Color(16777215);this.opacity=1;this.blending=THREE.NormalBlending;this.depthTest=!0;this.linewidth=1;this.linejoin=this.linecap="round";this.vertexColors=!1;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;if(a.depthTest!==undefined)this.depthTest=a.depthTest;if(a.linewidth!==undefined)this.linewidth=
a.linewidth;if(a.linecap!==undefined)this.linecap=a.linecap;if(a.linejoin!==undefined)this.linejoin=a.linejoin;if(a.vertexColors!==undefined)this.vertexColors=a.vertexColors}};
109 110
THREE.MeshBasicMaterial=function(a){this.id=THREE.MaterialCounter.value++;this.color=new THREE.Color(16777215);this.opacity=1;this.envMap=this.lightMap=this.map=null;this.combine=THREE.MultiplyOperation;this.reflectivity=1;this.refractionRatio=0.98;this.fog=!0;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.depthTest=!0;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.vertexColors=!1;this.skinning=!1;this.morphTargets=!1;
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.lightMap!==undefined)this.lightMap=a.lightMap;if(a.envMap!==undefined)this.envMap=a.envMap;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refractionRatio!==undefined)this.refractionRatio=a.refractionRatio;if(a.fog!==undefined)this.fog=a.fog;if(a.shading!==undefined)this.shading=a.shading;
111
if(a.blending!==undefined)this.blending=a.blending;if(a.depthTest!==undefined)this.depthTest=a.depthTest;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframeLinewidth!==undefined)this.wireframeLinewidth=a.wireframeLinewidth;if(a.wireframeLinecap!==undefined)this.wireframeLinecap=a.wireframeLinecap;if(a.wireframeLinejoin!==undefined)this.wireframeLinejoin=a.wireframeLinejoin;if(a.vertexColors!==undefined)this.vertexColors=a.vertexColors;if(a.skinning!==undefined)this.skinning=a.skinning;
112 113
if(a.morphTargets!==undefined)this.morphTargets=a.morphTargets}};
THREE.MeshLambertMaterial=function(a){this.id=THREE.MaterialCounter.value++;this.color=new THREE.Color(16777215);this.opacity=1;this.envMap=this.lightMap=this.map=null;this.combine=THREE.MultiplyOperation;this.reflectivity=1;this.refractionRatio=0.98;this.fog=!0;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.depthTest=!0;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.vertexColors=!1;this.skinning=!1;this.morphTargets=
114 115
!1;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.lightMap!==undefined)this.lightMap=a.lightMap;if(a.envMap!==undefined)this.envMap=a.envMap;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refractionRatio!==undefined)this.refractionRatio=a.refractionRatio;if(a.fog!==undefined)this.fog=a.fog;if(a.shading!==undefined)this.shading=a.shading;
if(a.blending!==undefined)this.blending=a.blending;if(a.depthTest!==undefined)this.depthTest=a.depthTest;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframeLinewidth!==undefined)this.wireframeLinewidth=a.wireframeLinewidth;if(a.wireframeLinecap!==undefined)this.wireframeLinecap=a.wireframeLinecap;if(a.wireframeLinejoin!==undefined)this.wireframeLinejoin=a.wireframeLinejoin;if(a.vertexColors!==undefined)this.vertexColors=a.vertexColors;if(a.skinning!==undefined)this.skinning=a.skinning;
116
if(a.morphTargets!==undefined)this.morphTargets=a.morphTargets}};
117
THREE.MeshPhongMaterial=function(a){this.id=THREE.MaterialCounter.value++;this.color=new THREE.Color(16777215);this.ambient=new THREE.Color(328965);this.specular=new THREE.Color(1118481);this.shininess=30;this.opacity=1;this.envMap=this.lightMap=this.map=null;this.combine=THREE.MultiplyOperation;this.reflectivity=1;this.refractionRatio=0.98;this.fog=!0;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.depthTest=!0;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=
118
this.wireframeLinecap="round";this.vertexColors=!1;this.skinning=!1;this.morphTargets=!1;if(a){if(a.color!==undefined)this.color=new THREE.Color(a.color);if(a.ambient!==undefined)this.ambient=new THREE.Color(a.ambient);if(a.specular!==undefined)this.specular=new THREE.Color(a.specular);if(a.shininess!==undefined)this.shininess=a.shininess;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.lightMap!==undefined)this.lightMap=a.lightMap;if(a.map!==undefined)this.map=a.map;if(a.envMap!==undefined)this.envMap=
119
a.envMap;if(a.combine!==undefined)this.combine=a.combine;if(a.reflectivity!==undefined)this.reflectivity=a.reflectivity;if(a.refractionRatio!==undefined)this.refractionRatio=a.refractionRatio;if(a.fog!==undefined)this.fog=a.fog;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.depthTest!==undefined)this.depthTest=a.depthTest;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframeLinewidth!==undefined)this.wireframeLinewidth=a.wireframeLinewidth;
120
if(a.wireframeLinecap!==undefined)this.wireframeLinecap=a.wireframeLinecap;if(a.wireframeLinejoin!==undefined)this.wireframeLinejoin=a.wireframeLinejoin;if(a.vertexColors!==undefined)this.vertexColors=a.vertexColors;if(a.skinning!==undefined)this.skinning=a.skinning;if(a.morphTargets!==undefined)this.morphTargets=a.morphTargets}};
121 122 123 124
THREE.MeshDepthMaterial=function(a){this.id=THREE.MaterialCounter.value++;this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.depthTest=!0;this.wireframe=!1;this.wireframeLinewidth=1;if(a){if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.depthTest!==undefined)this.depthTest=a.depthTest;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframeLinewidth!==
undefined)this.wireframeLinewidth=a.wireframeLinewidth}};
THREE.MeshNormalMaterial=function(a){this.id=THREE.MaterialCounter.value++;this.opacity=1;this.shading=THREE.FlatShading;this.blending=THREE.NormalBlending;this.depthTest=!0;this.wireframe=!1;this.wireframeLinewidth=1;if(a){if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.depthTest!==undefined)this.depthTest=a.depthTest;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframeLinewidth!==
undefined)this.wireframeLinewidth=a.wireframeLinewidth}};THREE.MeshFaceMaterial=function(){};
125 126 127
THREE.MeshShaderMaterial=function(a){this.id=THREE.MaterialCounter.value++;this.vertexShader=this.fragmentShader="void main() {}";this.uniforms={};this.opacity=1;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.depthTest=!0;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.vertexColors=!1;this.skinning=!1;this.morphTargets=!1;if(a){if(a.fragmentShader!==undefined)this.fragmentShader=a.fragmentShader;if(a.vertexShader!==undefined)this.vertexShader=
a.vertexShader;if(a.uniforms!==undefined)this.uniforms=a.uniforms;if(a.opacity!==undefined)this.opacity=a.opacity;if(a.shading!==undefined)this.shading=a.shading;if(a.blending!==undefined)this.blending=a.blending;if(a.depthTest!==undefined)this.depthTest=a.depthTest;if(a.wireframe!==undefined)this.wireframe=a.wireframe;if(a.wireframeLinewidth!==undefined)this.wireframeLinewidth=a.wireframeLinewidth;if(a.wireframeLinecap!==undefined)this.wireframeLinecap=a.wireframeLinecap;if(a.wireframeLinejoin!==
undefined)this.wireframeLinejoin=a.wireframeLinejoin;if(a.vertexColors!==undefined)this.vertexColors=a.vertexColors;if(a.skinning!==undefined)this.skinning=a.skinning;if(a.morphTargets!==undefined)this.morphTargets=a.morphTargets}};
128 129
THREE.ParticleBasicMaterial=function(a){this.id=THREE.MaterialCounter.value++;this.color=new THREE.Color(16777215);this.opacity=1;this.map=null;this.size=1;this.sizeAttenuation=!0;this.blending=THREE.NormalBlending;this.depthTest=!0;this.offset=new THREE.Vector2;this.vertexColors=!1;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.sizeAttenuation!==undefined)this.sizeAttenuation=
a.sizeAttenuation;if(a.blending!==undefined)this.blending=a.blending;if(a.depthTest!==undefined)this.depthTest=a.depthTest;if(a.vertexColors!==undefined)this.vertexColors=a.vertexColors}};THREE.ParticleCircleMaterial=function(a){this.id=THREE.MaterialCounter.value++;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}};
A
alteredq 已提交
130
THREE.ParticleDOMMaterial=function(a){this.id=THREE.MaterialCounter.value++;this.domElement=a};THREE.Texture=function(a,c,b,d,e,g){this.image=a;this.mapping=c!==undefined?c:new THREE.UVMapping;this.wrapS=b!==undefined?b:THREE.ClampToEdgeWrapping;this.wrapT=d!==undefined?d:THREE.ClampToEdgeWrapping;this.magFilter=e!==undefined?e:THREE.LinearFilter;this.minFilter=g!==undefined?g:THREE.LinearMipMapLinearFilter;this.needsUpdate=!1};
131
THREE.Texture.prototype={clone:function(){return new THREE.Texture(this.image,this.mapping,this.wrapS,this.wrapT,this.magFilter,this.minFilter)}};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;
132
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;
M
Mikael Emtinger 已提交
133
THREE.RenderTarget=function(a,c,b){this.width=a;this.height=c;b=b||{};this.wrapS=b.wrapS!==undefined?b.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=b.wrapT!==undefined?b.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=b.magFilter!==undefined?b.magFilter:THREE.LinearFilter;this.minFilter=b.minFilter!==undefined?b.minFilter:THREE.LinearMipMapLinearFilter;this.format=b.format!==undefined?b.format:THREE.RGBFormat;this.type=b.type!==undefined?b.type:THREE.UnsignedByteType};
A
alteredq 已提交
134
var Uniforms={clone:function(a){var c,b,d,e={};for(c in a){e[c]={};for(b in a[c]){d=a[c][b];e[c][b]=d instanceof THREE.Color||d instanceof THREE.Vector3||d instanceof THREE.Texture?d.clone():d}}return e},merge:function(a){var c,b,d,e={};for(c=0;c<a.length;c++){d=this.clone(a[c]);for(b in d)e[b]=d[b]}return e}};THREE.Particle=function(a){THREE.Object3D.call(this);this.materials=a instanceof Array?a:[a];this.matrixAutoUpdate=!1};THREE.Particle.prototype=new THREE.Object3D;
M
Mikael Emtinger 已提交
135 136 137 138 139
THREE.Particle.prototype.constructor=THREE.Particle;THREE.ParticleSystem=function(a,c){THREE.Object3D.call(this);this.geometry=a;this.materials=c instanceof Array?c:[c];this.sortParticles=!1};THREE.ParticleSystem.prototype=new THREE.Object3D;THREE.ParticleSystem.prototype.constructor=THREE.ParticleSystem;THREE.Line=function(a,c,b){THREE.Object3D.call(this);this.geometry=a;this.materials=c instanceof Array?c:[c];this.type=b!=undefined?b:THREE.LineStrip};THREE.LineStrip=0;THREE.LinePieces=1;
THREE.Line.prototype=new THREE.Object3D;THREE.Line.prototype.constructor=THREE.Line;
THREE.Mesh=function(a,c){THREE.Object3D.call(this);this.geometry=a;this.materials=c&&c.length?c:[c];this.flipSided=!1;this.doubleSided=!1;this.overdraw=!1;if(this.geometry){this.geometry.boundingSphere||this.geometry.computeBoundingSphere();this.boundRadius=a.boundingSphere.radius;if(this.geometry.morphTargets.length){this.morphTargetBase=-1;this.morphTargetInfluences=[];this.morphTargetDictionary={};for(var b=0;b<this.geometry.morphTargets.length;b++){this.morphTargetInfluences.push(0);this.morphTargetDictionary[this.geometry.morphTargets[b].name]=
b}}}};THREE.Mesh.prototype=new THREE.Object3D;THREE.Mesh.prototype.constructor=THREE.Mesh;THREE.Mesh.prototype.supr=THREE.Object3D.prototype;THREE.Mesh.prototype.getMorphTargetIndexByName=function(a){if(this.morphTargetDictionary[a]!==undefined)return this.morphTargetDictionary[a];console.log("THREE.Mesh.getMorphTargetIndexByName: morph target "+a+" does not exist. Returning 0.");return 0};
THREE.Bone=function(a){THREE.Object3D.call(this);this.skin=a;this.skinMatrix=new THREE.Matrix4;this.hasNoneBoneChildren=!1};THREE.Bone.prototype=new THREE.Object3D;THREE.Bone.prototype.constructor=THREE.Bone;THREE.Bone.prototype.supr=THREE.Object3D.prototype;
A
alteredq 已提交
140
THREE.Bone.prototype.update=function(a,c,b){this.matrixAutoUpdate&&(c|=this.updateMatrix());if(c||this.matrixWorldNeedsUpdate){a?this.skinMatrix.multiply(a,this.matrix):this.skinMatrix.copy(this.matrix);this.matrixWorldNeedsUpdate=!1;c=!0}var d,e=this.children.length;if(this.hasNoneBoneChildren){this.matrixWorld.multiply(this.skin.matrixWorld,this.skinMatrix);for(d=0;d<e;d++){a=this.children[d];a instanceof THREE.Bone?a.update(this.skinMatrix,c,b):a.update(this.matrixWorld,!0,b)}}else for(d=0;d<e;d++)this.children[d].update(this.skinMatrix,
M
Mikael Emtinger 已提交
141
c,b)};THREE.Bone.prototype.addChild=function(a){if(this.children.indexOf(a)===-1){a.parent!==undefined&&a.parent.removeChild(a);a.parent=this;this.children.push(a);if(!(a instanceof THREE.Bone))this.hasNoneBoneChildren=!0}};if(!window.Float32Array)window.Float32Array=Array;
M
Mikael Emtinger 已提交
142 143 144
THREE.SkinnedMesh=function(a,c){THREE.Mesh.call(this,a,c);this.identityMatrix=new THREE.Matrix4;this.bones=[];this.boneMatrices=[];var b,d,e,g,h,j;if(this.geometry.bones!==undefined){for(b=0;b<this.geometry.bones.length;b++){e=this.geometry.bones[b];g=e.pos;h=e.rotq;j=e.scl;d=this.addBone();d.name=e.name;d.position.set(g[0],g[1],g[2]);d.quaternion.set(h[0],h[1],h[2],h[3]);d.useQuaternion=!0;j!==undefined?d.scale.set(j[0],j[1],j[2]):d.scale.set(1,1,1)}for(b=0;b<this.bones.length;b++){e=this.geometry.bones[b];
d=this.bones[b];e.parent===-1?this.addChild(d):this.bones[e.parent].addChild(d)}this.boneMatrices=new Float32Array(16*this.bones.length);this.pose()}};THREE.SkinnedMesh.prototype=new THREE.Mesh;THREE.SkinnedMesh.prototype.constructor=THREE.SkinnedMesh;
THREE.SkinnedMesh.prototype.update=function(a,c,b){if(this.visible){this.matrixAutoUpdate&&(c|=this.updateMatrix());if(c||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixWorldNeedsUpdate=!1;c=!0}var d,e=this.children.length;for(d=0;d<e;d++){a=this.children[d];a instanceof THREE.Bone?a.update(this.identityMatrix,!1,b):a.update(this.matrixWorld,c,b)}b=this.bones.length;ba=this.bones;bm=this.boneMatrices;for(c=0;c<b;c++)ba[c].skinMatrix.flattenToArrayOffset(bm,
M
Mikael Emtinger 已提交
145
c*16)}};THREE.SkinnedMesh.prototype.addBone=function(a){a===undefined&&(a=new THREE.Bone(this));this.bones.push(a);return a};
A
alteredq 已提交
146 147
THREE.SkinnedMesh.prototype.pose=function(){this.update(undefined,!0);for(var a,c=[],b=0;b<this.bones.length;b++){a=this.bones[b];c.push(THREE.Matrix4.makeInvert(a.skinMatrix));a.skinMatrix.flattenToArrayOffset(this.boneMatrices,b*16)}if(this.geometry.skinVerticesA===undefined){this.geometry.skinVerticesA=[];this.geometry.skinVerticesB=[];var d;for(a=0;a<this.geometry.skinIndices.length;a++){b=this.geometry.vertices[a].position;var e=this.geometry.skinIndices[a].x,g=this.geometry.skinIndices[a].y;
d=new THREE.Vector3(b.x,b.y,b.z);this.geometry.skinVerticesA.push(c[e].multiplyVector3(d));d=new THREE.Vector3(b.x,b.y,b.z);this.geometry.skinVerticesB.push(c[g].multiplyVector3(d));if(this.geometry.skinWeights[a].x+this.geometry.skinWeights[a].y!==1){b=(1-(this.geometry.skinWeights[a].x+this.geometry.skinWeights[a].y))*0.5;this.geometry.skinWeights[a].x+=b;this.geometry.skinWeights[a].y+=b}}}};
M
Mikael Emtinger 已提交
148
THREE.Ribbon=function(a,c){THREE.Object3D.call(this);this.geometry=a;this.materials=c instanceof Array?c:[c];this.flipSided=!1;this.doubleSided=!1};THREE.Ribbon.prototype=new THREE.Object3D;THREE.Ribbon.prototype.constructor=THREE.Ribbon;
A
alteredq 已提交
149 150
THREE.Sound=function(a,c,b,d){THREE.Object3D.call(this);this.isLoaded=!1;this.isAddedToDOM=!1;this.isPlaying=!1;this.duration=-1;this.radius=c!==undefined?Math.abs(c):100;this.volume=Math.min(1,Math.max(0,b!==undefined?b:1));this.domElement=document.createElement("audio");this.domElement.volume=0;this.domElement.pan=0;this.domElement.loop=d!==undefined?d:!0;this.sources=a instanceof Array?a:[a];var e;b=this.sources.length;for(a=0;a<b;a++){c=this.sources[a];c.toLowerCase();if(c.indexOf(".mp3")!==-1)e=
"audio/mpeg";else if(c.indexOf(".ogg")!==-1)e="audio/ogg";else c.indexOf(".wav")!==-1&&(e="audio/wav");if(this.domElement.canPlayType(e)){e=document.createElement("source");e.src=this.sources[a];this.domElement.THREESound=this;this.domElement.appendChild(e);this.domElement.addEventListener("canplay",this.onLoad,!0);this.domElement.load();break}}};THREE.Sound.prototype=new THREE.Object3D;THREE.Sound.prototype.constructor=THREE.Sound;THREE.Sound.prototype.supr=THREE.Object3D.prototype;
M
Mr.doob 已提交
151 152
THREE.Sound.prototype.onLoad=function(){var a=this.THREESound;if(!a.isLoaded){this.removeEventListener("canplay",this.onLoad,!0);a.isLoaded=!0;a.duration=this.duration;a.isPlaying&&a.play()}};THREE.Sound.prototype.addToDOM=function(a){this.isAddedToDOM=!0;a.appendChild(this.domElement)};THREE.Sound.prototype.play=function(a){this.isPlaying=!0;if(this.isLoaded){this.domElement.play();if(a)this.domElement.currentTime=a%this.duration}};THREE.Sound.prototype.pause=function(){this.isPlaying=!1;this.domElement.pause()};
THREE.Sound.prototype.stop=function(){this.isPlaying=!1;this.domElement.pause();this.domElement.currentTime=0};THREE.Sound.prototype.calculateVolumeAndPan=function(a){a=a.length();this.domElement.volume=a<=this.radius?this.volume*(1-a/this.radius):0};
M
Mikael Emtinger 已提交
153 154 155 156 157 158 159
THREE.Sound.prototype.update=function(a,c,b){if(this.matrixAutoUpdate){this.matrix.setPosition(this.position);c=!0}if(c||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixWorldNeedsUpdate=!1;c=!0}var d=this.children.length;for(a=0;a<d;a++)this.children[a].update(this.matrixWorld,c,b)};THREE.LOD=function(){THREE.Object3D.call(this);this.LODs=[]};THREE.LOD.prototype=new THREE.Object3D;THREE.LOD.prototype.constructor=THREE.LOD;
THREE.LOD.prototype.supr=THREE.Object3D.prototype;THREE.LOD.prototype.add=function(a,c){c===undefined&&(c=0);c=Math.abs(c);for(var b=0;b<this.LODs.length;b++)if(c<this.LODs[b].visibleAtDistance)break;this.LODs.splice(b,0,{visibleAtDistance:c,object3D:a});this.addChild(a)};
THREE.LOD.prototype.update=function(a,c,b){this.matrixAutoUpdate&&(c|=this.updateMatrix());if(c||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixWorldNeedsUpdate=!1;c=!0}if(this.LODs.length>1){a=b.matrixWorldInverse;a=-(a.n31*this.position.x+a.n32*this.position.y+a.n33*this.position.z+a.n34);this.LODs[0].object3D.visible=!0;for(var d=1;d<this.LODs.length;d++)if(a>=this.LODs[d].visibleAtDistance){this.LODs[d-1].object3D.visible=
!1;this.LODs[d].object3D.visible=!0}else break;for(;d<this.LODs.length;d++)this.LODs[d].object3D.visible=!1}for(a=0;a<this.children.length;a++)this.children[a].update(this.matrixWorld,c,b)};THREE.Scene=function(){THREE.Object3D.call(this);this.matrixAutoUpdate=!1;this.fog=null;this.objects=[];this.lights=[];this.sounds=[];this.__objectsAdded=[];this.__objectsRemoved=[]};THREE.Scene.prototype=new THREE.Object3D;THREE.Scene.prototype.constructor=THREE.Scene;THREE.Scene.prototype.supr=THREE.Object3D.prototype;
THREE.Scene.prototype.addChild=function(a){this.supr.addChild.call(this,a);this.addChildRecurse(a)};THREE.Scene.prototype.addChildRecurse=function(a){if(a instanceof THREE.Light)this.lights.indexOf(a)===-1&&this.lights.push(a);else if(a instanceof THREE.Sound)this.sounds.indexOf(a)===-1&&this.sounds.push(a);else if(!(a instanceof THREE.Camera||a instanceof THREE.Bone)&&this.objects.indexOf(a)===-1){this.objects.push(a);this.__objectsAdded.push(a)}for(var c=0;c<a.children.length;c++)this.addChildRecurse(a.children[c])};
THREE.Scene.prototype.removeChild=function(a){this.supr.removeChild.call(this,a);this.removeChildRecurse(a)};THREE.Scene.prototype.removeChildRecurse=function(a){if(a instanceof THREE.Light){var c=this.lights.indexOf(a);c!==-1&&this.lights.splice(c,1)}else if(a instanceof THREE.Sound){c=this.sounds.indexOf(a);c!==-1&&this.sounds.splice(c,1)}else if(!(a instanceof THREE.Camera)){c=this.objects.indexOf(a);if(c!==-1){this.objects.splice(c,1);this.__objectsRemoved.push(a)}}for(c=0;c<a.children.length;c++)this.removeChildRecurse(a.children[c])};
THREE.Scene.prototype.addObject=THREE.Scene.prototype.addChild;THREE.Scene.prototype.removeObject=THREE.Scene.prototype.removeChild;THREE.Scene.prototype.addLight=THREE.Scene.prototype.addChild;THREE.Scene.prototype.removeLight=THREE.Scene.prototype.removeChild;THREE.Fog=function(a,c,b){this.color=new THREE.Color(a);this.near=c||1;this.far=b||1E3};THREE.FogExp2=function(a,c){this.color=new THREE.Color(a);this.density=c!==undefined?c:2.5E-4};
M
Mikael Emtinger 已提交
160 161 162 163 164
THREE.Projector=function(){function a(M,f){return f.z-M.z}function c(M,f){var W=0,R=1,da=M.z+M.w,ga=f.z+f.w,I=-M.z+M.w,ca=-f.z+f.w;if(da>=0&&ga>=0&&I>=0&&ca>=0)return!0;else if(da<0&&ga<0||I<0&&ca<0)return!1;else{if(da<0)W=Math.max(W,da/(da-ga));else ga<0&&(R=Math.min(R,da/(da-ga)));if(I<0)W=Math.max(W,I/(I-ca));else ca<0&&(R=Math.min(R,I/(I-ca)));if(R<W)return!1;else{M.lerpSelf(f,W);f.lerpSelf(M,1-R);return!0}}}var b,d,e=[],g,h,j,k=[],l,o,v=[],u,t,y=[],C=new THREE.Vector4,F=new THREE.Vector4,w=new THREE.Matrix4,
G=new THREE.Matrix4,x=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],N=new THREE.Vector4,L=new THREE.Vector4,Y;this.projectObjects=function(M,f,W){f=[];var R,da,ga;d=0;da=M.objects;M=0;for(R=da.length;M<R;M++){ga=da[M];var I;if(!(I=!ga.visible))if(I=ga instanceof THREE.Mesh){a:{I=void 0;for(var ca=ga.matrixWorld,za=-ga.geometry.boundingSphere.radius*Math.max(ga.scale.x,Math.max(ga.scale.y,ga.scale.z)),ea=0;ea<6;ea++){I=x[ea].x*ca.n14+
x[ea].y*ca.n24+x[ea].z*ca.n34+x[ea].w;if(I<=za){I=!1;break a}}I=!0}I=!I}if(!I){b=e[d]=e[d]||new THREE.RenderableObject;C.copy(ga.position);w.multiplyVector3(C);b.object=ga;b.z=C.z;f.push(b);d++}}W&&f.sort(a);return f};this.projectScene=function(M,f,W){var R=[],da=f.near,ga=f.far,I,ca,za,ea,xa,ja,ha,va,Aa,ia,$,qa,ra,Q,ma,ta;j=o=t=0;f.matrixAutoUpdate&&f.update();w.multiply(f.projectionMatrix,f.matrixWorldInverse);x[0].set(w.n41-w.n11,w.n42-w.n12,w.n43-w.n13,w.n44-w.n14);x[1].set(w.n41+w.n11,w.n42+
w.n12,w.n43+w.n13,w.n44+w.n14);x[2].set(w.n41+w.n21,w.n42+w.n22,w.n43+w.n23,w.n44+w.n24);x[3].set(w.n41-w.n21,w.n42-w.n22,w.n43-w.n23,w.n44-w.n24);x[4].set(w.n41-w.n31,w.n42-w.n32,w.n43-w.n33,w.n44-w.n34);x[5].set(w.n41+w.n31,w.n42+w.n32,w.n43+w.n33,w.n44+w.n34);for(I=0;I<6;I++){ja=x[I];ja.divideScalar(Math.sqrt(ja.x*ja.x+ja.y*ja.y+ja.z*ja.z))}M.update(undefined,!1,f);ja=this.projectObjects(M,f,!0);M=0;for(I=ja.length;M<I;M++){ha=ja[M].object;if(ha.visible){va=ha.matrixWorld;$=ha.matrixRotationWorld;
Aa=ha.materials;ia=ha.overdraw;if(ha instanceof THREE.Mesh){qa=ha.geometry;ra=qa.vertices;ca=0;for(za=ra.length;ca<za;ca++){Q=ra[ca];Q.positionWorld.copy(Q.position);va.multiplyVector3(Q.positionWorld);ea=Q.positionScreen;ea.copy(Q.positionWorld);w.multiplyVector4(ea);ea.x/=ea.w;ea.y/=ea.w;Q.__visible=ea.z>da&&ea.z<ga}qa=qa.faces;ca=0;for(za=qa.length;ca<za;ca++){Q=qa[ca];if(Q instanceof THREE.Face3){ea=ra[Q.a];xa=ra[Q.b];ma=ra[Q.c];if(ea.__visible&&xa.__visible&&ma.__visible&&(ha.doubleSided||ha.flipSided!=
165
(ma.positionScreen.x-ea.positionScreen.x)*(xa.positionScreen.y-ea.positionScreen.y)-(ma.positionScreen.y-ea.positionScreen.y)*(xa.positionScreen.x-ea.positionScreen.x)<0)){g=k[j]=k[j]||new THREE.RenderableFace3;g.v1.positionWorld.copy(ea.positionWorld);g.v2.positionWorld.copy(xa.positionWorld);g.v3.positionWorld.copy(ma.positionWorld);g.v1.positionScreen.copy(ea.positionScreen);g.v2.positionScreen.copy(xa.positionScreen);g.v3.positionScreen.copy(ma.positionScreen);g.normalWorld.copy(Q.normal);$.multiplyVector3(g.normalWorld);
M
Mikael Emtinger 已提交
166
g.centroidWorld.copy(Q.centroid);va.multiplyVector3(g.centroidWorld);g.centroidScreen.copy(g.centroidWorld);w.multiplyVector3(g.centroidScreen);ma=Q.vertexNormals;Y=g.vertexNormalsWorld;ea=0;for(xa=ma.length;ea<xa;ea++){ta=Y[ea]=Y[ea]||new THREE.Vector3;ta.copy(ma[ea]);$.multiplyVector3(ta)}g.z=g.centroidScreen.z;g.meshMaterials=Aa;g.faceMaterials=Q.materials;g.overdraw=ia;if(ha.geometry.uvs[ca]){g.uvs[0]=ha.geometry.uvs[ca][0];g.uvs[1]=ha.geometry.uvs[ca][1];g.uvs[2]=ha.geometry.uvs[ca][2]}R.push(g);
167
j++}}else if(Q instanceof THREE.Face4){ea=ra[Q.a];xa=ra[Q.b];ma=ra[Q.c];ta=ra[Q.d];if(ea.__visible&&xa.__visible&&ma.__visible&&ta.__visible&&(ha.doubleSided||ha.flipSided!=((ta.positionScreen.x-ea.positionScreen.x)*(xa.positionScreen.y-ea.positionScreen.y)-(ta.positionScreen.y-ea.positionScreen.y)*(xa.positionScreen.x-ea.positionScreen.x)<0||(xa.positionScreen.x-ma.positionScreen.x)*(ta.positionScreen.y-ma.positionScreen.y)-(xa.positionScreen.y-ma.positionScreen.y)*(ta.positionScreen.x-ma.positionScreen.x)<
M
Mikael Emtinger 已提交
168
0))){g=k[j]=k[j]||new THREE.RenderableFace3;g.v1.positionWorld.copy(ea.positionWorld);g.v2.positionWorld.copy(xa.positionWorld);g.v3.positionWorld.copy(ta.positionWorld);g.v1.positionScreen.copy(ea.positionScreen);g.v2.positionScreen.copy(xa.positionScreen);g.v3.positionScreen.copy(ta.positionScreen);g.normalWorld.copy(Q.normal);$.multiplyVector3(g.normalWorld);g.centroidWorld.copy(Q.centroid);va.multiplyVector3(g.centroidWorld);g.centroidScreen.copy(g.centroidWorld);w.multiplyVector3(g.centroidScreen);
M
Mikael Emtinger 已提交
169
g.z=g.centroidScreen.z;g.meshMaterials=Aa;g.faceMaterials=Q.materials;g.overdraw=ia;if(ha.geometry.uvs[ca]){g.uvs[0]=ha.geometry.uvs[ca][0];g.uvs[1]=ha.geometry.uvs[ca][1];g.uvs[2]=ha.geometry.uvs[ca][3]}R.push(g);j++;h=k[j]=k[j]||new THREE.RenderableFace3;h.v1.positionWorld.copy(xa.positionWorld);h.v2.positionWorld.copy(ma.positionWorld);h.v3.positionWorld.copy(ta.positionWorld);h.v1.positionScreen.copy(xa.positionScreen);h.v2.positionScreen.copy(ma.positionScreen);h.v3.positionScreen.copy(ta.positionScreen);
M
Mikael Emtinger 已提交
170 171 172
h.normalWorld.copy(g.normalWorld);h.centroidWorld.copy(g.centroidWorld);h.centroidScreen.copy(g.centroidScreen);h.z=h.centroidScreen.z;h.meshMaterials=Aa;h.faceMaterials=Q.materials;h.overdraw=ia;if(ha.geometry.uvs[ca]){h.uvs[0]=ha.geometry.uvs[ca][1];h.uvs[1]=ha.geometry.uvs[ca][2];h.uvs[2]=ha.geometry.uvs[ca][3]}R.push(h);j++}}}}else if(ha instanceof THREE.Line){G.multiply(w,va);ra=ha.geometry.vertices;Q=ra[0];Q.positionScreen.copy(Q.position);G.multiplyVector4(Q.positionScreen);ca=1;for(za=ra.length;ca<
za;ca++){ea=ra[ca];ea.positionScreen.copy(ea.position);G.multiplyVector4(ea.positionScreen);xa=ra[ca-1];N.copy(ea.positionScreen);L.copy(xa.positionScreen);if(c(N,L)){N.multiplyScalar(1/N.w);L.multiplyScalar(1/L.w);l=v[o]=v[o]||new THREE.RenderableLine;l.v1.positionScreen.copy(N);l.v2.positionScreen.copy(L);l.z=Math.max(N.z,L.z);l.materials=ha.materials;R.push(l);o++}}}else if(ha instanceof THREE.Particle){F.set(ha.position.x,ha.position.y,ha.position.z,1);w.multiplyVector4(F);F.z/=F.w;if(F.z>0&&
F.z<1){u=y[t]=y[t]||new THREE.RenderableParticle;u.x=F.x/F.w;u.y=F.y/F.w;u.z=F.z;u.rotation=ha.rotation.z;u.scale.x=ha.scale.x*Math.abs(u.x-(F.x+f.projectionMatrix.n11)/(F.w+f.projectionMatrix.n14));u.scale.y=ha.scale.y*Math.abs(u.y-(F.y+f.projectionMatrix.n22)/(F.w+f.projectionMatrix.n24));u.materials=ha.materials;R.push(u);t++}}}}W&&R.sort(a);return R};this.unprojectVector=function(M,f){var W=f.matrixWorld.clone();W.multiplySelf(THREE.Matrix4.makeInvert(f.projectionMatrix));W.multiplyVector3(M);
173
return M}};
M
Mikael Emtinger 已提交
174 175 176 177 178 179 180 181 182 183 184 185
THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,b,d,e,g;this.domElement=document.createElement("div");this.setSize=function(h,j){b=h;d=j;e=b/2;g=d/2};this.render=function(h,j){var k,l,o,v,u,t,y,C;a=c.projectScene(h,j);k=0;for(l=a.length;k<l;k++){u=a[k];if(u instanceof THREE.RenderableParticle){y=u.x*e+e;C=u.y*g+g;o=0;for(v=u.material.length;o<v;o++){t=u.material[o];if(t instanceof THREE.ParticleDOMMaterial){t=t.domElement;t.style.left=y+"px";t.style.top=C+"px"}}}}}};
THREE.CanvasRenderer=function(){function a(ka){if(u!=ka)l.globalAlpha=u=ka}function c(ka){if(t!=ka){switch(ka){case THREE.NormalBlending:l.globalCompositeOperation="source-over";break;case THREE.AdditiveBlending:l.globalCompositeOperation="lighter";break;case THREE.SubtractiveBlending:l.globalCompositeOperation="darker"}t=ka}}var b=null,d=new THREE.Projector,e=document.createElement("canvas"),g,h,j,k,l=e.getContext("2d"),o=new THREE.Color(0),v=0,u=1,t=0,y=null,C=null,F=1,w,G,x,N,L,Y,M,f,W,R=new THREE.Color,
da=new THREE.Color,ga=new THREE.Color,I=new THREE.Color,ca=new THREE.Color,za,ea,xa,ja,ha,va,Aa,ia,$,qa=new THREE.Rectangle,ra=new THREE.Rectangle,Q=new THREE.Rectangle,ma=!1,ta=new THREE.Color,m=new THREE.Color,z=new THREE.Color,q=new THREE.Color,n=Math.PI*2,p=new THREE.Vector3,B,A,D,O,X,E,aa=16;B=document.createElement("canvas");B.width=B.height=2;A=B.getContext("2d");A.fillStyle="rgba(0,0,0,1)";A.fillRect(0,0,2,2);D=A.getImageData(0,0,2,2);O=D.data;X=document.createElement("canvas");X.width=X.height=
aa;E=X.getContext("2d");E.translate(-aa/2,-aa/2);E.scale(aa,aa);aa--;this.domElement=e;this.autoClear=!0;this.sortObjects=!0;this.sortElements=!0;this.setSize=function(ka,na){g=ka;h=na;j=g/2;k=h/2;e.width=g;e.height=h;qa.set(-j,-k,j,k);u=1;t=0;C=y=null;F=1};this.setClearColor=function(ka,na){o=ka;v=na};this.setClearColorHex=function(ka,na){o.setHex(ka);v=na};this.clear=function(){l.setTransform(1,0,0,-1,j,k);if(!ra.isEmpty()){ra.inflate(1);ra.minSelf(qa);if(o.hex==0&&v==0)l.clearRect(ra.getX(),ra.getY(),
ra.getWidth(),ra.getHeight());else{c(THREE.NormalBlending);a(1);l.fillStyle="rgba("+Math.floor(o.r*255)+","+Math.floor(o.g*255)+","+Math.floor(o.b*255)+","+v+")";l.fillRect(ra.getX(),ra.getY(),ra.getWidth(),ra.getHeight())}ra.empty()}};this.render=function(ka,na){function wa(P){var oa,Z,J,T=P.lights;m.setRGB(0,0,0);z.setRGB(0,0,0);q.setRGB(0,0,0);P=0;for(oa=T.length;P<oa;P++){Z=T[P];J=Z.color;if(Z instanceof THREE.AmbientLight){m.r+=J.r;m.g+=J.g;m.b+=J.b}else if(Z instanceof THREE.DirectionalLight){z.r+=
J.r;z.g+=J.g;z.b+=J.b}else if(Z instanceof THREE.PointLight){q.r+=J.r;q.g+=J.g;q.b+=J.b}}}function la(P,oa,Z,J){var T,fa,pa,sa,ua=P.lights;P=0;for(T=ua.length;P<T;P++){fa=ua[P];pa=fa.color;sa=fa.intensity;if(fa instanceof THREE.DirectionalLight){fa=Z.dot(fa.position)*sa;if(fa>0){J.r+=pa.r*fa;J.g+=pa.g*fa;J.b+=pa.b*fa}}else if(fa instanceof THREE.PointLight){p.sub(fa.position,oa);p.normalize();fa=Z.dot(p)*sa;if(fa>0){J.r+=pa.r*fa;J.g+=pa.g*fa;J.b+=pa.b*fa}}}}function Ca(P,oa,Z){if(Z.opacity!=0){a(Z.opacity);
c(Z.blending);var J,T,fa,pa,sa,ua;if(Z instanceof THREE.ParticleBasicMaterial){if(Z.map){pa=Z.map.image;sa=pa.width>>1;ua=pa.height>>1;T=oa.scale.x*j;fa=oa.scale.y*k;Z=T*sa;J=fa*ua;Q.set(P.x-Z,P.y-J,P.x+Z,P.y+J);if(qa.instersects(Q)){l.save();l.translate(P.x,P.y);l.rotate(-oa.rotation);l.scale(T,-fa);l.translate(-sa,-ua);l.drawImage(pa,0,0);l.restore()}}}else if(Z instanceof THREE.ParticleCircleMaterial){if(ma){ta.r=m.r+z.r+q.r;ta.g=m.g+z.g+q.g;ta.b=m.b+z.b+q.b;R.r=Z.color.r*ta.r;R.g=Z.color.g*ta.g;
R.b=Z.color.b*ta.b;R.updateStyleString()}else R.__styleString=Z.color.__styleString;Z=oa.scale.x*j;J=oa.scale.y*k;Q.set(P.x-Z,P.y-J,P.x+Z,P.y+J);if(qa.instersects(Q)){T=R.__styleString;if(C!=T)l.fillStyle=C=T;l.save();l.translate(P.x,P.y);l.rotate(-oa.rotation);l.scale(Z,J);l.beginPath();l.arc(0,0,1,0,n,!0);l.closePath();l.fill();l.restore()}}}}function Da(P,oa,Z,J){if(J.opacity!=0){a(J.opacity);c(J.blending);l.beginPath();l.moveTo(P.positionScreen.x,P.positionScreen.y);l.lineTo(oa.positionScreen.x,
oa.positionScreen.y);l.closePath();if(J instanceof THREE.LineBasicMaterial){R.__styleString=J.color.__styleString;P=J.linewidth;if(F!=P)l.lineWidth=F=P;P=R.__styleString;if(y!=P)l.strokeStyle=y=P;l.stroke();Q.inflate(J.linewidth*2)}}}function Pa(P,oa,Z,J,T,fa){if(T.opacity!=0){a(T.opacity);c(T.blending);N=P.positionScreen.x;L=P.positionScreen.y;Y=oa.positionScreen.x;M=oa.positionScreen.y;f=Z.positionScreen.x;W=Z.positionScreen.y;l.beginPath();l.moveTo(N,L);l.lineTo(Y,M);l.lineTo(f,W);l.lineTo(N,L);
l.closePath();if(T instanceof THREE.MeshBasicMaterial)if(T.map)T.map.mapping instanceof THREE.UVMapping&&Ia(N,L,Y,M,f,W,T.map.image,J.uvs[0].u,J.uvs[0].v,J.uvs[1].u,J.uvs[1].v,J.uvs[2].u,J.uvs[2].v);else if(T.envMap){if(T.envMap.mapping instanceof THREE.SphericalReflectionMapping){P=na.matrixWorldInverse;p.copy(J.vertexNormalsWorld[0]);ja=(p.x*P.n11+p.y*P.n12+p.z*P.n13)*0.5+0.5;ha=-(p.x*P.n21+p.y*P.n22+p.z*P.n23)*0.5+0.5;p.copy(J.vertexNormalsWorld[1]);va=(p.x*P.n11+p.y*P.n12+p.z*P.n13)*0.5+0.5;Aa=
-(p.x*P.n21+p.y*P.n22+p.z*P.n23)*0.5+0.5;p.copy(J.vertexNormalsWorld[2]);ia=(p.x*P.n11+p.y*P.n12+p.z*P.n13)*0.5+0.5;$=-(p.x*P.n21+p.y*P.n22+p.z*P.n23)*0.5+0.5;Ia(N,L,Y,M,f,W,T.envMap.image,ja,ha,va,Aa,ia,$)}}else T.wireframe?K(T.color.__styleString,T.wireframeLinewidth):Na(T.color.__styleString);else if(T instanceof THREE.MeshLambertMaterial){if(T.map&&!T.wireframe){T.map.mapping instanceof THREE.UVMapping&&Ia(N,L,Y,M,f,W,T.map.image,J.uvs[0].u,J.uvs[0].v,J.uvs[1].u,J.uvs[1].v,J.uvs[2].u,J.uvs[2].v);
c(THREE.SubtractiveBlending)}if(ma)if(!T.wireframe&&T.shading==THREE.SmoothShading&&J.vertexNormalsWorld.length==3){da.r=ga.r=I.r=m.r;da.g=ga.g=I.g=m.g;da.b=ga.b=I.b=m.b;la(fa,J.v1.positionWorld,J.vertexNormalsWorld[0],da);la(fa,J.v2.positionWorld,J.vertexNormalsWorld[1],ga);la(fa,J.v3.positionWorld,J.vertexNormalsWorld[2],I);ca.r=(ga.r+I.r)*0.5;ca.g=(ga.g+I.g)*0.5;ca.b=(ga.b+I.b)*0.5;xa=Oa(da,ga,I,ca);Ia(N,L,Y,M,f,W,xa,0,0,1,0,0,1)}else{ta.r=m.r;ta.g=m.g;ta.b=m.b;la(fa,J.centroidWorld,J.normalWorld,
186
ta);R.r=T.color.r*ta.r;R.g=T.color.g*ta.g;R.b=T.color.b*ta.b;R.updateStyleString();T.wireframe?K(R.__styleString,T.wireframeLinewidth):Na(R.__styleString)}else T.wireframe?K(T.color.__styleString,T.wireframeLinewidth):Na(T.color.__styleString)}else if(T instanceof THREE.MeshDepthMaterial){za=na.near;ea=na.far;da.r=da.g=da.b=1-S(P.positionScreen.z,za,ea);ga.r=ga.g=ga.b=1-S(oa.positionScreen.z,za,ea);I.r=I.g=I.b=1-S(Z.positionScreen.z,za,ea);ca.r=(ga.r+I.r)*0.5;ca.g=(ga.g+I.g)*0.5;ca.b=(ga.b+I.b)*0.5;
M
Mikael Emtinger 已提交
187 188
xa=Oa(da,ga,I,ca);Ia(N,L,Y,M,f,W,xa,0,0,1,0,0,1)}else if(T instanceof THREE.MeshNormalMaterial){R.r=U(J.normalWorld.x);R.g=U(J.normalWorld.y);R.b=U(J.normalWorld.z);R.updateStyleString();T.wireframe?K(R.__styleString,T.wireframeLinewidth):Na(R.__styleString)}}}function K(P,oa){if(y!=P)l.strokeStyle=y=P;if(F!=oa)l.lineWidth=F=oa;l.stroke();Q.inflate(oa*2)}function Na(P){if(C!=P)l.fillStyle=C=P;l.fill()}function Ia(P,oa,Z,J,T,fa,pa,sa,ua,Ra,La,Ka,Wa){var Ea,Sa;Ea=pa.width-1;Sa=pa.height-1;sa*=Ea;ua*=
Sa;Ra*=Ea;La*=Sa;Ka*=Ea;Wa*=Sa;Z-=P;J-=oa;T-=P;fa-=oa;Ra-=sa;La-=ua;Ka-=sa;Wa-=ua;Ea=Ra*Wa-Ka*La;if(Ea!=0){Sa=1/Ea;Ea=(Wa*Z-La*T)*Sa;La=(Wa*J-La*fa)*Sa;Z=(Ra*T-Ka*Z)*Sa;J=(Ra*fa-Ka*J)*Sa;P=P-Ea*sa-Z*ua;oa=oa-La*sa-J*ua;l.save();l.transform(Ea,La,Z,J,P,oa);l.clip();l.drawImage(pa,0,0);l.restore()}}function Oa(P,oa,Z,J){var T=~~(P.r*255),fa=~~(P.g*255);P=~~(P.b*255);var pa=~~(oa.r*255),sa=~~(oa.g*255);oa=~~(oa.b*255);var ua=~~(Z.r*255),Ra=~~(Z.g*255);Z=~~(Z.b*255);var La=~~(J.r*255),Ka=~~(J.g*255);
189
J=~~(J.b*255);O[0]=T<0?0:T>255?255:T;O[1]=fa<0?0:fa>255?255:fa;O[2]=P<0?0:P>255?255:P;O[4]=pa<0?0:pa>255?255:pa;O[5]=sa<0?0:sa>255?255:sa;O[6]=oa<0?0:oa>255?255:oa;O[8]=ua<0?0:ua>255?255:ua;O[9]=Ra<0?0:Ra>255?255:Ra;O[10]=Z<0?0:Z>255?255:Z;O[12]=La<0?0:La>255?255:La;O[13]=Ka<0?0:Ka>255?255:Ka;O[14]=J<0?0:J>255?255:J;A.putImageData(D,0,0);E.drawImage(B,0,0);return X}function S(P,oa,Z){P=(P-oa)/(Z-oa);return P*P*(3-2*P)}function U(P){P=(P+1)*0.5;return P<0?0:P>1?1:P}function V(P,oa){var Z=oa.x-P.x,
M
Mikael Emtinger 已提交
190 191 192
J=oa.y-P.y,T=1/Math.sqrt(Z*Z+J*J);Z*=T;J*=T;oa.x+=Z;oa.y+=J;P.x-=Z;P.y-=J}var ya,Ma,Fa,Ba,Ga,H,Ja,Ha;this.autoClear?this.clear():l.setTransform(1,0,0,-1,j,k);b=d.projectScene(ka,na,this.sortElements);(ma=ka.lights.length>0)&&wa(ka);ya=0;for(Ma=b.length;ya<Ma;ya++){Fa=b[ya];Q.empty();if(Fa instanceof THREE.RenderableParticle){w=Fa;w.x*=j;w.y*=k;Ba=0;for(Ga=Fa.materials.length;Ba<Ga;Ba++)Ca(w,Fa,Fa.materials[Ba],ka)}else if(Fa instanceof THREE.RenderableLine){w=Fa.v1;G=Fa.v2;w.positionScreen.x*=j;w.positionScreen.y*=
k;G.positionScreen.x*=j;G.positionScreen.y*=k;Q.addPoint(w.positionScreen.x,w.positionScreen.y);Q.addPoint(G.positionScreen.x,G.positionScreen.y);if(qa.instersects(Q)){Ba=0;for(Ga=Fa.materials.length;Ba<Ga;)Da(w,G,Fa,Fa.materials[Ba++],ka)}}else if(Fa instanceof THREE.RenderableFace3){w=Fa.v1;G=Fa.v2;x=Fa.v3;w.positionScreen.x*=j;w.positionScreen.y*=k;G.positionScreen.x*=j;G.positionScreen.y*=k;x.positionScreen.x*=j;x.positionScreen.y*=k;if(Fa.overdraw){V(w.positionScreen,G.positionScreen);V(G.positionScreen,
x.positionScreen);V(x.positionScreen,w.positionScreen)}Q.add3Points(w.positionScreen.x,w.positionScreen.y,G.positionScreen.x,G.positionScreen.y,x.positionScreen.x,x.positionScreen.y);if(qa.instersects(Q)){Ba=0;for(Ga=Fa.meshMaterials.length;Ba<Ga;){Ha=Fa.meshMaterials[Ba++];if(Ha instanceof THREE.MeshFaceMaterial){H=0;for(Ja=Fa.faceMaterials.length;H<Ja;)(Ha=Fa.faceMaterials[H++])&&Pa(w,G,x,Fa,Ha,ka)}else Pa(w,G,x,Fa,Ha,ka)}}}ra.addRectangle(Q)}l.setTransform(1,0,0,1,0,0)}};
193
THREE.SVGRenderer=function(){function a(ja,ha,va){var Aa,ia,$,qa;Aa=0;for(ia=ja.lights.length;Aa<ia;Aa++){$=ja.lights[Aa];if($ instanceof THREE.DirectionalLight){qa=ha.normalWorld.dot($.position)*$.intensity;if(qa>0){va.r+=$.color.r*qa;va.g+=$.color.g*qa;va.b+=$.color.b*qa}}else if($ instanceof THREE.PointLight){W.sub($.position,ha.centroidWorld);W.normalize();qa=ha.normalWorld.dot(W)*$.intensity;if(qa>0){va.r+=$.color.r*qa;va.g+=$.color.g*qa;va.b+=$.color.b*qa}}}}function c(ja,ha,va,Aa,ia,$){I=d(ca++);
M
Mikael Emtinger 已提交
194 195 196 197 198 199
I.setAttribute("d","M "+ja.positionScreen.x+" "+ja.positionScreen.y+" L "+ha.positionScreen.x+" "+ha.positionScreen.y+" L "+va.positionScreen.x+","+va.positionScreen.y+"z");if(ia instanceof THREE.MeshBasicMaterial)x.__styleString=ia.color.__styleString;else if(ia instanceof THREE.MeshLambertMaterial)if(G){N.r=L.r;N.g=L.g;N.b=L.b;a($,Aa,N);x.r=ia.color.r*N.r;x.g=ia.color.g*N.g;x.b=ia.color.b*N.b;x.updateStyleString()}else x.__styleString=ia.color.__styleString;else if(ia instanceof THREE.MeshDepthMaterial){f=
1-ia.__2near/(ia.__farPlusNear-Aa.z*ia.__farMinusNear);x.setRGB(f,f,f)}else ia instanceof THREE.MeshNormalMaterial&&x.setRGB(e(Aa.normalWorld.x),e(Aa.normalWorld.y),e(Aa.normalWorld.z));ia.wireframe?I.setAttribute("style","fill: none; stroke: "+x.__styleString+"; stroke-width: "+ia.wireframeLinewidth+"; stroke-opacity: "+ia.opacity+"; stroke-linecap: "+ia.wireframeLinecap+"; stroke-linejoin: "+ia.wireframeLinejoin):I.setAttribute("style","fill: "+x.__styleString+"; fill-opacity: "+ia.opacity);j.appendChild(I)}
function b(ja,ha,va,Aa,ia,$,qa){I=d(ca++);I.setAttribute("d","M "+ja.positionScreen.x+" "+ja.positionScreen.y+" L "+ha.positionScreen.x+" "+ha.positionScreen.y+" L "+va.positionScreen.x+","+va.positionScreen.y+" L "+Aa.positionScreen.x+","+Aa.positionScreen.y+"z");if($ instanceof THREE.MeshBasicMaterial)x.__styleString=$.color.__styleString;else if($ instanceof THREE.MeshLambertMaterial)if(G){N.r=L.r;N.g=L.g;N.b=L.b;a(qa,ia,N);x.r=$.color.r*N.r;x.g=$.color.g*N.g;x.b=$.color.b*N.b;x.updateStyleString()}else x.__styleString=
$.color.__styleString;else if($ instanceof THREE.MeshDepthMaterial){f=1-$.__2near/($.__farPlusNear-ia.z*$.__farMinusNear);x.setRGB(f,f,f)}else $ instanceof THREE.MeshNormalMaterial&&x.setRGB(e(ia.normalWorld.x),e(ia.normalWorld.y),e(ia.normalWorld.z));$.wireframe?I.setAttribute("style","fill: none; stroke: "+x.__styleString+"; stroke-width: "+$.wireframeLinewidth+"; stroke-opacity: "+$.opacity+"; stroke-linecap: "+$.wireframeLinecap+"; stroke-linejoin: "+$.wireframeLinejoin):I.setAttribute("style",
"fill: "+x.__styleString+"; fill-opacity: "+$.opacity);j.appendChild(I)}function d(ja){if(R[ja]==null){R[ja]=document.createElementNS("http://www.w3.org/2000/svg","path");xa==0&&R[ja].setAttribute("shape-rendering","crispEdges")}return R[ja]}function e(ja){return ja<0?Math.min((1+ja)*0.5,0.5):0.5+Math.min(ja*0.5,0.5)}var g=null,h=new THREE.Projector,j=document.createElementNS("http://www.w3.org/2000/svg","svg"),k,l,o,v,u,t,y,C,F=new THREE.Rectangle,w=new THREE.Rectangle,G=!1,x=new THREE.Color(16777215),
N=new THREE.Color(16777215),L=new THREE.Color(0),Y=new THREE.Color(0),M=new THREE.Color(0),f,W=new THREE.Vector3,R=[],da=[],ga=[],I,ca,za,ea,xa=1;this.domElement=j;this.autoClear=!0;this.sortObjects=!0;this.sortElements=!0;this.setQuality=function(ja){switch(ja){case "high":xa=1;break;case "low":xa=0}};this.setSize=function(ja,ha){k=ja;l=ha;o=k/2;v=l/2;j.setAttribute("viewBox",-o+" "+-v+" "+k+" "+l);j.setAttribute("width",k);j.setAttribute("height",l);F.set(-o,-v,o,v)};this.clear=function(){for(;j.childNodes.length>
M
Mikael Emtinger 已提交
200
0;)j.removeChild(j.childNodes[0])};this.render=function(ja,ha){var va,Aa,ia,$,qa,ra,Q,ma;this.autoClear&&this.clear();g=h.projectScene(ja,ha,this.sortElements);ea=za=ca=0;if(G=ja.lights.length>0){Q=ja.lights;L.setRGB(0,0,0);Y.setRGB(0,0,0);M.setRGB(0,0,0);va=0;for(Aa=Q.length;va<Aa;va++){ia=Q[va];$=ia.color;if(ia instanceof THREE.AmbientLight){L.r+=$.r;L.g+=$.g;L.b+=$.b}else if(ia instanceof THREE.DirectionalLight){Y.r+=$.r;Y.g+=$.g;Y.b+=$.b}else if(ia instanceof THREE.PointLight){M.r+=$.r;M.g+=$.g;
M
Mikael Emtinger 已提交
201 202 203 204 205 206
M.b+=$.b}}}va=0;for(Aa=g.length;va<Aa;va++){Q=g[va];w.empty();if(Q instanceof THREE.RenderableParticle){u=Q;u.x*=o;u.y*=-v;ia=0;for($=Q.materials.length;ia<$;ia++)if(ma=Q.materials[ia]){qa=u;ra=Q;var ta=za++;if(da[ta]==null){da[ta]=document.createElementNS("http://www.w3.org/2000/svg","circle");xa==0&&da[ta].setAttribute("shape-rendering","crispEdges")}I=da[ta];I.setAttribute("cx",qa.x);I.setAttribute("cy",qa.y);I.setAttribute("r",ra.scale.x*o);if(ma instanceof THREE.ParticleCircleMaterial){if(G){N.r=
L.r+Y.r+M.r;N.g=L.g+Y.g+M.g;N.b=L.b+Y.b+M.b;x.r=ma.color.r*N.r;x.g=ma.color.g*N.g;x.b=ma.color.b*N.b;x.updateStyleString()}else x=ma.color;I.setAttribute("style","fill: "+x.__styleString)}j.appendChild(I)}}else if(Q instanceof THREE.RenderableLine){u=Q.v1;t=Q.v2;u.positionScreen.x*=o;u.positionScreen.y*=-v;t.positionScreen.x*=o;t.positionScreen.y*=-v;w.addPoint(u.positionScreen.x,u.positionScreen.y);w.addPoint(t.positionScreen.x,t.positionScreen.y);if(F.instersects(w)){ia=0;for($=Q.materials.length;ia<
$;)if(ma=Q.materials[ia++]){qa=u;ra=t;ta=ea++;if(ga[ta]==null){ga[ta]=document.createElementNS("http://www.w3.org/2000/svg","line");xa==0&&ga[ta].setAttribute("shape-rendering","crispEdges")}I=ga[ta];I.setAttribute("x1",qa.positionScreen.x);I.setAttribute("y1",qa.positionScreen.y);I.setAttribute("x2",ra.positionScreen.x);I.setAttribute("y2",ra.positionScreen.y);if(ma instanceof THREE.LineBasicMaterial){x.__styleString=ma.color.__styleString;I.setAttribute("style","fill: none; stroke: "+x.__styleString+
"; stroke-width: "+ma.linewidth+"; stroke-opacity: "+ma.opacity+"; stroke-linecap: "+ma.linecap+"; stroke-linejoin: "+ma.linejoin);j.appendChild(I)}}}}else if(Q instanceof THREE.RenderableFace3){u=Q.v1;t=Q.v2;y=Q.v3;u.positionScreen.x*=o;u.positionScreen.y*=-v;t.positionScreen.x*=o;t.positionScreen.y*=-v;y.positionScreen.x*=o;y.positionScreen.y*=-v;w.addPoint(u.positionScreen.x,u.positionScreen.y);w.addPoint(t.positionScreen.x,t.positionScreen.y);w.addPoint(y.positionScreen.x,y.positionScreen.y);
if(F.instersects(w)){ia=0;for($=Q.meshMaterials.length;ia<$;){ma=Q.meshMaterials[ia++];if(ma instanceof THREE.MeshFaceMaterial){qa=0;for(ra=Q.faceMaterials.length;qa<ra;)(ma=Q.faceMaterials[qa++])&&c(u,t,y,Q,ma,ja)}else ma&&c(u,t,y,Q,ma,ja)}}}else if(Q instanceof THREE.RenderableFace4){u=Q.v1;t=Q.v2;y=Q.v3;C=Q.v4;u.positionScreen.x*=o;u.positionScreen.y*=-v;t.positionScreen.x*=o;t.positionScreen.y*=-v;y.positionScreen.x*=o;y.positionScreen.y*=-v;C.positionScreen.x*=o;C.positionScreen.y*=-v;w.addPoint(u.positionScreen.x,
u.positionScreen.y);w.addPoint(t.positionScreen.x,t.positionScreen.y);w.addPoint(y.positionScreen.x,y.positionScreen.y);w.addPoint(C.positionScreen.x,C.positionScreen.y);if(F.instersects(w)){ia=0;for($=Q.meshMaterials.length;ia<$;){ma=Q.meshMaterials[ia++];if(ma instanceof THREE.MeshFaceMaterial){qa=0;for(ra=Q.faceMaterials.length;qa<ra;)(ma=Q.faceMaterials[qa++])&&b(u,t,y,C,Q,ma,ja)}else ma&&b(u,t,y,C,Q,ma,ja)}}}}}};
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
THREE.ShaderChunk={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 envMap;\nuniform int combine;\n#endif",envmap_fragment:"#ifdef USE_ENVMAP\nvec4 cubeColor = textureCube( envMap, 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 refractionRatio;\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 ), refractionRatio );\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 lightMap;\n#endif",lightmap_pars_vertex:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\n#endif",
lightmap_fragment:"#ifdef USE_LIGHTMAP\ngl_FragColor = gl_FragColor * texture2D( lightMap, vUv2 );\n#endif",lightmap_vertex:"#ifdef USE_LIGHTMAP\nvUv2 = uv2;\n#endif",lights_pars_vertex:"uniform bool enableLighting;\nuniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n#ifdef PHONG\nvarying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];\n#endif\n#endif",
lights_vertex:"if ( !enableLighting ) {\nvLightWeighting = vec3( 1.0 );\n} else {\nvLightWeighting = ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nfloat directionalLightWeighting = max( dot( transformedNormal, normalize( lDirection.xyz ) ), 0.0 );\nvLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 pointLightVector = normalize( lPosition.xyz - mvPosition.xyz );\nfloat pointLightWeighting = max( dot( transformedNormal, pointLightVector ), 0.0 );\nvLightWeighting += pointLightColor[ i ] * pointLightWeighting;\n#ifdef PHONG\nvPointLightVector[ i ] = pointLightVector;\n#endif\n}\n#endif\n}",
lights_pars_fragment:"#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nvarying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",lights_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\nvec4 mColor = vec4( diffuse, opacity );\nvec4 mSpecular = vec4( specular, opacity );\n#if MAX_POINT_LIGHTS > 0\nvec4 pointDiffuse  = vec4( 0.0 );\nvec4 pointSpecular = vec4( 0.0 );\nfor( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {\nvec3 pointVector = normalize( vPointLightVector[ i ] );\nvec3 pointHalfVector = normalize( vPointLightVector[ i ] + vViewPosition );\nfloat pointDotNormalHalf = dot( normal, pointHalfVector );\nfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\nfloat pointSpecularWeight = 0.0;\nif ( pointDotNormalHalf >= 0.0 )\npointSpecularWeight = pow( pointDotNormalHalf, shininess );\npointDiffuse  += mColor * pointDiffuseWeight;\npointSpecular += mSpecular * pointSpecularWeight;\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec4 dirDiffuse  = vec4( 0.0 );\nvec4 dirSpecular = vec4( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nvec3 dirHalfVector = normalize( lDirection.xyz + vViewPosition );\nfloat dirDotNormalHalf = dot( normal, dirHalfVector );\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\nfloat dirSpecularWeight = 0.0;\nif ( dirDotNormalHalf >= 0.0 )\ndirSpecularWeight = pow( dirDotNormalHalf, shininess );\ndirDiffuse  += mColor * dirDiffuseWeight;\ndirSpecular += mSpecular * dirSpecularWeight;\n}\n#endif\nvec4 totalLight = vec4( ambient, opacity );\n#if MAX_DIR_LIGHTS > 0\ntotalLight += dirDiffuse + dirSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalLight += pointDiffuse + pointSpecular;\n#endif\ngl_FragColor = gl_FragColor * totalLight;",
color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, opacity );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\nvColor = color;\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\nuniform mat4 boneGlobalMatrices[ MAX_BONES ];\n#endif",skinning_vertex:"#ifdef USE_SKINNING\ngl_Position  = ( boneGlobalMatrices[ int( skinIndex.x ) ] * skinVertexA ) * skinWeight.x;\ngl_Position += ( boneGlobalMatrices[ int( skinIndex.y ) ] * skinVertexB ) * skinWeight.y;\ngl_Position  = projectionMatrix * viewMatrix * objectMatrix * gl_Position;\n#else\ngl_Position = projectionMatrix * mvPosition;\n#endif"};
THREE.UniformsLib={common:{diffuse:{type:"c",value:new THREE.Color(15658734)},opacity:{type:"f",value:1},map:{type:"t",value:0,texture:null},lightMap:{type:"t",value:2,texture:null},envMap:{type:"t",value:1,texture:null},useRefract:{type:"i",value:0},reflectivity:{type:"f",value:1},refractionRatio:{type:"f",value:0.98},combine:{type:"i",value:0},fogDensity:{type:"f",value:2.5E-4},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},fogColor:{type:"c",value:new THREE.Color(16777215)}},lights:{enableLighting:{type:"i",
value:1},ambientLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]},directionalLightColor:{type:"fv",value:[]},pointLightPosition:{type:"fv",value:[]},pointLightColor:{type:"fv",value:[]}},particle:{psColor:{type:"c",value:new THREE.Color(15658734)},opacity:{type:"f",value:1},size:{type:"f",value:1},scale:{type:"f",value:1},map:{type:"t",value:0,texture:null},fogDensity:{type:"f",value:2.5E-4},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},fogColor:{type:"c",value:new THREE.Color(16777215)}}};
THREE.ShaderLib={depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f",value:1}},fragmentShader:"uniform float mNear;\nuniform float mFar;\nuniform float opacity;\nvoid main() {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat color = 1.0 - smoothstep( mNear, mFar, depth );\ngl_FragColor = vec4( vec3( color ), opacity );\n}",vertexShader:"void main() {\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"},normal:{uniforms:{opacity:{type:"f",
value:1}},fragmentShader:"uniform float opacity;\nvarying vec3 vNormal;\nvoid main() {\ngl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );\n}",vertexShader:"varying vec3 vNormal;\nvoid main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvNormal = normalize( normalMatrix * normal );\ngl_Position = projectionMatrix * mvPosition;\n}"},basic:{uniforms:THREE.UniformsLib.common,fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;",THREE.ShaderChunk.color_pars_fragment,
THREE.ShaderChunk.map_pars_fragment,THREE.ShaderChunk.lightmap_pars_fragment,THREE.ShaderChunk.envmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( diffuse, opacity );",THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:[THREE.ShaderChunk.map_pars_vertex,THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,
THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk.map_vertex,THREE.ShaderChunk.lightmap_vertex,THREE.ShaderChunk.envmap_vertex,THREE.ShaderChunk.color_vertex,THREE.ShaderChunk.skinning_vertex,"}"].join("\n")},lambert:{uniforms:Uniforms.merge([THREE.UniformsLib.common,THREE.UniformsLib.lights]),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nvarying vec3 vLightWeighting;",
THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_pars_fragment,THREE.ShaderChunk.lightmap_pars_fragment,THREE.ShaderChunk.envmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( diffuse, opacity );\ngl_FragColor = gl_FragColor * vec4( vLightWeighting, 1.0 );",THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["varying vec3 vLightWeighting;",
THREE.ShaderChunk.map_pars_vertex,THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,THREE.ShaderChunk.lights_pars_vertex,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk.map_vertex,THREE.ShaderChunk.lightmap_vertex,THREE.ShaderChunk.envmap_vertex,THREE.ShaderChunk.color_vertex,"vec3 transformedNormal = normalize( normalMatrix * normal );",THREE.ShaderChunk.lights_vertex,
THREE.ShaderChunk.skinning_vertex,"}"].join("\n")},phong:{uniforms:Uniforms.merge([THREE.UniformsLib.common,THREE.UniformsLib.lights,{ambient:{type:"c",value:new THREE.Color(328965)},specular:{type:"c",value:new THREE.Color(1118481)},shininess:{type:"f",value:30}}]),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nuniform vec3 ambient;\nuniform vec3 specular;\nuniform float shininess;\nvarying vec3 vLightWeighting;",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_pars_fragment,
THREE.ShaderChunk.lightmap_pars_fragment,THREE.ShaderChunk.envmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.lights_pars_fragment,"void main() {\ngl_FragColor = vec4( vLightWeighting, 1.0 );",THREE.ShaderChunk.lights_fragment,THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["#define PHONG\nvarying vec3 vLightWeighting;\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",
THREE.ShaderChunk.map_pars_vertex,THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,THREE.ShaderChunk.lights_pars_vertex,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk.map_vertex,THREE.ShaderChunk.lightmap_vertex,THREE.ShaderChunk.envmap_vertex,THREE.ShaderChunk.color_vertex,"#ifndef USE_ENVMAP\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\n#endif\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 transformedNormal = normalize( normalMatrix * normal );\nvNormal = transformedNormal;",
THREE.ShaderChunk.lights_vertex,THREE.ShaderChunk.skinning_vertex,"}"].join("\n")},particle_basic:{uniforms:THREE.UniformsLib.particle,fragmentShader:["uniform vec3 psColor;\nuniform float opacity;",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_particle_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( psColor, opacity );",THREE.ShaderChunk.map_particle_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["uniform float size;\nuniform float scale;",
THREE.ShaderChunk.color_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n#ifdef USE_SIZEATTENUATION\ngl_PointSize = size * ( scale / length( mvPosition.xyz ) );\n#else\ngl_PointSize = size;\n#endif\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n")}};
M
Mikael Emtinger 已提交
228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
THREE.WebGLRenderer=function(a){function c(m,z,q){var n,p,B,A=m.vertices,D=A.length,O=m.colors,X=O.length,E=m.__vertexArray,aa=m.__colorArray,ka=m.__sortArray,na=m.__dirtyVertices,wa=m.__dirtyColors;if(q.sortParticles){Aa.multiplySelf(q.matrixWorld);for(n=0;n<D;n++){p=A[n].position;qa.copy(p);Aa.multiplyVector3(qa);ka[n]=[qa.z,n]}ka.sort(function(la,Ca){return Ca[0]-la[0]});for(n=0;n<D;n++){p=A[ka[n][1]].position;B=n*3;E[B]=p.x;E[B+1]=p.y;E[B+2]=p.z}for(n=0;n<X;n++){B=n*3;color=O[ka[n][1]];aa[B]=
color.r;aa[B+1]=color.g;aa[B+2]=color.b}}else{if(na)for(n=0;n<D;n++){p=A[n].position;B=n*3;E[B]=p.x;E[B+1]=p.y;E[B+2]=p.z}if(wa)for(n=0;n<X;n++){color=O[n];B=n*3;aa[B]=color.r;aa[B+1]=color.g;aa[B+2]=color.b}}if(na||q.sortParticles){f.bindBuffer(f.ARRAY_BUFFER,m.__webGLVertexBuffer);f.bufferData(f.ARRAY_BUFFER,E,z)}if(wa||q.sortParticles){f.bindBuffer(f.ARRAY_BUFFER,m.__webGLColorBuffer);f.bufferData(f.ARRAY_BUFFER,aa,z)}}function b(m,z){m.fragmentShader=z.fragmentShader;m.vertexShader=z.vertexShader;
m.uniforms=Uniforms.clone(z.uniforms)}function d(m,z,q,n,p){n.program||da.initMaterial(n,z,q,p);var B=n.program,A=B.uniforms,D=n.uniforms;if(B!=W){f.useProgram(B);W=B}f.uniformMatrix4fv(A.projectionMatrix,!1,ia);if(q&&(n instanceof THREE.MeshBasicMaterial||n instanceof THREE.MeshLambertMaterial||n instanceof THREE.MeshPhongMaterial||n instanceof THREE.LineBasicMaterial||n instanceof THREE.ParticleBasicMaterial)){D.fogColor.value.setHex(q.color.hex);if(q instanceof THREE.Fog){D.fogNear.value=q.near;
D.fogFar.value=q.far}else if(q instanceof THREE.FogExp2)D.fogDensity.value=q.density}if(n instanceof THREE.MeshPhongMaterial||n instanceof THREE.MeshLambertMaterial){var O,X,E=0,aa=0,ka=0,na,wa,la,Ca=ra,Da=Ca.directional.colors,Pa=Ca.directional.positions,K=Ca.point.colors,Na=Ca.point.positions,Ia=0,Oa=0;q=X=X=0;for(O=z.length;q<O;q++){X=z[q];na=X.color;wa=X.position;la=X.intensity;if(X instanceof THREE.AmbientLight){E+=na.r;aa+=na.g;ka+=na.b}else if(X instanceof THREE.DirectionalLight){X=Ia*3;Da[X]=
na.r*la;Da[X+1]=na.g*la;Da[X+2]=na.b*la;Pa[X]=wa.x;Pa[X+1]=wa.y;Pa[X+2]=wa.z;Ia+=1}else if(X instanceof THREE.PointLight){X=Oa*3;K[X]=na.r*la;K[X+1]=na.g*la;K[X+2]=na.b*la;Na[X]=wa.x;Na[X+1]=wa.y;Na[X+2]=wa.z;Oa+=1}}for(q=Ia*3;q<Da.length;q++)Da[q]=0;for(q=Oa*3;q<K.length;q++)K[q]=0;Ca.point.length=Oa;Ca.directional.length=Ia;Ca.ambient[0]=E;Ca.ambient[1]=aa;Ca.ambient[2]=ka;z=ra;D.enableLighting.value=z.directional.length+z.point.length;D.ambientLightColor.value=z.ambient;D.directionalLightColor.value=
z.directional.colors;D.directionalLightDirection.value=z.directional.positions;D.pointLightColor.value=z.point.colors;D.pointLightPosition.value=z.point.positions}if(n instanceof THREE.MeshBasicMaterial||n instanceof THREE.MeshLambertMaterial||n instanceof THREE.MeshPhongMaterial){D.diffuse.value.setRGB(n.color.r*n.opacity,n.color.g*n.opacity,n.color.b*n.opacity);D.opacity.value=n.opacity;D.map.texture=n.map;D.lightMap.texture=n.lightMap;D.envMap.texture=n.envMap;D.reflectivity.value=n.reflectivity;
D.refractionRatio.value=n.refractionRatio;D.combine.value=n.combine;D.useRefract.value=n.envMap&&n.envMap.mapping instanceof THREE.CubeRefractionMapping}if(n instanceof THREE.LineBasicMaterial){D.diffuse.value.setRGB(n.color.r*n.opacity,n.color.g*n.opacity,n.color.b*n.opacity);D.opacity.value=n.opacity}else if(n instanceof THREE.ParticleBasicMaterial){D.psColor.value.setRGB(n.color.r*n.opacity,n.color.g*n.opacity,n.color.b*n.opacity);D.opacity.value=n.opacity;D.size.value=n.size;D.scale.value=M.height/
2;D.map.texture=n.map}else if(n instanceof THREE.MeshPhongMaterial){D.ambient.value.setRGB(n.ambient.r,n.ambient.g,n.ambient.b);D.specular.value.setRGB(n.specular.r,n.specular.g,n.specular.b);D.shininess.value=n.shininess}else if(n instanceof THREE.MeshDepthMaterial){D.mNear.value=m.near;D.mFar.value=m.far;D.opacity.value=n.opacity}else if(n instanceof THREE.MeshNormalMaterial)D.opacity.value=n.opacity;for(var S in D)if(E=B.uniforms[S]){q=D[S];O=q.type;z=q.value;if(O=="i")f.uniform1i(E,z);else if(O==
"f")f.uniform1f(E,z);else if(O=="fv1")f.uniform1fv(E,z);else if(O=="fv")f.uniform3fv(E,z);else if(O=="v2")f.uniform2f(E,z.x,z.y);else if(O=="v3")f.uniform3f(E,z.x,z.y,z.z);else if(O=="c")f.uniform3f(E,z.r,z.g,z.b);else if(O=="t"){f.uniform1i(E,z);if(q=q.texture)if(q.image instanceof Array&&q.image.length==6){if(q.image.length==6){if(q.needsUpdate){if(q.__wasSetOnce){f.bindTexture(f.TEXTURE_CUBE_MAP,q.image.__webGLTextureCube);for(O=0;O<6;++O)f.texSubImage2D(f.TEXTURE_CUBE_MAP_POSITIVE_X+O,0,0,0,f.RGBA,
f.UNSIGNED_BYTE,q.image[O])}else{q.image.__webGLTextureCube=f.createTexture();f.bindTexture(f.TEXTURE_CUBE_MAP,q.image.__webGLTextureCube);for(O=0;O<6;++O)f.texImage2D(f.TEXTURE_CUBE_MAP_POSITIVE_X+O,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,q.image[O]);q.__wasSetOnce=!0}G(f.TEXTURE_CUBE_MAP,q,q.image[0]);f.bindTexture(f.TEXTURE_CUBE_MAP,null);q.needsUpdate=!1}f.activeTexture(f.TEXTURE0+z);f.bindTexture(f.TEXTURE_CUBE_MAP,q.image.__webGLTextureCube)}}else{if(q.needsUpdate){if(q.__wasSetOnce){f.bindTexture(f.TEXTURE_2D,
q.__webGLTexture);f.texSubImage2D(f.TEXTURE_2D,0,0,0,f.RGBA,f.UNSIGNED_BYTE,q.image)}else{q.__webGLTexture=f.createTexture();f.bindTexture(f.TEXTURE_2D,q.__webGLTexture);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,q.image);q.__wasSetOnce=!0}G(f.TEXTURE_2D,q,q.image);f.bindTexture(f.TEXTURE_2D,null);q.needsUpdate=!1}f.activeTexture(f.TEXTURE0+z);f.bindTexture(f.TEXTURE_2D,q.__webGLTexture)}}}f.uniformMatrix4fv(A.modelViewMatrix,!1,p._modelViewMatrixArray);f.uniformMatrix3fv(A.normalMatrix,
!1,p._normalMatrixArray);(n instanceof THREE.MeshShaderMaterial||n instanceof THREE.MeshPhongMaterial||n.envMap)&&f.uniform3f(A.cameraPosition,m.position.x,m.position.y,m.position.z);(n instanceof THREE.MeshShaderMaterial||n.envMap||n.skinning)&&f.uniformMatrix4fv(A.objectMatrix,!1,p._objectMatrixArray);(n instanceof THREE.MeshPhongMaterial||n instanceof THREE.MeshLambertMaterial||n instanceof THREE.MeshShaderMaterial||n.skinning)&&f.uniformMatrix4fv(A.viewMatrix,!1,$);if(n.skinning){f.uniformMatrix4fv(A.cameraInverseMatrix,
!1,$);f.uniformMatrix4fv(A.boneGlobalMatrices,!1,p.boneMatrices)}return B}function e(m,z,q,n,p,B){if(n.opacity!=0){m=d(m,z,q,n,B).attributes;if(n.morphTargets){B.morphTargetBase!==-1?f.bindBuffer(f.ARRAY_BUFFER,p.__webGLMorphTargetsBuffers[B.morphTargetBase]):f.bindBuffer(f.ARRAY_BUFFER,p.__webGLVertexBuffer);f.vertexAttribPointer(m.position,3,f.FLOAT,!1,0,0);z=[];q=-1;var A=0,D=B.morphTargetInfluences,O,X=D.length,E=0;for(B.morphTargetBase!==-1&&(z[B.morphTargetBase]=!0);E<n.numSupportedMorphTargets;){for(O=
0;O<X;O++)if(!z[O]&&D[O]>q){A=O;q=D[A]}f.bindBuffer(f.ARRAY_BUFFER,p.__webGLMorphTargetsBuffers[A]);f.vertexAttribPointer(m["morphTarget"+E],3,f.FLOAT,!1,0,0);B.__webGLMorphTargetInfluences[E]=q;z[A]=1;q=-1;E++}f.uniform1fv(n.program.uniforms.morphTargetInfluences,B.__webGLMorphTargetInfluences)}else{f.bindBuffer(f.ARRAY_BUFFER,p.__webGLVertexBuffer);f.vertexAttribPointer(m.position,3,f.FLOAT,!1,0,0)}if(m.color>=0){f.bindBuffer(f.ARRAY_BUFFER,p.__webGLColorBuffer);f.vertexAttribPointer(m.color,3,
f.FLOAT,!1,0,0)}if(m.normal>=0){f.bindBuffer(f.ARRAY_BUFFER,p.__webGLNormalBuffer);f.vertexAttribPointer(m.normal,3,f.FLOAT,!1,0,0)}if(m.tangent>=0){f.bindBuffer(f.ARRAY_BUFFER,p.__webGLTangentBuffer);f.vertexAttribPointer(m.tangent,4,f.FLOAT,!1,0,0)}if(m.uv>=0)if(p.__webGLUVBuffer){f.bindBuffer(f.ARRAY_BUFFER,p.__webGLUVBuffer);f.vertexAttribPointer(m.uv,2,f.FLOAT,!1,0,0);f.enableVertexAttribArray(m.uv)}else f.disableVertexAttribArray(m.uv);if(m.uv2>=0)if(p.__webGLUV2Buffer){f.bindBuffer(f.ARRAY_BUFFER,
p.__webGLUV2Buffer);f.vertexAttribPointer(m.uv2,2,f.FLOAT,!1,0,0);f.enableVertexAttribArray(m.uv2)}else f.disableVertexAttribArray(m.uv2);if(n.skinning&&m.skinVertexA>=0&&m.skinVertexB>=0&&m.skinIndex>=0&&m.skinWeight>=0){f.bindBuffer(f.ARRAY_BUFFER,p.__webGLSkinVertexABuffer);f.vertexAttribPointer(m.skinVertexA,4,f.FLOAT,!1,0,0);f.bindBuffer(f.ARRAY_BUFFER,p.__webGLSkinVertexBBuffer);f.vertexAttribPointer(m.skinVertexB,4,f.FLOAT,!1,0,0);f.bindBuffer(f.ARRAY_BUFFER,p.__webGLSkinIndicesBuffer);f.vertexAttribPointer(m.skinIndex,
4,f.FLOAT,!1,0,0);f.bindBuffer(f.ARRAY_BUFFER,p.__webGLSkinWeightsBuffer);f.vertexAttribPointer(m.skinWeight,4,f.FLOAT,!1,0,0)}if(B instanceof THREE.Mesh)if(n.wireframe){f.lineWidth(n.wireframeLinewidth);f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,p.__webGLLineBuffer);f.drawElements(f.LINES,p.__webGLLineCount,f.UNSIGNED_SHORT,0)}else{f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,p.__webGLFaceBuffer);f.drawElements(f.TRIANGLES,p.__webGLFaceCount,f.UNSIGNED_SHORT,0)}else if(B instanceof THREE.Line){B=B.type==THREE.LineStrip?
f.LINE_STRIP:f.LINES;f.lineWidth(n.linewidth);f.drawArrays(B,0,p.__webGLLineCount)}else if(B instanceof THREE.ParticleSystem)f.drawArrays(f.POINTS,0,p.__webGLParticleCount);else B instanceof THREE.Ribbon&&f.drawArrays(f.TRIANGLE_STRIP,0,p.__webGLVertexCount)}}function g(m,z){if(!m.__webGLVertexBuffer)m.__webGLVertexBuffer=f.createBuffer();if(!m.__webGLNormalBuffer)m.__webGLNormalBuffer=f.createBuffer();if(m.hasPos){f.bindBuffer(f.ARRAY_BUFFER,m.__webGLVertexBuffer);f.bufferData(f.ARRAY_BUFFER,m.positionArray,
f.DYNAMIC_DRAW);f.enableVertexAttribArray(z.attributes.position);f.vertexAttribPointer(z.attributes.position,3,f.FLOAT,!1,0,0)}if(m.hasNormal){f.bindBuffer(f.ARRAY_BUFFER,m.__webGLNormalBuffer);f.bufferData(f.ARRAY_BUFFER,m.normalArray,f.DYNAMIC_DRAW);f.enableVertexAttribArray(z.attributes.normal);f.vertexAttribPointer(z.attributes.normal,3,f.FLOAT,!1,0,0)}f.drawArrays(f.TRIANGLES,0,m.count);m.count=0}function h(m){if(ga!=m.doubleSided){m.doubleSided?f.disable(f.CULL_FACE):f.enable(f.CULL_FACE);ga=
m.doubleSided}if(I!=m.flipSided){m.flipSided?f.frontFace(f.CW):f.frontFace(f.CCW);I=m.flipSided}}function j(m){if(za!=m){m?f.enable(f.DEPTH_TEST):f.disable(f.DEPTH_TEST);za=m}}function k(m){va[0].set(m.n41-m.n11,m.n42-m.n12,m.n43-m.n13,m.n44-m.n14);va[1].set(m.n41+m.n11,m.n42+m.n12,m.n43+m.n13,m.n44+m.n14);va[2].set(m.n41+m.n21,m.n42+m.n22,m.n43+m.n23,m.n44+m.n24);va[3].set(m.n41-m.n21,m.n42-m.n22,m.n43-m.n23,m.n44-m.n24);va[4].set(m.n41-m.n31,m.n42-m.n32,m.n43-m.n33,m.n44-m.n34);va[5].set(m.n41+
m.n31,m.n42+m.n32,m.n43+m.n33,m.n44+m.n34);var z;for(m=0;m<6;m++){z=va[m];z.divideScalar(Math.sqrt(z.x*z.x+z.y*z.y+z.z*z.z))}}function l(m){for(var z=m.matrixWorld,q=-m.geometry.boundingSphere.radius*Math.max(m.scale.x,Math.max(m.scale.y,m.scale.z)),n=0;n<6;n++){m=va[n].x*z.n14+va[n].y*z.n24+va[n].z*z.n34+va[n].w;if(m<=q)return!1}return!0}function o(m,z){m.list[m.count]=z;m.count+=1}function v(m){var z,q,n=m.object,p=m.opaque,B=m.transparent;B.count=0;m=p.count=0;for(z=n.materials.length;m<z;m++){q=
n.materials[m];q.opacity&&q.opacity<1||q.blending!=THREE.NormalBlending?o(B,q):o(p,q)}}function u(m){var z,q,n,p,B=m.object,A=m.buffer,D=m.opaque,O=m.transparent;O.count=0;m=D.count=0;for(n=B.materials.length;m<n;m++){z=B.materials[m];if(z instanceof THREE.MeshFaceMaterial){z=0;for(q=A.materials.length;z<q;z++)(p=A.materials[z])&&(p.opacity&&p.opacity<1||p.blending!=THREE.NormalBlending?o(O,p):o(D,p))}else{p=z;p.opacity&&p.opacity<1||p.blending!=THREE.NormalBlending?o(O,p):o(D,p)}}}function t(m,z){return z.z-
m.z}function y(m,z){m._modelViewMatrix.multiplyToArray(z.matrixWorldInverse,m.matrixWorld,m._modelViewMatrixArray);THREE.Matrix4.makeInvert3x3(m._modelViewMatrix).transposeIntoArray(m._normalMatrixArray)}function C(m){function z(ka){var na=[];q=0;for(n=ka.length;q<n;q++)ka[q]==undefined?na.push("undefined"):na.push(ka[q].id);return na.join("_")}var q,n,p,B,A,D,O,X,E={},aa=m.morphTargets!==undefined?m.morphTargets.length:0;m.geometryGroups={};p=0;for(B=m.faces.length;p<B;p++){A=m.faces[p];D=A.materials;
O=z(D);E[O]==undefined&&(E[O]={hash:O,counter:0});X=E[O].hash+"_"+E[O].counter;m.geometryGroups[X]==undefined&&(m.geometryGroups[X]={faces:[],materials:D,vertices:0,numMorphTargets:aa});A=A instanceof THREE.Face3?3:4;if(m.geometryGroups[X].vertices+A>65535){E[O].counter+=1;X=E[O].hash+"_"+E[O].counter;m.geometryGroups[X]==undefined&&(m.geometryGroups[X]={faces:[],materials:D,vertices:0,numMorphTargets:aa})}m.geometryGroups[X].faces.push(p);m.geometryGroups[X].vertices+=A}}function F(m,z,q){m.push({buffer:z,
object:q,opaque:{list:[],count:0},transparent:{list:[],count:0}})}function w(m){if(m!=ca){switch(m){case THREE.AdditiveBlending:f.blendEquation(f.FUNC_ADD);f.blendFunc(f.ONE,f.ONE);break;case THREE.SubtractiveBlending:f.blendFunc(f.DST_COLOR,f.ZERO);break;case THREE.BillboardBlending:f.blendEquation(f.FUNC_ADD);f.blendFunc(f.SRC_ALPHA,f.ONE_MINUS_SRC_ALPHA);break;case THREE.ReverseSubtractiveBlending:f.blendEquation(f.FUNC_REVERSE_SUBTRACT);f.blendFunc(f.ONE,f.ONE);break;default:f.blendEquation(f.FUNC_ADD);
f.blendFunc(f.ONE,f.ONE_MINUS_SRC_ALPHA)}ca=m}}function G(m,z,q){if((q.width&q.width-1)==0&&(q.height&q.height-1)==0){f.texParameteri(m,f.TEXTURE_WRAP_S,Y(z.wrapS));f.texParameteri(m,f.TEXTURE_WRAP_T,Y(z.wrapT));f.texParameteri(m,f.TEXTURE_MAG_FILTER,Y(z.magFilter));f.texParameteri(m,f.TEXTURE_MIN_FILTER,Y(z.minFilter));f.generateMipmap(m)}else{f.texParameteri(m,f.TEXTURE_WRAP_S,f.CLAMP_TO_EDGE);f.texParameteri(m,f.TEXTURE_WRAP_T,f.CLAMP_TO_EDGE);f.texParameteri(m,f.TEXTURE_MAG_FILTER,L(z.magFilter));
f.texParameteri(m,f.TEXTURE_MIN_FILTER,L(z.minFilter))}}function x(m){if(m&&!m.__webGLFramebuffer){m.__webGLFramebuffer=f.createFramebuffer();m.__webGLRenderbuffer=f.createRenderbuffer();m.__webGLTexture=f.createTexture();f.bindRenderbuffer(f.RENDERBUFFER,m.__webGLRenderbuffer);f.renderbufferStorage(f.RENDERBUFFER,f.DEPTH_COMPONENT16,m.width,m.height);f.bindTexture(f.TEXTURE_2D,m.__webGLTexture);f.texParameteri(f.TEXTURE_2D,f.TEXTURE_WRAP_S,Y(m.wrapS));f.texParameteri(f.TEXTURE_2D,f.TEXTURE_WRAP_T,
Y(m.wrapT));f.texParameteri(f.TEXTURE_2D,f.TEXTURE_MAG_FILTER,Y(m.magFilter));f.texParameteri(f.TEXTURE_2D,f.TEXTURE_MIN_FILTER,Y(m.minFilter));f.texImage2D(f.TEXTURE_2D,0,Y(m.format),m.width,m.height,0,Y(m.format),Y(m.type),null);f.bindFramebuffer(f.FRAMEBUFFER,m.__webGLFramebuffer);f.framebufferTexture2D(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,f.TEXTURE_2D,m.__webGLTexture,0);f.framebufferRenderbuffer(f.FRAMEBUFFER,f.DEPTH_ATTACHMENT,f.RENDERBUFFER,m.__webGLRenderbuffer);f.bindTexture(f.TEXTURE_2D,null);
f.bindRenderbuffer(f.RENDERBUFFER,null);f.bindFramebuffer(f.FRAMEBUFFER,null)}var z,q;if(m){z=m.__webGLFramebuffer;q=m.width;m=m.height}else{z=null;q=ja;m=ha}if(z!=R){f.bindFramebuffer(f.FRAMEBUFFER,z);f.viewport(ea,xa,q,m);R=z}}function N(m,z){var q;if(m=="fragment")q=f.createShader(f.FRAGMENT_SHADER);else m=="vertex"&&(q=f.createShader(f.VERTEX_SHADER));f.shaderSource(q,z);f.compileShader(q);if(!f.getShaderParameter(q,f.COMPILE_STATUS)){alert(f.getShaderInfoLog(q));return null}return q}function L(m){switch(m){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return f.NEAREST;
case THREE.LinearFilter:case THREE.LinearMipMapNearestFilter:case THREE.LinearMipMapLinearFilter:return f.LINEAR}}function Y(m){switch(m){case THREE.RepeatWrapping:return f.REPEAT;case THREE.ClampToEdgeWrapping:return f.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return f.MIRRORED_REPEAT;case THREE.NearestFilter:return f.NEAREST;case THREE.NearestMipMapNearestFilter:return f.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return f.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return f.LINEAR;
case THREE.LinearMipMapNearestFilter:return f.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return f.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return f.BYTE;case THREE.UnsignedByteType:return f.UNSIGNED_BYTE;case THREE.ShortType:return f.SHORT;case THREE.UnsignedShortType:return f.UNSIGNED_SHORT;case THREE.IntType:return f.INT;case THREE.UnsignedShortType:return f.UNSIGNED_INT;case THREE.FloatType:return f.FLOAT;case THREE.AlphaFormat:return f.ALPHA;case THREE.RGBFormat:return f.RGB;case THREE.RGBAFormat:return f.RGBA;
case THREE.LuminanceFormat:return f.LUMINANCE;case THREE.LuminanceAlphaFormat:return f.LUMINANCE_ALPHA}return 0}var M=document.createElement("canvas"),f,W=null,R=null,da=this,ga=null,I=null,ca=null,za=null,ea=0,xa=0,ja=0,ha=0,va=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Aa=new THREE.Matrix4,ia=new Float32Array(16),$=new Float32Array(16),qa=new THREE.Vector4,ra={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,
colors:[],positions:[]}},Q=!0,ma=new THREE.Color(0),ta=0;if(a){if(a.antialias!==undefined)Q=a.antialias;a.clearColor!==undefined&&ma.setHex(a.clearColor);if(a.clearAlpha!==undefined)ta=a.clearAlpha}this.maxMorphTargets=8;this.domElement=M;this.autoClear=!0;this.sortObjects=!0;(function(m,z,q){try{if(!(f=M.getContext("experimental-webgl",{antialias:m})))throw"Error creating WebGL context.";}catch(n){console.error(n)}f.clearColor(0,0,0,1);f.clearDepth(1);f.enable(f.DEPTH_TEST);f.depthFunc(f.LEQUAL);
f.frontFace(f.CCW);f.cullFace(f.BACK);f.enable(f.CULL_FACE);f.enable(f.BLEND);f.blendFunc(f.ONE,f.ONE_MINUS_SRC_ALPHA);f.clearColor(z.r,z.g,z.b,q);_cullEnabled=!0})(Q,ma,ta);this.context=f;this.setSize=function(m,z){M.width=m;M.height=z;this.setViewport(0,0,M.width,M.height)};this.setViewport=function(m,z,q,n){ea=m;xa=z;ja=q;ha=n;f.viewport(ea,xa,ja,ha)};this.setScissor=function(m,z,q,n){f.scissor(m,z,q,n)};this.enableScissorTest=function(m){m?f.enable(f.SCISSOR_TEST):f.disable(f.SCISSOR_TEST)};this.enableDepthBufferWrite=
function(m){f.depthMask(m)};this.setClearColorHex=function(m,z){var q=new THREE.Color(m);f.clearColor(q.r,q.g,q.b,z)};this.setClearColor=function(m,z){f.clearColor(m.r,m.g,m.b,z)};this.clear=function(){f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT)};this.initMaterial=function(m,z,q,n){var p,B,A;if(m instanceof THREE.MeshDepthMaterial)b(m,THREE.ShaderLib.depth);else if(m instanceof THREE.MeshNormalMaterial)b(m,THREE.ShaderLib.normal);else if(m instanceof THREE.MeshBasicMaterial)b(m,THREE.ShaderLib.basic);
else if(m instanceof THREE.MeshLambertMaterial)b(m,THREE.ShaderLib.lambert);else if(m instanceof THREE.MeshPhongMaterial)b(m,THREE.ShaderLib.phong);else if(m instanceof THREE.LineBasicMaterial)b(m,THREE.ShaderLib.basic);else m instanceof THREE.ParticleBasicMaterial&&b(m,THREE.ShaderLib.particle_basic);var D,O,X,E;A=X=E=0;for(D=z.length;A<D;A++){O=z[A];O instanceof THREE.DirectionalLight&&X++;O instanceof THREE.PointLight&&E++}if(E+X<=4)z=X;else{z=Math.ceil(4*X/(E+X));E=4-z}A={directional:z,point:E};
D=50;if(n!==undefined&&n instanceof THREE.SkinnedMesh)D=n.bones.length;E=m.fragmentShader;z=m.vertexShader;D={fog:q,map:m.map,envMap:m.envMap,lightMap:m.lightMap,vertexColors:m.vertexColors,skinning:m.skinning,morphTargets:m.morphTargets,maxDirLights:A.directional,maxPointLights:A.point,maxBones:D};q=f.createProgram();A=["#ifdef GL_ES\nprecision highp float;\n#endif","#define MAX_DIR_LIGHTS "+D.maxDirLights,"#define MAX_POINT_LIGHTS "+D.maxPointLights,D.fog?"#define USE_FOG":"",D.fog instanceof THREE.FogExp2?
"#define FOG_EXP2":"",D.map?"#define USE_MAP":"",D.envMap?"#define USE_ENVMAP":"",D.lightMap?"#define USE_LIGHTMAP":"",D.vertexColors?"#define USE_COLOR":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");D=[f.getParameter(f.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+D.maxDirLights,"#define MAX_POINT_LIGHTS "+D.maxPointLights,"#define MAX_BONES "+D.maxBones,D.map?"#define USE_MAP":"",D.envMap?"#define USE_ENVMAP":"",D.lightMap?"#define USE_LIGHTMAP":
M
Mikael Emtinger 已提交
266
"",D.vertexColors?"#define USE_COLOR":"",D.skinning?"#define USE_SKINNING":"",D.morphTargets?"#define USE_MORPHTARGETS":"",D.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\nattribute vec3 position;\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n"].join("\n");
M
Mikael Emtinger 已提交
267 268 269 270 271 272 273 274 275 276 277
f.attachShader(q,N("fragment",A+E));f.attachShader(q,N("vertex",D+z));f.linkProgram(q);f.getProgramParameter(q,f.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+f.getProgramParameter(q,f.VALIDATE_STATUS)+", gl error ["+f.getError()+"]");q.uniforms={};q.attributes={};m.program=q;q=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(p in m.uniforms)q.push(p);p=
m.program;E=0;for(z=q.length;E<z;E++){A=q[E];p.uniforms[A]=f.getUniformLocation(p,A)}q=["position","normal","uv","uv2","tangent","color","skinVertexA","skinVertexB","skinIndex","skinWeight"];for(p=0;p<this.maxMorphTargets;p++)q.push("morphTarget"+p);for(B in m.attributes)q.push(B);B=m.program;p=q;q=0;for(E=p.length;q<E;q++){z=p[q];B.attributes[z]=f.getAttribLocation(B,z)}B=m.program.attributes;f.enableVertexAttribArray(B.position);B.color>=0&&f.enableVertexAttribArray(B.color);B.normal>=0&&f.enableVertexAttribArray(B.normal);
B.tangent>=0&&f.enableVertexAttribArray(B.tangent);if(m.skinning&&B.skinVertexA>=0&&B.skinVertexB>=0&&B.skinIndex>=0&&B.skinWeight>=0){f.enableVertexAttribArray(B.skinVertexA);f.enableVertexAttribArray(B.skinVertexB);f.enableVertexAttribArray(B.skinIndex);f.enableVertexAttribArray(B.skinWeight)}if(m.morphTargets){m.numSupportedMorphTargets=0;if(B.morphTarget0>=0){f.enableVertexAttribArray(B.morphTarget0);m.numSupportedMorphTargets++}if(B.morphTarget1>=0){f.enableVertexAttribArray(B.morphTarget1);
m.numSupportedMorphTargets++}if(B.morphTarget2>=0){f.enableVertexAttribArray(B.morphTarget2);m.numSupportedMorphTargets++}if(B.morphTarget3>=0){f.enableVertexAttribArray(B.morphTarget3);m.numSupportedMorphTargets++}if(B.morphTarget4>=0){f.enableVertexAttribArray(B.morphTarget4);m.numSupportedMorphTargets++}if(B.morphTarget5>=0){f.enableVertexAttribArray(B.morphTarget5);m.numSupportedMorphTargets++}if(B.morphTarget6>=0){f.enableVertexAttribArray(B.morphTarget6);m.numSupportedMorphTargets++}if(B.morphTarget7>=
0){f.enableVertexAttribArray(B.morphTarget7);m.numSupportedMorphTargets++}n.__webGLMorphTargetInfluences=new Float32Array(this.maxMorphTargets);for(p=0;p<this.maxMorphTargets;p++)n.__webGLMorphTargetInfluences[p]=0}};this.render=function(m,z,q,n){var p,B,A,D,O,X,E,aa,ka=m.lights,na=m.fog;z.matrixAutoUpdate&&z.update();z.matrixWorldInverse.flattenToArray($);z.projectionMatrix.flattenToArray(ia);Aa.multiply(z.projectionMatrix,z.matrixWorldInverse);k(Aa);m.update(undefined,!1,z);this.initWebGLObjects(m);
x(q);(this.autoClear||n)&&this.clear();O=m.__webglObjects.length;for(n=0;n<O;n++){p=m.__webglObjects[n];E=p.object;if(E.visible)if(!(E instanceof THREE.Mesh)||l(E)){E.matrixWorld.flattenToArray(E._objectMatrixArray);y(E,z);u(p);p.render=!0;if(this.sortObjects){qa.copy(E.position);Aa.multiplyVector3(qa);p.z=qa.z}}else p.render=!1;else p.render=!1}this.sortObjects&&m.__webglObjects.sort(t);X=m.__webglObjectsImmediate.length;for(n=0;n<X;n++){p=m.__webglObjectsImmediate[n];E=p.object;if(E.visible){E.matrixAutoUpdate&&
E.matrixWorld.flattenToArray(E._objectMatrixArray);y(E,z);v(p)}}w(THREE.NormalBlending);for(n=0;n<O;n++){p=m.__webglObjects[n];if(p.render){E=p.object;aa=p.buffer;A=p.opaque;h(E);for(p=0;p<A.count;p++){D=A.list[p];j(D.depthTest);e(z,ka,na,D,aa,E)}}}for(n=0;n<X;n++){p=m.__webglObjectsImmediate[n];E=p.object;if(E.visible){A=p.opaque;h(E);for(p=0;p<A.count;p++){D=A.list[p];j(D.depthTest);B=d(z,ka,na,D,E);E.render(function(wa){g(wa,B)})}}}for(n=0;n<O;n++){p=m.__webglObjects[n];if(p.render){E=p.object;
aa=p.buffer;A=p.transparent;h(E);for(p=0;p<A.count;p++){D=A.list[p];w(D.blending);j(D.depthTest);e(z,ka,na,D,aa,E)}}}for(n=0;n<X;n++){p=m.__webglObjectsImmediate[n];E=p.object;if(E.visible){A=p.transparent;h(E);for(p=0;p<A.count;p++){D=A.list[p];w(D.blending);j(D.depthTest);B=d(z,ka,na,D,E);E.render(function(wa){g(wa,B)})}}}if(q&&q.minFilter!==THREE.NearestFilter&&q.minFilter!==THREE.LinearFilter){f.bindTexture(f.TEXTURE_2D,q.__webGLTexture);f.generateMipmap(f.TEXTURE_2D);f.bindTexture(f.TEXTURE_2D,
null)}};this.initWebGLObjects=function(m){if(!m.__webglObjects){m.__webglObjects=[];m.__webglObjectsImmediate=[]}for(;m.__objectsAdded.length;){var z=m.__objectsAdded[0],q=m,n=void 0,p=void 0,B=void 0;if(z._modelViewMatrix==undefined){z._modelViewMatrix=new THREE.Matrix4;z._normalMatrixArray=new Float32Array(9);z._modelViewMatrixArray=new Float32Array(16);z._objectMatrixArray=new Float32Array(16);z.matrixWorld.flattenToArray(z._objectMatrixArray)}if(z instanceof THREE.Mesh){p=z.geometry;p.geometryGroups==
undefined&&C(p);for(n in p.geometryGroups){B=p.geometryGroups[n];if(!B.__webGLVertexBuffer){var A=B;A.__webGLVertexBuffer=f.createBuffer();A.__webGLNormalBuffer=f.createBuffer();A.__webGLTangentBuffer=f.createBuffer();A.__webGLColorBuffer=f.createBuffer();A.__webGLUVBuffer=f.createBuffer();A.__webGLUV2Buffer=f.createBuffer();A.__webGLSkinVertexABuffer=f.createBuffer();A.__webGLSkinVertexBBuffer=f.createBuffer();A.__webGLSkinIndicesBuffer=f.createBuffer();A.__webGLSkinWeightsBuffer=f.createBuffer();
A.__webGLFaceBuffer=f.createBuffer();A.__webGLLineBuffer=f.createBuffer();if(A.numMorphTargets){var D=void 0,O=void 0;A.__webGLMorphTargetsBuffers=[];D=0;for(O=A.numMorphTargets;D<O;D++)A.__webGLMorphTargetsBuffers.push(f.createBuffer())}A=B;var X=z,E=void 0,aa=void 0,ka=O=D=0,na=X.geometry.faces,wa=A.faces;E=0;for(aa=wa.length;E<aa;E++){fi=wa[E];face=na[fi];if(face instanceof THREE.Face3){D+=3;O+=1;ka+=3}else if(face instanceof THREE.Face4){D+=4;O+=2;ka+=4}}A.__vertexArray=new Float32Array(D*3);
278 279
A.__normalArray=new Float32Array(D*3);A.__tangentArray=new Float32Array(D*4);A.__colorArray=new Float32Array(D*3);A.__uvArray=new Float32Array(D*2);A.__uv2Array=new Float32Array(D*2);A.__skinVertexAArray=new Float32Array(D*4);A.__skinVertexBArray=new Float32Array(D*4);A.__skinIndexArray=new Float32Array(D*4);A.__skinWeightArray=new Float32Array(D*4);A.__faceArray=new Uint16Array(O*3);A.__lineArray=new Uint16Array(ka*2);aa=E=A;na=void 0;wa=void 0;var la=void 0,Ca=void 0;la=void 0;var Da=!1;na=0;for(wa=
X.materials.length;na<wa;na++){la=X.materials[na];if(la instanceof THREE.MeshFaceMaterial){la=0;for(Ca=aa.materials.length;la<Ca;la++)if(aa.materials[la]&&aa.materials[la].shading!=undefined&&aa.materials[la].shading==THREE.SmoothShading){Da=!0;break}}else if(la&&la.shading!=undefined&&la.shading==THREE.SmoothShading){Da=!0;break}if(Da)break}E.__needsSmoothNormals=Da;A.__webGLFaceCount=O*3;A.__webGLLineCount=ka*2;if(A.numMorphTargets){O=void 0;ka=void 0;A.__morphTargetsArrays=[];O=0;for(ka=A.numMorphTargets;O<
M
Mikael Emtinger 已提交
280 281 282 283
ka;O++)A.__morphTargetsArrays.push(new Float32Array(D*3))}p.__dirtyVertices=!0;p.__dirtyMorphTargets=!0;p.__dirtyElements=!0;p.__dirtyUvs=!0;p.__dirtyNormals=!0;p.__dirtyTangents=!0;p.__dirtyColors=!0}F(q.__webglObjects,B,z)}}else if(z instanceof THREE.Ribbon){p=z.geometry;if(!p.__webGLVertexBuffer){n=p;n.__webGLVertexBuffer=f.createBuffer();n.__webGLColorBuffer=f.createBuffer();n=p;B=n.vertices.length;n.__vertexArray=new Float32Array(B*3);n.__colorArray=new Float32Array(B*3);n.__webGLVertexCount=
B;p.__dirtyVertices=!0;p.__dirtyColors=!0}F(q.__webglObjects,p,z)}else if(z instanceof THREE.Line){p=z.geometry;if(!p.__webGLVertexBuffer){n=p;n.__webGLVertexBuffer=f.createBuffer();n.__webGLColorBuffer=f.createBuffer();n=p;B=n.vertices.length;n.__vertexArray=new Float32Array(B*3);n.__colorArray=new Float32Array(B*3);n.__webGLLineCount=B;p.__dirtyVertices=!0;p.__dirtyColors=!0}F(q.__webglObjects,p,z)}else if(z instanceof THREE.ParticleSystem){p=z.geometry;if(!p.__webGLVertexBuffer){n=p;n.__webGLVertexBuffer=
f.createBuffer();n.__webGLColorBuffer=f.createBuffer();n=p;B=n.vertices.length;n.__vertexArray=new Float32Array(B*3);n.__colorArray=new Float32Array(B*3);n.__sortArray=[];n.__webGLParticleCount=B;p.__dirtyVertices=!0;p.__dirtyColors=!0}F(q.__webglObjects,p,z)}else THREE.MarchingCubes!==undefined&&z instanceof THREE.MarchingCubes&&q.__webglObjectsImmediate.push({object:z,opaque:{list:[],count:0},transparent:{list:[],count:0}});m.__objectsAdded.splice(0,1)}for(;m.__objectsRemoved.length;){z=m.__objectsRemoved[0];
q=m;p=void 0;n=void 0;for(p=q.__webglObjects.length-1;p>=0;p--){n=q.__webglObjects[p].object;z==n&&q.__webglObjects.splice(p,1)}m.__objectsRemoved.splice(0,1)}z=0;for(q=m.__webglObjects.length;z<q;z++){n=m.__webglObjects[z].object;B=void 0;p=void 0;A=void 0;if(n instanceof THREE.Mesh){p=n.geometry;for(B in p.geometryGroups){A=p.geometryGroups[B];if(p.__dirtyVertices||p.__dirtyMorphTargets||p.__dirtyElements||p.__dirtyUvs||p.__dirtyNormals||p.__dirtyColors||p.__dirtyTangents){D=f.DYNAMIC_DRAW;O=void 0;
284
ka=void 0;var Pa=void 0,K=void 0,Na=void 0,Ia=void 0,Oa=void 0;Pa=void 0;var S=void 0,U=void 0,V=void 0,ya=void 0;S=void 0;U=void 0;V=void 0;K=void 0;S=void 0;U=void 0;V=void 0;ya=void 0;S=void 0;U=void 0;V=void 0;ya=void 0;S=void 0;U=void 0;V=void 0;ya=void 0;S=void 0;U=void 0;V=void 0;ya=void 0;S=void 0;U=void 0;V=void 0;ya=void 0;K=void 0;Ia=void 0;Na=void 0;Oa=void 0;var Ma=void 0,Fa=void 0,Ba=void 0,Ga=Ca=la=Da=wa=na=X=aa=E=0,H=0,Ja=0,Ha=A.__vertexArray,P=A.__uvArray,oa=A.__uv2Array,Z=A.__normalArray,
M
Mikael Emtinger 已提交
285
J=A.__tangentArray,T=A.__colorArray,fa=A.__skinVertexAArray,pa=A.__skinVertexBArray,sa=A.__skinIndexArray,ua=A.__skinWeightArray,Ra=A.__morphTargetsArrays,La=A.__faceArray,Ka=A.__lineArray,Wa=A.__needsSmoothNormals,Ea=n.geometry,Sa=Ea.__dirtyVertices,ab=Ea.__dirtyElements,$a=Ea.__dirtyUvs,bb=Ea.__dirtyNormals,cb=Ea.__dirtyTangents,db=Ea.__dirtyColors,eb=Ea.__dirtyMorphTargets,Qa=Ea.vertices,fb=A.faces,gb=Ea.faces,hb=Ea.uvs,ib=Ea.uvs2,Ta=Ea.colors,Xa=Ea.skinVerticesA,Ya=Ea.skinVerticesB,Za=Ea.skinIndices,
286 287 288 289 290 291 292 293 294
Va=Ea.skinWeights,Ua=Ea.morphTargets;O=0;for(ka=fb.length;O<ka;O++){Pa=fb[O];K=gb[Pa];Oa=hb[Pa];Pa=ib[Pa];Na=K.vertexNormals;Ia=K.normal;if(K instanceof THREE.Face3){if(Sa){S=Qa[K.a].position;U=Qa[K.b].position;V=Qa[K.c].position;Ha[aa]=S.x;Ha[aa+1]=S.y;Ha[aa+2]=S.z;Ha[aa+3]=U.x;Ha[aa+4]=U.y;Ha[aa+5]=U.z;Ha[aa+6]=V.x;Ha[aa+7]=V.y;Ha[aa+8]=V.z;aa+=9}if(eb){Ma=0;for(Fa=Ua.length;Ma<Fa;Ma++){S=Ua[Ma].vertices[K.a].position;U=Ua[Ma].vertices[K.b].position;V=Ua[Ma].vertices[K.c].position;Ba=Ra[Ma];Ba[Ja+
0]=S.x;Ba[Ja+1]=S.y;Ba[Ja+2]=S.z;Ba[Ja+3]=U.x;Ba[Ja+4]=U.y;Ba[Ja+5]=U.z;Ba[Ja+6]=V.x;Ba[Ja+7]=V.y;Ba[Ja+8]=V.z}Ja+=9}if(Va.length){S=Va[K.a];U=Va[K.b];V=Va[K.c];ua[H]=S.x;ua[H+1]=S.y;ua[H+2]=S.z;ua[H+3]=S.w;ua[H+4]=U.x;ua[H+5]=U.y;ua[H+6]=U.z;ua[H+7]=U.w;ua[H+8]=V.x;ua[H+9]=V.y;ua[H+10]=V.z;ua[H+11]=V.w;S=Za[K.a];U=Za[K.b];V=Za[K.c];sa[H]=S.x;sa[H+1]=S.y;sa[H+2]=S.z;sa[H+3]=S.w;sa[H+4]=U.x;sa[H+5]=U.y;sa[H+6]=U.z;sa[H+7]=U.w;sa[H+8]=V.x;sa[H+9]=V.y;sa[H+10]=V.z;sa[H+11]=V.w;S=Xa[K.a];U=Xa[K.b];V=
Xa[K.c];fa[H]=S.x;fa[H+1]=S.y;fa[H+2]=S.z;fa[H+3]=1;fa[H+4]=U.x;fa[H+5]=U.y;fa[H+6]=U.z;fa[H+7]=1;fa[H+8]=V.x;fa[H+9]=V.y;fa[H+10]=V.z;fa[H+11]=1;S=Ya[K.a];U=Ya[K.b];V=Ya[K.c];pa[H]=S.x;pa[H+1]=S.y;pa[H+2]=S.z;pa[H+3]=1;pa[H+4]=U.x;pa[H+5]=U.y;pa[H+6]=U.z;pa[H+7]=1;pa[H+8]=V.x;pa[H+9]=V.y;pa[H+10]=V.z;pa[H+11]=1;H+=12}if(db&&Ta.length){S=Ta[K.a];U=Ta[K.b];V=Ta[K.c];T[Ga]=S.r;T[Ga+1]=S.g;T[Ga+2]=S.b;T[Ga+3]=U.r;T[Ga+4]=U.g;T[Ga+5]=U.b;T[Ga+6]=V.r;T[Ga+7]=V.g;T[Ga+8]=V.b;Ga+=9}if(cb&&Ea.hasTangents){S=
Qa[K.a].tangent;U=Qa[K.b].tangent;V=Qa[K.c].tangent;J[la]=S.x;J[la+1]=S.y;J[la+2]=S.z;J[la+3]=S.w;J[la+4]=U.x;J[la+5]=U.y;J[la+6]=U.z;J[la+7]=U.w;J[la+8]=V.x;J[la+9]=V.y;J[la+10]=V.z;J[la+11]=V.w;la+=12}if(bb)if(Na.length==3&&Wa)for(K=0;K<3;K++){Ia=Na[K];Z[Da]=Ia.x;Z[Da+1]=Ia.y;Z[Da+2]=Ia.z;Da+=3}else for(K=0;K<3;K++){Z[Da]=Ia.x;Z[Da+1]=Ia.y;Z[Da+2]=Ia.z;Da+=3}if($a&&Oa)for(K=0;K<3;K++){Na=Oa[K];P[X]=Na.u;P[X+1]=Na.v;X+=2}if($a&&Pa)for(K=0;K<3;K++){Oa=Pa[K];oa[na]=Oa.u;oa[na+1]=Oa.v;na+=2}if(ab){La[wa]=
E;La[wa+1]=E+1;La[wa+2]=E+2;wa+=3;Ka[Ca]=E;Ka[Ca+1]=E+1;Ka[Ca+2]=E;Ka[Ca+3]=E+2;Ka[Ca+4]=E+1;Ka[Ca+5]=E+2;Ca+=6;E+=3}}else if(K instanceof THREE.Face4){if(Sa){S=Qa[K.a].position;U=Qa[K.b].position;V=Qa[K.c].position;ya=Qa[K.d].position;Ha[aa]=S.x;Ha[aa+1]=S.y;Ha[aa+2]=S.z;Ha[aa+3]=U.x;Ha[aa+4]=U.y;Ha[aa+5]=U.z;Ha[aa+6]=V.x;Ha[aa+7]=V.y;Ha[aa+8]=V.z;Ha[aa+9]=ya.x;Ha[aa+10]=ya.y;Ha[aa+11]=ya.z;aa+=12}if(eb){Ma=0;for(Fa=Ua.length;Ma<Fa;Ma++){S=Ua[Ma].vertices[K.a].position;U=Ua[Ma].vertices[K.b].position;
V=Ua[Ma].vertices[K.c].position;ya=Ua[Ma].vertices[K.d].position;Ba=Ra[Ma];Ba[Ja+0]=S.x;Ba[Ja+1]=S.y;Ba[Ja+2]=S.z;Ba[Ja+3]=U.x;Ba[Ja+4]=U.y;Ba[Ja+5]=U.z;Ba[Ja+6]=V.x;Ba[Ja+7]=V.y;Ba[Ja+8]=V.z;Ba[Ja+9]=ya.x;Ba[Ja+10]=ya.y;Ba[Ja+11]=ya.z}Ja+=12}if(Va.length){S=Va[K.a];U=Va[K.b];V=Va[K.c];ya=Va[K.d];ua[H]=S.x;ua[H+1]=S.y;ua[H+2]=S.z;ua[H+3]=S.w;ua[H+4]=U.x;ua[H+5]=U.y;ua[H+6]=U.z;ua[H+7]=U.w;ua[H+8]=V.x;ua[H+9]=V.y;ua[H+10]=V.z;ua[H+11]=V.w;ua[H+12]=ya.x;ua[H+13]=ya.y;ua[H+14]=ya.z;ua[H+15]=ya.w;S=Za[K.a];
U=Za[K.b];V=Za[K.c];ya=Za[K.d];sa[H]=S.x;sa[H+1]=S.y;sa[H+2]=S.z;sa[H+3]=S.w;sa[H+4]=U.x;sa[H+5]=U.y;sa[H+6]=U.z;sa[H+7]=U.w;sa[H+8]=V.x;sa[H+9]=V.y;sa[H+10]=V.z;sa[H+11]=V.w;sa[H+12]=ya.x;sa[H+13]=ya.y;sa[H+14]=ya.z;sa[H+15]=ya.w;S=Xa[K.a];U=Xa[K.b];V=Xa[K.c];ya=Xa[K.d];fa[H]=S.x;fa[H+1]=S.y;fa[H+2]=S.z;fa[H+3]=1;fa[H+4]=U.x;fa[H+5]=U.y;fa[H+6]=U.z;fa[H+7]=1;fa[H+8]=V.x;fa[H+9]=V.y;fa[H+10]=V.z;fa[H+11]=1;fa[H+12]=ya.x;fa[H+13]=ya.y;fa[H+14]=ya.z;fa[H+15]=1;S=Ya[K.a];U=Ya[K.b];V=Ya[K.c];ya=Ya[K.d];
pa[H]=S.x;pa[H+1]=S.y;pa[H+2]=S.z;pa[H+3]=1;pa[H+4]=U.x;pa[H+5]=U.y;pa[H+6]=U.z;pa[H+7]=1;pa[H+8]=V.x;pa[H+9]=V.y;pa[H+10]=V.z;pa[H+11]=1;pa[H+12]=ya.x;pa[H+13]=ya.y;pa[H+14]=ya.z;pa[H+15]=1;H+=16}if(db&&Ta.length){S=Ta[K.a];U=Ta[K.b];V=Ta[K.c];ya=Ta[K.d];T[Ga]=S.r;T[Ga+1]=S.g;T[Ga+2]=S.b;T[Ga+3]=U.r;T[Ga+4]=U.g;T[Ga+5]=U.b;T[Ga+6]=V.r;T[Ga+7]=V.g;T[Ga+8]=V.b;T[Ga+9]=ya.r;T[Ga+10]=ya.g;T[Ga+11]=ya.b;Ga+=12}if(cb&&Ea.hasTangents){S=Qa[K.a].tangent;U=Qa[K.b].tangent;V=Qa[K.c].tangent;K=Qa[K.d].tangent;
J[la]=S.x;J[la+1]=S.y;J[la+2]=S.z;J[la+3]=S.w;J[la+4]=U.x;J[la+5]=U.y;J[la+6]=U.z;J[la+7]=U.w;J[la+8]=V.x;J[la+9]=V.y;J[la+10]=V.z;J[la+11]=V.w;J[la+12]=K.x;J[la+13]=K.y;J[la+14]=K.z;J[la+15]=K.w;la+=16}if(bb)if(Na.length==4&&Wa)for(K=0;K<4;K++){Ia=Na[K];Z[Da]=Ia.x;Z[Da+1]=Ia.y;Z[Da+2]=Ia.z;Da+=3}else for(K=0;K<4;K++){Z[Da]=Ia.x;Z[Da+1]=Ia.y;Z[Da+2]=Ia.z;Da+=3}if($a&&Oa)for(K=0;K<4;K++){Na=Oa[K];P[X]=Na.u;P[X+1]=Na.v;X+=2}if($a&&Pa)for(K=0;K<4;K++){Oa=Pa[K];oa[na]=Oa.u;oa[na+1]=Oa.v;na+=2}if(ab){La[wa]=
M
Mikael Emtinger 已提交
295 296 297 298 299 300 301
E;La[wa+1]=E+1;La[wa+2]=E+2;La[wa+3]=E;La[wa+4]=E+2;La[wa+5]=E+3;wa+=6;Ka[Ca]=E;Ka[Ca+1]=E+1;Ka[Ca+2]=E;Ka[Ca+3]=E+3;Ka[Ca+4]=E+1;Ka[Ca+5]=E+2;Ka[Ca+6]=E+2;Ka[Ca+7]=E+3;Ca+=8;E+=4}}}if(Sa){f.bindBuffer(f.ARRAY_BUFFER,A.__webGLVertexBuffer);f.bufferData(f.ARRAY_BUFFER,Ha,D)}if(eb){Ma=0;for(Fa=Ua.length;Ma<Fa;Ma++){f.bindBuffer(f.ARRAY_BUFFER,A.__webGLMorphTargetsBuffers[Ma]);f.bufferData(f.ARRAY_BUFFER,Ra[Ma],D)}}if(db&&Ta.length){f.bindBuffer(f.ARRAY_BUFFER,A.__webGLColorBuffer);f.bufferData(f.ARRAY_BUFFER,
T,D)}if(bb){f.bindBuffer(f.ARRAY_BUFFER,A.__webGLNormalBuffer);f.bufferData(f.ARRAY_BUFFER,Z,D)}if(cb&&Ea.hasTangents){f.bindBuffer(f.ARRAY_BUFFER,A.__webGLTangentBuffer);f.bufferData(f.ARRAY_BUFFER,J,D)}if($a&&X>0){f.bindBuffer(f.ARRAY_BUFFER,A.__webGLUVBuffer);f.bufferData(f.ARRAY_BUFFER,P,D)}if($a&&na>0){f.bindBuffer(f.ARRAY_BUFFER,A.__webGLUV2Buffer);f.bufferData(f.ARRAY_BUFFER,oa,D)}if(ab){f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,A.__webGLFaceBuffer);f.bufferData(f.ELEMENT_ARRAY_BUFFER,La,D);f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,
A.__webGLLineBuffer);f.bufferData(f.ELEMENT_ARRAY_BUFFER,Ka,D)}if(H>0){f.bindBuffer(f.ARRAY_BUFFER,A.__webGLSkinVertexABuffer);f.bufferData(f.ARRAY_BUFFER,fa,D);f.bindBuffer(f.ARRAY_BUFFER,A.__webGLSkinVertexBBuffer);f.bufferData(f.ARRAY_BUFFER,pa,D);f.bindBuffer(f.ARRAY_BUFFER,A.__webGLSkinIndicesBuffer);f.bufferData(f.ARRAY_BUFFER,sa,D);f.bindBuffer(f.ARRAY_BUFFER,A.__webGLSkinWeightsBuffer);f.bufferData(f.ARRAY_BUFFER,ua,D)}}}p.__dirtyVertices=!1;p.__dirtyMorphTargets=!1;p.__dirtyElements=!1;p.__dirtyUvs=
!1;p.__dirtyNormals=!1;p.__dirtyTangents=!1;p.__dirtyColors=!1}else if(n instanceof THREE.Ribbon){p=n.geometry;if(p.__dirtyVertices||p.__dirtyColors){n=p;B=f.DYNAMIC_DRAW;E=void 0;E=void 0;aa=void 0;A=void 0;X=n.vertices;D=n.colors;na=X.length;O=D.length;wa=n.__vertexArray;ka=n.__colorArray;Da=n.__dirtyColors;if(n.__dirtyVertices){for(E=0;E<na;E++){aa=X[E].position;A=E*3;wa[A]=aa.x;wa[A+1]=aa.y;wa[A+2]=aa.z}f.bindBuffer(f.ARRAY_BUFFER,n.__webGLVertexBuffer);f.bufferData(f.ARRAY_BUFFER,wa,B)}if(Da){for(E=
0;E<O;E++){color=D[E];A=E*3;ka[A]=color.r;ka[A+1]=color.g;ka[A+2]=color.b}f.bindBuffer(f.ARRAY_BUFFER,n.__webGLColorBuffer);f.bufferData(f.ARRAY_BUFFER,ka,B)}}p.__dirtyVertices=!1;p.__dirtyColors=!1}else if(n instanceof THREE.Line){p=n.geometry;if(p.__dirtyVertices||p.__dirtyColors){n=p;B=f.DYNAMIC_DRAW;E=void 0;E=void 0;aa=void 0;A=void 0;X=n.vertices;D=n.colors;na=X.length;O=D.length;wa=n.__vertexArray;ka=n.__colorArray;Da=n.__dirtyColors;if(n.__dirtyVertices){for(E=0;E<na;E++){aa=X[E].position;
A=E*3;wa[A]=aa.x;wa[A+1]=aa.y;wa[A+2]=aa.z}f.bindBuffer(f.ARRAY_BUFFER,n.__webGLVertexBuffer);f.bufferData(f.ARRAY_BUFFER,wa,B)}if(Da){for(E=0;E<O;E++){color=D[E];A=E*3;ka[A]=color.r;ka[A+1]=color.g;ka[A+2]=color.b}f.bindBuffer(f.ARRAY_BUFFER,n.__webGLColorBuffer);f.bufferData(f.ARRAY_BUFFER,ka,B)}}p.__dirtyVertices=!1;p.__dirtyColors=!1}else if(n instanceof THREE.ParticleSystem){p=n.geometry;(p.__dirtyVertices||p.__dirtyColors||n.sortParticles)&&c(p,f.DYNAMIC_DRAW,n);p.__dirtyVertices=!1;p.__dirtyColors=
!1}}};this.setFaceCulling=function(m,z){if(m){!z||z=="ccw"?f.frontFace(f.CCW):f.frontFace(f.CW);if(m=="back")f.cullFace(f.BACK);else m=="front"?f.cullFace(f.FRONT):f.cullFace(f.FRONT_AND_BACK);f.enable(f.CULL_FACE)}else f.disable(f.CULL_FACE)};this.supportsVertexTextures=function(){return f.getParameter(f.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0}};
M
Mikael Emtinger 已提交
302 303 304 305 306
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 envMap;\nuniform int combine;\n#endif",envmap_fragment:"#ifdef USE_ENVMAP\nvec4 cubeColor = textureCube( envMap, 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 refractionRatio;\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 ), refractionRatio );\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 lightMap;\n#endif",lightmap_pars_vertex:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\n#endif",
lightmap_fragment:"#ifdef USE_LIGHTMAP\ngl_FragColor = gl_FragColor * texture2D( lightMap, vUv2 );\n#endif",lightmap_vertex:"#ifdef USE_LIGHTMAP\nvUv2 = uv2;\n#endif",lights_pars_vertex:"uniform bool enableLighting;\nuniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n#ifdef PHONG\nvarying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];\n#endif\n#endif",
307 308
lights_vertex:"if ( !enableLighting ) {\nvLightWeighting = vec3( 1.0 );\n} else {\nvLightWeighting = ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nfloat directionalLightWeighting = max( dot( transformedNormal, normalize( lDirection.xyz ) ), 0.0 );\nvLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 pointLightVector = normalize( lPosition.xyz - mvPosition.xyz );\nfloat pointLightWeighting = max( dot( transformedNormal, pointLightVector ), 0.0 );\nvLightWeighting += pointLightColor[ i ] * pointLightWeighting;\n#ifdef PHONG\nvPointLightVector[ i ] = pointLightVector;\n#endif\n}\n#endif\n}",
lights_pars_fragment:"#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nvarying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",lights_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\nvec4 mColor = vec4( diffuse, opacity );\nvec4 mSpecular = vec4( specular, opacity );\n#if MAX_POINT_LIGHTS > 0\nvec4 pointDiffuse  = vec4( 0.0 );\nvec4 pointSpecular = vec4( 0.0 );\nfor( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {\nvec3 pointVector = normalize( vPointLightVector[ i ] );\nvec3 pointHalfVector = normalize( vPointLightVector[ i ] + vViewPosition );\nfloat pointDotNormalHalf = dot( normal, pointHalfVector );\nfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\nfloat pointSpecularWeight = 0.0;\nif ( pointDotNormalHalf >= 0.0 )\npointSpecularWeight = pow( pointDotNormalHalf, shininess );\npointDiffuse  += mColor * pointDiffuseWeight;\npointSpecular += mSpecular * pointSpecularWeight;\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec4 dirDiffuse  = vec4( 0.0 );\nvec4 dirSpecular = vec4( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nvec3 dirHalfVector = normalize( lDirection.xyz + vViewPosition );\nfloat dirDotNormalHalf = dot( normal, dirHalfVector );\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\nfloat dirSpecularWeight = 0.0;\nif ( dirDotNormalHalf >= 0.0 )\ndirSpecularWeight = pow( dirDotNormalHalf, shininess );\ndirDiffuse  += mColor * dirDiffuseWeight;\ndirSpecular += mSpecular * dirSpecularWeight;\n}\n#endif\nvec4 totalLight = vec4( ambient, opacity );\n#if MAX_DIR_LIGHTS > 0\ntotalLight += dirDiffuse + dirSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalLight += pointDiffuse + pointSpecular;\n#endif\ngl_FragColor = gl_FragColor * totalLight;",
309
color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, opacity );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\nvColor = color;\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\nuniform mat4 boneGlobalMatrices[ MAX_BONES ];\n#endif",skinning_vertex:"#ifdef USE_SKINNING\ngl_Position  = ( boneGlobalMatrices[ int( skinIndex.x ) ] * skinVertexA ) * skinWeight.x;\ngl_Position += ( boneGlobalMatrices[ int( skinIndex.y ) ] * skinVertexB ) * skinWeight.y;\ngl_Position  = projectionMatrix * viewMatrix * objectMatrix * gl_Position;\n#else\ngl_Position = projectionMatrix * mvPosition;\n#endif",
310
morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\nuniform float morphTargetInfluences[8];\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\nvec3 morphed = vec3( 0, 0, 0 );\nmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\nmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\nmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\nmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\nmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\nmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\nmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\nmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\nmorphed += position;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( morphed, 1.0 );\n#else\ngl_Position = projectionMatrix * mvPosition;\n#endif"};
311
THREE.UniformsLib={common:{diffuse:{type:"c",value:new THREE.Color(15658734)},opacity:{type:"f",value:1},map:{type:"t",value:0,texture:null},lightMap:{type:"t",value:2,texture:null},envMap:{type:"t",value:1,texture:null},useRefract:{type:"i",value:0},reflectivity:{type:"f",value:1},refractionRatio:{type:"f",value:0.98},combine:{type:"i",value:0},fogDensity:{type:"f",value:2.5E-4},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},fogColor:{type:"c",value:new THREE.Color(16777215)},morphTargetInfluences:{type:"f",
312 313
value:0}},lights:{enableLighting:{type:"i",value:1},ambientLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]},directionalLightColor:{type:"fv",value:[]},pointLightPosition:{type:"fv",value:[]},pointLightColor:{type:"fv",value:[]}},particle:{psColor:{type:"c",value:new THREE.Color(15658734)},opacity:{type:"f",value:1},size:{type:"f",value:1},map:{type:"t",value:0,texture:null},fogDensity:{type:"f",value:2.5E-4},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},fogColor:{type:"c",
value:new THREE.Color(16777215)}}};
314 315 316
THREE.ShaderLib={depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f",value:1}},fragmentShader:"uniform float mNear;\nuniform float mFar;\nuniform float opacity;\nvoid main() {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat color = 1.0 - smoothstep( mNear, mFar, depth );\ngl_FragColor = vec4( vec3( color ), opacity );\n}",vertexShader:"void main() {\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"},normal:{uniforms:{opacity:{type:"f",
value:1}},fragmentShader:"uniform float opacity;\nvarying vec3 vNormal;\nvoid main() {\ngl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );\n}",vertexShader:"varying vec3 vNormal;\nvoid main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvNormal = normalize( normalMatrix * normal );\ngl_Position = projectionMatrix * mvPosition;\n}"},basic:{uniforms:THREE.UniformsLib.common,fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;",THREE.Snippets.color_pars_fragment,
THREE.Snippets.map_pars_fragment,THREE.Snippets.lightmap_pars_fragment,THREE.Snippets.envmap_pars_fragment,THREE.Snippets.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( diffuse, opacity );",THREE.Snippets.map_fragment,THREE.Snippets.lightmap_fragment,THREE.Snippets.color_fragment,THREE.Snippets.envmap_fragment,THREE.Snippets.fog_fragment,"}"].join("\n"),vertexShader:[THREE.Snippets.map_pars_vertex,THREE.Snippets.lightmap_pars_vertex,THREE.Snippets.envmap_pars_vertex,THREE.Snippets.color_pars_vertex,
317
THREE.Snippets.skinning_pars_vertex,THREE.Snippets.morphtarget_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",THREE.Snippets.map_vertex,THREE.Snippets.lightmap_vertex,THREE.Snippets.envmap_vertex,THREE.Snippets.color_vertex,THREE.Snippets.skinning_vertex,THREE.Snippets.morphtarget_vertex,"}"].join("\n")},lambert:{uniforms:Uniforms.merge([THREE.UniformsLib.common,THREE.UniformsLib.lights]),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nvarying vec3 vLightWeighting;",
318
THREE.Snippets.color_pars_fragment,THREE.Snippets.map_pars_fragment,THREE.Snippets.lightmap_pars_fragment,THREE.Snippets.envmap_pars_fragment,THREE.Snippets.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( diffuse, opacity );\ngl_FragColor = gl_FragColor * vec4( vLightWeighting, 1.0 );",THREE.Snippets.map_fragment,THREE.Snippets.lightmap_fragment,THREE.Snippets.color_fragment,THREE.Snippets.envmap_fragment,THREE.Snippets.fog_fragment,"}"].join("\n"),vertexShader:["varying vec3 vLightWeighting;",
319 320
THREE.Snippets.map_pars_vertex,THREE.Snippets.lightmap_pars_vertex,THREE.Snippets.envmap_pars_vertex,THREE.Snippets.lights_pars_vertex,THREE.Snippets.color_pars_vertex,THREE.Snippets.skinning_pars_vertex,THREE.Snippets.morphtarget_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",THREE.Snippets.map_vertex,THREE.Snippets.lightmap_vertex,THREE.Snippets.envmap_vertex,THREE.Snippets.color_vertex,"vec3 transformedNormal = normalize( normalMatrix * normal );",THREE.Snippets.lights_vertex,
THREE.Snippets.skinning_vertex,THREE.Snippets.morphtarget_vertex,"}"].join("\n")},phong:{uniforms:Uniforms.merge([THREE.UniformsLib.common,THREE.UniformsLib.lights,{ambient:{type:"c",value:new THREE.Color(328965)},specular:{type:"c",value:new THREE.Color(1118481)},shininess:{type:"f",value:30}}]),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nuniform vec3 ambient;\nuniform vec3 specular;\nuniform float shininess;\nvarying vec3 vLightWeighting;",THREE.Snippets.color_pars_fragment,
321
THREE.Snippets.map_pars_fragment,THREE.Snippets.lightmap_pars_fragment,THREE.Snippets.envmap_pars_fragment,THREE.Snippets.fog_pars_fragment,THREE.Snippets.lights_pars_fragment,"void main() {\ngl_FragColor = vec4( vLightWeighting, 1.0 );",THREE.Snippets.lights_fragment,THREE.Snippets.map_fragment,THREE.Snippets.lightmap_fragment,THREE.Snippets.color_fragment,THREE.Snippets.envmap_fragment,THREE.Snippets.fog_fragment,"}"].join("\n"),vertexShader:["#define PHONG\nvarying vec3 vLightWeighting;\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",
322 323
THREE.Snippets.map_pars_vertex,THREE.Snippets.lightmap_pars_vertex,THREE.Snippets.envmap_pars_vertex,THREE.Snippets.lights_pars_vertex,THREE.Snippets.color_pars_vertex,THREE.Snippets.skinning_pars_vertex,THREE.Snippets.morphtarget_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",THREE.Snippets.map_vertex,THREE.Snippets.lightmap_vertex,THREE.Snippets.envmap_vertex,THREE.Snippets.color_vertex,"#ifndef USE_ENVMAP\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\n#endif\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 transformedNormal = normalize( normalMatrix * normal );\nvNormal = transformedNormal;",
THREE.Snippets.lights_vertex,THREE.Snippets.skinning_vertex,THREE.Snippets.morphtarget_vertex,"}"].join("\n")},particle_basic:{uniforms:THREE.UniformsLib.particle,fragmentShader:["uniform vec3 psColor;\nuniform float opacity;",THREE.Snippets.color_pars_fragment,THREE.Snippets.map_particle_pars_fragment,THREE.Snippets.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( psColor, opacity );",THREE.Snippets.map_particle_fragment,THREE.Snippets.color_fragment,THREE.Snippets.fog_fragment,"}"].join("\n"),
324
vertexShader:["uniform float size;",THREE.Snippets.color_pars_vertex,"void main() {",THREE.Snippets.color_vertex,"vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\ngl_PointSize = size;\n}"].join("\n")}};
A
alteredq 已提交
325
THREE.SoundRenderer=function(){this.volume=1;this.domElement=document.createElement("div");this.domElement.id="THREESound";this.cameraPosition=new THREE.Vector3;this.soundPosition=new THREE.Vector3;this.render=function(a,c,b){b&&a.update(undefined,!1,c);b=a.sounds;var d,e=b.length;for(d=0;d<e;d++){a=b[d];this.soundPosition.set(a.matrixWorld.n14,a.matrixWorld.n24,a.matrixWorld.n34);this.soundPosition.subSelf(c.position);if(a.isPlaying&&a.isLoaded){a.isAddedToDOM||a.addToDOM(this.domElement);a.calculateVolumeAndPan(this.soundPosition)}}}};
326 327
THREE.RenderableObject=function(){this.z=this.object=null};THREE.RenderableFace3=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[];this.faceMaterials=this.meshMaterials=null;this.overdraw=!1;this.uvs=[null,null,null]};
THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.materials=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.materials=null};
A
alteredq 已提交
328 329
var GeometryUtils={merge:function(a,c){var b=c instanceof THREE.Mesh,d=a.vertices.length,e=b?c.geometry:c,g=a.vertices,h=e.vertices,j=a.faces,k=e.faces,l=a.uvs;e=e.uvs;b&&c.matrixAutoUpdate&&c.updateMatrix();for(var o=0,v=h.length;o<v;o++){var u=new THREE.Vertex(h[o].position.clone());b&&c.matrix.multiplyVector3(u.position);g.push(u)}o=0;for(v=k.length;o<v;o++){h=k[o];var t,y=h.vertexNormals;if(h instanceof THREE.Face3)t=new THREE.Face3(h.a+d,h.b+d,h.c+d);else h instanceof THREE.Face4&&(t=new THREE.Face4(h.a+
d,h.b+d,h.c+d,h.d+d));t.centroid.copy(h.centroid);t.normal.copy(h.normal);b=0;for(g=y.length;b<g;b++){u=y[b];t.vertexNormals.push(u.clone())}t.materials=h.materials.slice();j.push(t)}o=0;for(v=e.length;o<v;o++){d=e[o];j=[];b=0;for(g=d.length;b<g;b++)j.push(new THREE.UV(d[b].u,d[b].v));l.push(j)}}},ImageUtils={loadTexture:function(a,c,b){var d=new Image,e=new THREE.Texture(d,c);d.onload=function(){e.needsUpdate=!0;b&&b(this)};d.src=a;return e},loadTextureCube:function(a,c,b){var d,e=[],g=new THREE.Texture(e,
M
Mikael Emtinger 已提交
330 331 332 333 334
c);c=e.loadCount=0;for(d=a.length;c<d;++c){e[c]=new Image;e[c].onload=function(){e.loadCount+=1;if(e.loadCount==6)g.needsUpdate=!0;b&&b(this)};e[c].src=a[c]}return g}},SceneUtils={loadScene:function(a,c,b,d){a=new Worker(a);a.postMessage(0);a.onmessage=function(e){function g(){for(o in M.objects)if(!I.objects[o]){C=M.objects[o];if(x=I.geometries[C.geometry]){Y=[];for(i=0;i<C.materials.length;i++)Y[i]=I.materials[C.materials[i]];F=C.position;r=C.rotation;s=C.scale;object=new THREE.Mesh(x,Y);object.position.set(F[0],
F[1],F[2]);object.rotation.set(r[0],r[1],r[2]);object.scale.set(s[0],s[1],s[2]);object.visible=C.visible;I.scene.addObject(object);I.objects[o]=object}}}function h(ca){return function(za){I.geometries[ca]=za;g();W-=1;j()}}function j(){d({total_models:da,total_textures:ga,loaded_models:da-W,loaded_textures:ga-R},I);W==0&&R==0&&b(I)}var k,l,o,v,u,t,y,C,F,w,G,x,N,L,Y,M,f,W,R,da,ga,I;M=e.data;f=new THREE.Loader;R=W=0;I={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},
lights:{},fogs:{}};e=function(){R-=1;j()};for(u in M.cameras){w=M.cameras[u];if(w.type=="perspective")N=new THREE.Camera(w.fov,w.aspect,w.near,w.far);else if(w.type=="ortho"){N=new THREE.Camera;N.projectionMatrix=THREE.Matrix4.makeOrtho(w.left,w.right,w.top,w.bottom,w.near,w.far)}F=w.position;w=w.target;N.position.set(F[0],F[1],F[2]);N.target.position.set(w[0],w[1],w[2]);I.cameras[u]=N}for(v in M.lights){u=M.lights[v];if(u.type=="directional"){F=u.direction;light=new THREE.DirectionalLight;light.position.set(F[0],
F[1],F[2]);light.position.normalize()}else if(u.type=="point"){F=u.position;light=new THREE.PointLight;light.position.set(F[0],F[1],F[2])}w=u.color;i=u.intensity||1;light.color.setRGB(w[0]*i,w[1]*i,w[2]*i);I.scene.addLight(light);I.lights[v]=light}for(t in M.fogs){v=M.fogs[t];if(v.type=="linear")L=new THREE.Fog(0,v.near,v.far);else v.type=="exp2"&&(L=new THREE.FogExp2(0,v.density));w=v.color;L.color.setRGB(w[0],w[1],w[2]);I.fogs[t]=L}if(I.cameras&&M.defaults.camera)I.currentCamera=I.cameras[M.defaults.camera];
if(I.fogs&&M.defaults.fog)I.scene.fog=I.fogs[M.defaults.fog];w=M.defaults.bgcolor;I.bgColor=new THREE.Color;I.bgColor.setRGB(w[0],w[1],w[2]);I.bgColorAlpha=M.defaults.bgalpha;for(k in M.geometries){t=M.geometries[k];if(t.type=="bin_mesh"||t.type=="ascii_mesh")W+=1}da=W;for(k in M.geometries){t=M.geometries[k];if(t.type=="cube"){x=new Cube(t.width,t.height,t.depth,t.segmentsWidth,t.segmentsHeight,t.segmentsDepth,null,t.flipped,t.sides);I.geometries[k]=x}else if(t.type=="plane"){x=new Plane(t.width,
A
alteredq 已提交
335
t.height,t.segmentsWidth,t.segmentsHeight);I.geometries[k]=x}else if(t.type=="sphere"){x=new Sphere(t.radius,t.segmentsWidth,t.segmentsHeight);I.geometries[k]=x}else if(t.type=="cylinder"){x=new Cylinder(t.numSegs,t.topRad,t.botRad,t.height,t.topOffset,t.botOffset);I.geometries[k]=x}else if(t.type=="torus"){x=new Torus(t.radius,t.tube,t.segmentsR,t.segmentsT);I.geometries[k]=x}else if(t.type=="icosahedron"){x=new Icosahedron(t.subdivisions);I.geometries[k]=x}else if(t.type=="bin_mesh")f.loadBinary({model:t.url,
M
Mikael Emtinger 已提交
336 337
callback:h(k)});else t.type=="ascii_mesh"&&f.loadAscii({model:t.url,callback:h(k)})}for(y in M.textures){k=M.textures[y];R+=k.url instanceof Array?k.url.length:1}ga=R;for(y in M.textures){k=M.textures[y];if(k.mapping!=undefined&&THREE[k.mapping]!=undefined)k.mapping=new THREE[k.mapping];if(k.url instanceof Array)t=ImageUtils.loadTextureCube(k.url,k.mapping,e);else{t=ImageUtils.loadTexture(k.url,k.mapping,e);if(THREE[k.minFilter]!=undefined)t.minFilter=THREE[k.minFilter];if(THREE[k.magFilter]!=undefined)t.magFilter=
THREE[k.magFilter]}I.textures[y]=t}for(l in M.materials){y=M.materials[l];for(G in y.parameters)if(G=="envMap"||G=="map"||G=="lightMap")y.parameters[G]=I.textures[y.parameters[G]];else if(G=="shading")y.parameters[G]=y.parameters[G]=="flat"?THREE.FlatShading:THREE.SmoothShading;else if(G=="blending")y.parameters[G]=THREE[y.parameters[G]]?THREE[y.parameters[G]]:THREE.NormalBlending;else G=="combine"&&(y.parameters[G]=y.parameters[G]=="MixOperation"?THREE.MixOperation:THREE.MultiplyOperation);y=new THREE[y.type](y.parameters);
A
alteredq 已提交
338
I.materials[l]=y}g();c(I)}},addMesh:function(a,c,b,d,e,g,h,j,k,l){c=new THREE.Mesh(c,l);c.scale.x=c.scale.y=c.scale.z=b;c.position.x=d;c.position.y=e;c.position.z=g;c.rotation.x=h;c.rotation.y=j;c.rotation.z=k;a.addObject(c);return c},addPanoramaCubeWebGL:function(a,c,b){var d=ShaderUtils.lib.cube;d.uniforms.tCube.texture=b;b=new THREE.MeshShaderMaterial({fragmentShader:d.fragmentShader,vertexShader:d.vertexShader,uniforms:d.uniforms});c=new THREE.Mesh(new Cube(c,c,c,1,1,1,null,!0),b);a.addObject(c);
M
Mikael Emtinger 已提交
339
return c},addPanoramaCube:function(a,c,b){var d=[];d.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(b[0])}));d.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(b[1])}));d.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(b[2])}));d.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(b[3])}));d.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(b[4])}));d.push(new THREE.MeshBasicMaterial({map:new THREE.Texture(b[5])}));c=new THREE.Mesh(new Cube(c,c,c,1,1,d,!0),new THREE.MeshFaceMaterial);
A
alteredq 已提交
340 341
a.addObject(c);return c},addPanoramaCubePlanes:function(a,c,b){var d=c/2;c=new Plane(c,c);var e=Math.PI,g=Math.PI/2;SceneUtils.addMesh(a,c,1,0,0,-d,0,0,0,new THREE.MeshBasicMaterial({map:new THREE.Texture(b[5])}));SceneUtils.addMesh(a,c,1,-d,0,0,0,g,0,new THREE.MeshBasicMaterial({map:new THREE.Texture(b[0])}));SceneUtils.addMesh(a,c,1,d,0,0,0,-g,0,new THREE.MeshBasicMaterial({map:new THREE.Texture(b[1])}));SceneUtils.addMesh(a,c,1,0,d,0,g,0,e,new THREE.MeshBasicMaterial({map:new THREE.Texture(b[2])}));
SceneUtils.addMesh(a,c,1,0,-d,0,-g,0,e,new THREE.MeshBasicMaterial({map:new THREE.Texture(b[3])}))}},ShaderUtils={lib:{fresnel:{uniforms:{mRefractionRatio:{type:"f",value:1.02},mFresnelBias:{type:"f",value:0.1},mFresnelPower:{type:"f",value:2},mFresnelScale:{type:"f",value:1},tCube:{type:"t",value:1,texture:null}},fragmentShader:"uniform samplerCube tCube;\nvarying vec3 vReflect;\nvarying vec3 vRefract[3];\nvarying float vReflectionFactor;\nvoid main() {\nvec4 reflectedColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\nvec4 refractedColor = vec4( 1.0, 1.0, 1.0, 1.0 );\nrefractedColor.r = textureCube( tCube, vec3( -vRefract[0].x, vRefract[0].yz ) ).r;\nrefractedColor.g = textureCube( tCube, vec3( -vRefract[1].x, vRefract[1].yz ) ).g;\nrefractedColor.b = textureCube( tCube, vec3( -vRefract[2].x, vRefract[2].yz ) ).b;\nrefractedColor.a = 1.0;\ngl_FragColor = mix( refractedColor, reflectedColor, clamp( vReflectionFactor, 0.0, 1.0 ) );\n}",
342
vertexShader:"uniform float mRefractionRatio;\nuniform float mFresnelBias;\nuniform float mFresnelScale;\nuniform float mFresnelPower;\nvarying vec3 vReflect;\nvarying vec3 vRefract[3];\nvarying float vReflectionFactor;\nvoid main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvec3 nWorld = normalize ( mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal );\nvec3 I = mPosition.xyz - cameraPosition;\nvReflect = reflect( I, nWorld );\nvRefract[0] = refract( normalize( I ), nWorld, mRefractionRatio );\nvRefract[1] = refract( normalize( I ), nWorld, mRefractionRatio * 0.99 );\nvRefract[2] = refract( normalize( I ), nWorld, mRefractionRatio * 0.98 );\nvReflectionFactor = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( I ), nWorld ), mFresnelPower );\ngl_Position = projectionMatrix * mvPosition;\n}"},
343
normal:{uniforms:{enableAO:{type:"i",value:0},enableDiffuse:{type:"i",value:0},tDiffuse:{type:"t",value:0,texture:null},tNormal:{type:"t",value:2,texture:null},tAO:{type:"t",value:3,texture:null},uNormalScale:{type:"f",value:1},tDisplacement:{type:"t",value:4,texture:null},uDisplacementBias:{type:"f",value:-0.5},uDisplacementScale:{type:"f",value:2.5},uPointLightPos:{type:"v3",value:new THREE.Vector3},uPointLightColor:{type:"c",value:new THREE.Color(15658734)},uDirLightPos:{type:"v3",value:new THREE.Vector3},
344 345 346 347 348 349
uDirLightColor:{type:"c",value:new THREE.Color(15658734)},uAmbientLightColor:{type:"c",value:new THREE.Color(328965)},uDiffuseColor:{type:"c",value:new THREE.Color(15658734)},uSpecularColor:{type:"c",value:new THREE.Color(1118481)},uAmbientColor:{type:"c",value:new THREE.Color(328965)},uShininess:{type:"f",value:30}},fragmentShader:"uniform vec3 uDirLightPos;\nuniform vec3 uAmbientLightColor;\nuniform vec3 uDirLightColor;\nuniform vec3 uPointLightColor;\nuniform vec3 uAmbientColor;\nuniform vec3 uDiffuseColor;\nuniform vec3 uSpecularColor;\nuniform float uShininess;\nuniform bool enableDiffuse;\nuniform bool enableAO;\nuniform sampler2D tDiffuse;\nuniform sampler2D tNormal;\nuniform sampler2D tAO;\nuniform float uNormalScale;\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vPointLightVector;\nvarying vec3 vViewPosition;\nvoid main() {\nvec3 diffuseTex = vec3( 1.0, 1.0, 1.0 );\nvec3 aoTex = vec3( 1.0, 1.0, 1.0 );\nvec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;\nnormalTex.xy *= uNormalScale;\nnormalTex = normalize( normalTex );\nif( enableDiffuse )\ndiffuseTex = texture2D( tDiffuse, vUv ).xyz;\nif( enableAO )\naoTex = texture2D( tAO, vUv ).xyz;\nmat3 tsb = mat3( vTangent, vBinormal, vNormal );\nvec3 finalNormal = tsb * normalTex;\nvec3 normal = normalize( finalNormal );\nvec3 viewPosition = normalize( vViewPosition );\nvec4 pointDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );\nvec4 pointSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );\nvec3 pointVector = normalize( vPointLightVector );\nvec3 pointHalfVector = normalize( vPointLightVector + vViewPosition );\nfloat pointDotNormalHalf = dot( normal, pointHalfVector );\nfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\nfloat pointSpecularWeight = 0.0;\nif ( pointDotNormalHalf >= 0.0 )\npointSpecularWeight = pow( pointDotNormalHalf, uShininess );\npointDiffuse  += vec4( uDiffuseColor, 1.0 ) * pointDiffuseWeight;\npointSpecular += vec4( uSpecularColor, 1.0 ) * pointSpecularWeight;\nvec4 dirDiffuse  = vec4( 0.0, 0.0, 0.0, 0.0 );\nvec4 dirSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );\nvec4 lDirection = viewMatrix * vec4( uDirLightPos, 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nvec3 dirHalfVector = normalize( lDirection.xyz + vViewPosition );\nfloat dirDotNormalHalf = dot( normal, dirHalfVector );\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\nfloat dirSpecularWeight = 0.0;\nif ( dirDotNormalHalf >= 0.0 )\ndirSpecularWeight = pow( dirDotNormalHalf, uShininess );\ndirDiffuse  += vec4( uDiffuseColor, 1.0 ) * dirDiffuseWeight;\ndirSpecular += vec4( uSpecularColor, 1.0 ) * dirSpecularWeight;\nvec4 totalLight = vec4( uAmbientLightColor * uAmbientColor, 1.0 );\ntotalLight += vec4( uDirLightColor, 1.0 ) * ( dirDiffuse + dirSpecular );\ntotalLight += vec4( uPointLightColor, 1.0 ) * ( pointDiffuse + pointSpecular );\ngl_FragColor = vec4( totalLight.xyz * aoTex * diffuseTex, 1.0 );\n}",
vertexShader:"attribute vec4 tangent;\nuniform vec3 uPointLightPos;\n#ifdef VERTEX_TEXTURES\nuniform sampler2D tDisplacement;\nuniform float uDisplacementScale;\nuniform float uDisplacementBias;\n#endif\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vPointLightVector;\nvarying vec3 vViewPosition;\nvoid main() {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvNormal = normalize( normalMatrix * normal );\nvTangent = normalize( normalMatrix * tangent.xyz );\nvBinormal = cross( vNormal, vTangent ) * tangent.w;\nvBinormal = normalize( vBinormal );\nvUv = uv;\nvec4 lPosition = viewMatrix * vec4( uPointLightPos, 1.0 );\nvPointLightVector = normalize( lPosition.xyz - mvPosition.xyz );\n#ifdef VERTEX_TEXTURES\nvec3 dv = texture2D( tDisplacement, uv ).xyz;\nfloat df = uDisplacementScale * dv.x + uDisplacementBias;\nvec4 displacedPosition = vec4( vNormal.xyz * df, 0.0 ) + mvPosition;\ngl_Position = projectionMatrix * displacedPosition;\n#else\ngl_Position = projectionMatrix * mvPosition;\n#endif\n}"},
cube:{uniforms:{tCube:{type:"t",value:1,texture:null}},vertexShader:"varying vec3 vViewPosition;\nvoid main() {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform samplerCube tCube;\nvarying vec3 vViewPosition;\nvoid main() {\nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( - wPos.x, wPos.yz ) );\n}"},convolution:{uniforms:{tDiffuse:{type:"t",
value:0,texture:null},uImageIncrement:{type:"v2",value:new THREE.Vector2(0.001953125,0)},cKernel:{type:"fv1",value:[]}},vertexShader:"varying vec2 vUv;\nuniform vec2 uImageIncrement;\nvoid main(void) {\nvUv = uv - ((KERNEL_SIZE - 1.0) / 2.0) * uImageIncrement;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"varying vec2 vUv;\nuniform sampler2D tDiffuse;\nuniform vec2 uImageIncrement;\nuniform float cKernel[KERNEL_SIZE];\nvoid main(void) {\nvec2 imageCoord = vUv;\nvec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 );\nfor( int i=0; i<KERNEL_SIZE; ++i ) {\nsum += texture2D( tDiffuse, imageCoord ) * cKernel[i];\nimageCoord += uImageIncrement;\n}\ngl_FragColor = sum;\n}"},
film:{uniforms:{tDiffuse:{type:"t",value:0,texture:null},time:{type:"f",value:0},nIntensity:{type:"f",value:0.5},sIntensity:{type:"f",value:0.05},sCount:{type:"f",value:4096},grayscale:{type:"i",value:1}},vertexShader:"varying vec2 vUv;\nvoid main() {\nvUv = vec2( uv.x, 1.0 - uv.y );\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"varying vec2 vUv;\nuniform sampler2D tDiffuse;\nuniform float time;\nuniform bool grayscale;\nuniform float nIntensity;\nuniform float sIntensity;\nuniform float sCount;\nvoid main() {\nvec4 cTextureScreen = texture2D( tDiffuse, vUv );\nfloat x = vUv.x * vUv.y * time *  1000.0;\nx = mod( x, 13.0 ) * mod( x, 123.0 );\nfloat dx = mod( x, 0.01 );\nvec3 cResult = cTextureScreen.rgb + cTextureScreen.rgb * clamp( 0.1 + dx * 100.0, 0.0, 1.0 );\nvec2 sc = vec2( sin( vUv.y * sCount ), cos( vUv.y * sCount ) );\ncResult += cTextureScreen.rgb * vec3( sc.x, sc.y, sc.x ) * sIntensity;\ncResult = cTextureScreen.rgb + clamp( nIntensity, 0.0,1.0 ) * ( cResult - cTextureScreen.rgb );\nif( grayscale ) {\ncResult = vec3( cResult.r * 0.3 + cResult.g * 0.59 + cResult.b * 0.11 );\n}\ngl_FragColor =  vec4( cResult, cTextureScreen.a );\n}"},
screen:{uniforms:{tDiffuse:{type:"t",value:0,texture:null},opacity:{type:"f",value:1}},vertexShader:"varying vec2 vUv;\nvoid main() {\nvUv = vec2( uv.x, 1.0 - uv.y );\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"varying vec2 vUv;\nuniform sampler2D tDiffuse;\nuniform float opacity;\nvoid main() {\nvec4 texel = texture2D( tDiffuse, vUv );\ngl_FragColor = opacity * texel;\n}"},basic:{uniforms:{},vertexShader:"void main() {\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",
M
Mikael Emtinger 已提交
350 351 352 353 354
fragmentShader:"void main() {\ngl_FragColor = vec4( 1.0, 0.0, 0.0, 0.5 );\n}"}},buildKernel:function(a){var c,b,d,e,g=2*Math.ceil(a*3)+1;g>25&&(g=25);e=(g-1)*0.5;b=Array(g);for(c=d=0;c<g;++c){b[c]=Math.exp(-((c-e)*(c-e))/(2*a*a));d+=b[c]}for(c=0;c<g;++c)b[c]/=d;return b}},Cube=function(a,c,b,d,e,g,h,j,k){function l(F,w,G,x,N,L,Y,M){var f,W,R=d||1,da=e||1,ga=N/2,I=L/2,ca=o.vertices.length;if(F=="x"&&w=="y"||F=="y"&&w=="x")f="z";else if(F=="x"&&w=="z"||F=="z"&&w=="x"){f="y";da=g||1}else if(F=="z"&&
w=="y"||F=="y"&&w=="z"){f="x";R=g||1}var za=R+1,ea=da+1;N/=R;var xa=L/da;for(W=0;W<ea;W++)for(L=0;L<za;L++){var ja=new THREE.Vector3;ja[F]=(L*N-ga)*G;ja[w]=(W*xa-I)*x;ja[f]=Y;o.vertices.push(new THREE.Vertex(ja))}for(W=0;W<da;W++)for(L=0;L<R;L++){o.faces.push(new THREE.Face4(L+za*W+ca,L+za*(W+1)+ca,L+1+za*(W+1)+ca,L+1+za*W+ca,null,M));o.uvs.push([new THREE.UV(L/R,W/da),new THREE.UV(L/R,(W+1)/da),new THREE.UV((L+1)/R,(W+1)/da),new THREE.UV((L+1)/R,W/da)])}}THREE.Geometry.call(this);var o=this,v=a/
2,u=c/2,t=b/2;j=j?-1:1;if(h!==undefined)if(h instanceof Array)this.materials=h;else{this.materials=[];for(var y=0;y<6;y++)this.materials.push([h])}else this.materials=[];this.sides={px:!0,nx:!0,py:!0,ny:!0,pz:!0,nz:!0};if(k!=undefined)for(var C in k)this.sides[C]!=undefined&&(this.sides[C]=k[C]);this.sides.px&&l("z","y",1*j,-1,b,c,-v,this.materials[0]);this.sides.nx&&l("z","y",-1*j,-1,b,c,v,this.materials[1]);this.sides.py&&l("x","z",1*j,1,a,b,u,this.materials[2]);this.sides.ny&&l("x","z",1*j,-1,
a,b,-u,this.materials[3]);this.sides.pz&&l("x","y",1*j,-1,a,c,t,this.materials[4]);this.sides.nz&&l("x","y",-1*j,-1,a,c,-t,this.materials[5]);(function(){for(var F=[],w=[],G=0,x=o.vertices.length;G<x;G++){for(var N=o.vertices[G],L=!1,Y=0,M=F.length;Y<M;Y++){var f=F[Y];if(N.position.x==f.position.x&&N.position.y==f.position.y&&N.position.z==f.position.z){w[G]=Y;L=!0;break}}if(!L){w[G]=F.length;F.push(new THREE.Vertex(N.position.clone()))}}G=0;for(x=o.faces.length;G<x;G++){N=o.faces[G];N.a=w[N.a];N.b=
w[N.b];N.c=w[N.c];N.d=w[N.d]}o.vertices=F})();this.computeCentroids();this.computeFaceNormals()};Cube.prototype=new THREE.Geometry;Cube.prototype.constructor=Cube;
A
alteredq 已提交
355
var Cylinder=function(a,c,b,d,e){function g(l,o,v){h.vertices.push(new THREE.Vertex(new THREE.Vector3(l,o,v)))}THREE.Geometry.call(this);var h=this,j=Math.PI,k;for(k=0;k<a;k++)g(Math.sin(2*j*k/a)*c,Math.cos(2*j*k/a)*c,0);for(k=0;k<a;k++)g(Math.sin(2*j*k/a)*b,Math.cos(2*j*k/a)*b,d);for(k=0;k<a;k++)h.faces.push(new THREE.Face4(k,k+a,a+(k+1)%a,(k+1)%a));if(b!=0){g(0,0,-e);for(k=a;k<a+a/2;k++)h.faces.push(new THREE.Face4(2*a,(2*k-2*a)%a,(2*k-2*a+1)%a,(2*k-2*a+2)%a))}if(c!=0){g(0,0,d+e);for(k=a+a/2;k<
356
2*a;k++)h.faces.push(new THREE.Face4((2*k-2*a+2)%a+a,(2*k-2*a+1)%a+a,(2*k-2*a)%a+a,2*a+1))}this.computeCentroids();this.computeFaceNormals()};Cylinder.prototype=new THREE.Geometry;Cylinder.prototype.constructor=Cylinder;
A
alteredq 已提交
357
var Plane=function(a,c,b,d){THREE.Geometry.call(this);var e,g=a/2,h=c/2;b=b||1;d=d||1;var j=b+1,k=d+1;a/=b;var l=c/d;for(e=0;e<k;e++)for(c=0;c<j;c++)this.vertices.push(new THREE.Vertex(new THREE.Vector3(c*a-g,-(e*l-h),0)));for(e=0;e<d;e++)for(c=0;c<b;c++){this.faces.push(new THREE.Face4(c+j*e,c+j*(e+1),c+1+j*(e+1),c+1+j*e));this.uvs.push([new THREE.UV(c/b,e/d),new THREE.UV(c/b,(e+1)/d),new THREE.UV((c+1)/b,(e+1)/d),new THREE.UV((c+1)/b,e/d)])}this.computeCentroids();this.computeFaceNormals()};
358
Plane.prototype=new THREE.Geometry;Plane.prototype.constructor=Plane;
M
Mikael Emtinger 已提交
359 360 361
var Sphere=function(a,c,b){THREE.Geometry.call(this);var d,e=Math.PI,g=Math.max(3,c||8),h=Math.max(2,b||6);c=[];for(b=0;b<h+1;b++){d=b/h;var j=a*Math.cos(d*e),k=a*Math.sin(d*e),l=[],o=0;for(d=0;d<g;d++){var v=2*d/g,u=k*Math.sin(v*e);v=k*Math.cos(v*e);(b==0||b==h)&&d>0||(o=this.vertices.push(new THREE.Vertex(new THREE.Vector3(v,j,u)))-1);l.push(o)}c.push(l)}var t,y,C;e=c.length;for(b=0;b<e;b++){g=c[b].length;if(b>0)for(d=0;d<g;d++){l=d==g-1;h=c[b][l?0:d+1];j=c[b][l?g-1:d];k=c[b-1][l?g-1:d];l=c[b-1][l?
0:d+1];u=b/(e-1);t=(b-1)/(e-1);y=(d+1)/g;v=d/g;o=new THREE.UV(1-y,u);u=new THREE.UV(1-v,u);v=new THREE.UV(1-v,t);var F=new THREE.UV(1-y,t);if(b<c.length-1){t=this.vertices[h].position.clone();y=this.vertices[j].position.clone();C=this.vertices[k].position.clone();t.normalize();y.normalize();C.normalize();this.faces.push(new THREE.Face3(h,j,k,[new THREE.Vector3(t.x,t.y,t.z),new THREE.Vector3(y.x,y.y,y.z),new THREE.Vector3(C.x,C.y,C.z)]));this.uvs.push([o,u,v])}if(b>1){t=this.vertices[h].position.clone();
y=this.vertices[k].position.clone();C=this.vertices[l].position.clone();t.normalize();y.normalize();C.normalize();this.faces.push(new THREE.Face3(h,k,l,[new THREE.Vector3(t.x,t.y,t.z),new THREE.Vector3(y.x,y.y,y.z),new THREE.Vector3(C.x,C.y,C.z)]));this.uvs.push([o,v,F])}}}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.boundingSphere={radius:a}};Sphere.prototype=new THREE.Geometry;Sphere.prototype.constructor=Sphere;
A
alteredq 已提交
362 363
var Torus=function(a,c,b,d){this.radius=a||100;this.tube=c||40;this.segmentsR=b||8;this.segmentsT=d||6;a=[];THREE.Geometry.call(this);for(c=0;c<=this.segmentsR;++c)for(b=0;b<=this.segmentsT;++b){d=b/this.segmentsT*2*Math.PI;var e=c/this.segmentsR*2*Math.PI;this.vertices.push(new THREE.Vertex(new THREE.Vector3((this.radius+this.tube*Math.cos(e))*Math.cos(d),(this.radius+this.tube*Math.cos(e))*Math.sin(d),this.tube*Math.sin(e))));a.push([b/this.segmentsT,1-c/this.segmentsR])}for(c=1;c<=this.segmentsR;++c)for(b=
1;b<=this.segmentsT;++b){d=(this.segmentsT+1)*c+b;e=(this.segmentsT+1)*c+b-1;var g=(this.segmentsT+1)*(c-1)+b-1,h=(this.segmentsT+1)*(c-1)+b;this.faces.push(new THREE.Face4(d,e,g,h));this.uvs.push([new THREE.UV(a[d][0],a[d][1]),new THREE.UV(a[e][0],a[e][1]),new THREE.UV(a[g][0],a[g][1]),new THREE.UV(a[h][0],a[h][1])])}delete a;this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals()};Torus.prototype=new THREE.Geometry;Torus.prototype.constructor=Torus;
A
alteredq 已提交
364 365 366 367 368
var Icosahedron=function(a){function c(v,u,t){var y=Math.sqrt(v*v+u*u+t*t);return e.vertices.push(new THREE.Vertex(new THREE.Vector3(v/y,u/y,t/y)))-1}function b(v,u,t,y){y.faces.push(new THREE.Face3(v,u,t))}function d(v,u){var t=e.vertices[v].position,y=e.vertices[u].position;return c((t.x+y.x)/2,(t.y+y.y)/2,(t.z+y.z)/2)}var e=this,g=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);b(0,11,5,g);b(0,5,1,g);b(0,1,7,g);b(0,7,10,g);b(0,10,11,g);b(1,5,9,g);b(5,11,4,g);b(11,10,2,g);b(10,7,6,g);b(7,1,8,g);b(3,9,4,g);b(3,4,2,g);b(3,2,6,g);b(3,6,8,g);b(3,8,9,g);b(4,9,5,g);b(2,4,11,g);b(6,2,10,g);b(8,6,7,g);b(9,8,1,g);for(a=0;a<this.subdivisions;a++){h=new THREE.Geometry;for(var j in g.faces){var k=d(g.faces[j].a,g.faces[j].b),l=d(g.faces[j].b,g.faces[j].c),o=d(g.faces[j].c,g.faces[j].a);b(g.faces[j].a,k,o,h);b(g.faces[j].b,l,k,h);b(g.faces[j].c,
o,l,h);b(k,l,o,h)}g.faces=h.faces}e.faces=g.faces;delete g;delete h;this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals()};Icosahedron.prototype=new THREE.Geometry;Icosahedron.prototype.constructor=Icosahedron;
function LathedObject(a,c,b){THREE.Geometry.call(this);this.nsteps=c||12;this.latheAngle=b||2*Math.PI;c=this.latheAngle/this.nsteps;for(var d=[],e=[],g=[],h=[],j=0;j<a.length;j++){this.vertices.push(new THREE.Vertex(a[j]));e[j]=this.vertices.length-1;d[j]=new THREE.Vector3(a[j].x,a[j].y,a[j].z)}for(var k=THREE.Matrix4.rotationZMatrix(this.stepSize),l=0;l<=this.latheAngle+0.0010;l+=this.stepSize){for(j=0;j<d.length;j++)if(l<b){d[j]=k.multiplyVector3(d[j].clone());this.vertices.push(new THREE.Vertex(d[j]));
g[j]=this.vertices.length-1}else g=h;l==0&&(h=e);for(j=0;j<e.length-1;j++){this.faces.push(new THREE.Face4(g[j],g[j+1],e[j+1],e[j]));this.uvs.push([new THREE.UV(l/b,j/a.length),new THREE.UV(l/b,(j+1)/a.length),new THREE.UV((l-c)/b,(j+1)/a.length),new THREE.UV((l-c)/b,j/a.length)])}e=g;g=[]}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals()}LathedObject.prototype=new THREE.Geometry;LathedObject.prototype.constructor=LathedObject;
369
if(!window.Int32Array){window.Int32Array=Array;window.Float32Array=Array}
M
Mikael Emtinger 已提交
370
THREE.MarchingCubes=function(a,c){THREE.Object3D.call(this);this.materials=c instanceof Array?c:[c];this.init=function(b){this.isolation=80;this.size=b;this.size2=this.size*this.size;this.size3=this.size2*this.size;this.halfsize=this.size/2;this.delta=2/this.size;this.yd=this.size;this.zd=this.size2;this.field=new Float32Array(this.size3);this.normal_cache=new Float32Array(this.size3*3);this.vlist=new Float32Array(36);this.nlist=new Float32Array(36);this.firstDraw=!0;this.maxCount=4096;this.count=
A
alteredq 已提交
371 372
0;this.hasPos=!1;this.hasNormal=!1;this.positionArray=new Float32Array(this.maxCount*3);this.normalArray=new Float32Array(this.maxCount*3)};this.lerp=function(b,d,e){return b+(d-b)*e};this.VIntX=function(b,d,e,g,h,j,k,l,o,v){h=(h-o)/(v-o);o=this.normal_cache;d[g]=j+h*this.delta;d[g+1]=k;d[g+2]=l;e[g]=this.lerp(o[b],o[b+3],h);e[g+1]=this.lerp(o[b+1],o[b+4],h);e[g+2]=this.lerp(o[b+2],o[b+5],h)};this.VIntY=function(b,d,e,g,h,j,k,l,o,v){h=(h-o)/(v-o);o=this.normal_cache;d[g]=j;d[g+1]=k+h*this.delta;d[g+
2]=l;d=b+this.yd*3;e[g]=this.lerp(o[b],o[d],h);e[g+1]=this.lerp(o[b+1],o[d+1],h);e[g+2]=this.lerp(o[b+2],o[d+2],h)};this.VIntZ=function(b,d,e,g,h,j,k,l,o,v){h=(h-o)/(v-o);o=this.normal_cache;d[g]=j;d[g+1]=k;d[g+2]=l+h*this.delta;d=b+this.zd*3;e[g]=this.lerp(o[b],o[d],h);e[g+1]=this.lerp(o[b+1],o[d+1],h);e[g+2]=this.lerp(o[b+2],o[d+2],h)};this.compNorm=function(b){var d=b*3;if(this.normal_cache[d]==0){this.normal_cache[d]=this.field[b-1]-this.field[b+1];this.normal_cache[d+1]=this.field[b-this.yd]-
M
Mikael Emtinger 已提交
373 374 375 376
this.field[b+this.yd];this.normal_cache[d+2]=this.field[b-this.zd]-this.field[b+this.zd]}};this.polygonize=function(b,d,e,g,h,j){var k=g+1,l=g+this.yd,o=g+this.zd,v=k+this.yd,u=k+this.zd,t=g+this.yd+this.zd,y=k+this.yd+this.zd,C=0,F=this.field[g],w=this.field[k],G=this.field[l],x=this.field[v],N=this.field[o],L=this.field[u],Y=this.field[t],M=this.field[y];F<h&&(C|=1);w<h&&(C|=2);G<h&&(C|=8);x<h&&(C|=4);N<h&&(C|=16);L<h&&(C|=32);Y<h&&(C|=128);M<h&&(C|=64);var f=THREE.edgeTable[C];if(f==0)return 0;
var W=this.delta,R=b+W,da=d+W;W=e+W;if(f&1){this.compNorm(g);this.compNorm(k);this.VIntX(g*3,this.vlist,this.nlist,0,h,b,d,e,F,w)}if(f&2){this.compNorm(k);this.compNorm(v);this.VIntY(k*3,this.vlist,this.nlist,3,h,R,d,e,w,x)}if(f&4){this.compNorm(l);this.compNorm(v);this.VIntX(l*3,this.vlist,this.nlist,6,h,b,da,e,G,x)}if(f&8){this.compNorm(g);this.compNorm(l);this.VIntY(g*3,this.vlist,this.nlist,9,h,b,d,e,F,G)}if(f&16){this.compNorm(o);this.compNorm(u);this.VIntX(o*3,this.vlist,this.nlist,12,h,b,d,
W,N,L)}if(f&32){this.compNorm(u);this.compNorm(y);this.VIntY(u*3,this.vlist,this.nlist,15,h,R,d,W,L,M)}if(f&64){this.compNorm(t);this.compNorm(y);this.VIntX(t*3,this.vlist,this.nlist,18,h,b,da,W,Y,M)}if(f&128){this.compNorm(o);this.compNorm(t);this.VIntY(o*3,this.vlist,this.nlist,21,h,b,d,W,N,Y)}if(f&256){this.compNorm(g);this.compNorm(o);this.VIntZ(g*3,this.vlist,this.nlist,24,h,b,d,e,F,N)}if(f&512){this.compNorm(k);this.compNorm(u);this.VIntZ(k*3,this.vlist,this.nlist,27,h,R,d,e,w,L)}if(f&1024){this.compNorm(v);
this.compNorm(y);this.VIntZ(v*3,this.vlist,this.nlist,30,h,R,da,e,x,M)}if(f&2048){this.compNorm(l);this.compNorm(t);this.VIntZ(l*3,this.vlist,this.nlist,33,h,b,da,e,G,Y)}C<<=4;for(h=g=0;THREE.triTable[C+h]!=-1;){b=C+h;d=b+1;e=b+2;this.posnormtriv(this.vlist,this.nlist,3*THREE.triTable[b],3*THREE.triTable[d],3*THREE.triTable[e],j);h+=3;g++}return g};this.posnormtriv=function(b,d,e,g,h,j){var k=this.count*3;this.positionArray[k]=b[e];this.positionArray[k+1]=b[e+1];this.positionArray[k+2]=b[e+2];this.positionArray[k+
A
alteredq 已提交
377
3]=b[g];this.positionArray[k+4]=b[g+1];this.positionArray[k+5]=b[g+2];this.positionArray[k+6]=b[h];this.positionArray[k+7]=b[h+1];this.positionArray[k+8]=b[h+2];this.normalArray[k]=d[e];this.normalArray[k+1]=d[e+1];this.normalArray[k+2]=d[e+2];this.normalArray[k+3]=d[g];this.normalArray[k+4]=d[g+1];this.normalArray[k+5]=d[g+2];this.normalArray[k+6]=d[h];this.normalArray[k+7]=d[h+1];this.normalArray[k+8]=d[h+2];this.hasPos=!0;this.hasNormal=!0;this.count+=3;this.count>=this.maxCount-3&&j(this)};this.begin=
A
alteredq 已提交
378
function(){this.count=0;this.hasPos=!1;this.hasNormal=!1};this.end=function(b){if(this.count!=0){for(var d=this.count*3;d<this.positionArray.length;d++)this.positionArray[d]=0;b(this)}};this.addBall=function(b,d,e,g,h){var j=this.size*Math.sqrt(g/h),k=e*this.size,l=d*this.size,o=b*this.size,v=Math.floor(k-j);v<1&&(v=1);k=Math.floor(k+j);k>this.size-1&&(k=this.size-1);var u=Math.floor(l-j);u<1&&(u=1);l=Math.floor(l+j);l>this.size-1&&(l=this.size-1);var t=Math.floor(o-j);t<1&&(t=1);j=Math.floor(o+j);
M
Mikael Emtinger 已提交
379
j>this.size-1&&(j=this.size-1);for(var y,C,F,w,G,x;v<k;v++){o=this.size2*v;C=v/this.size-e;G=C*C;for(C=u;C<l;C++){F=o+this.size*C;y=C/this.size-d;x=y*y;for(y=t;y<j;y++){w=y/this.size-b;w=g/(1.0E-6+w*w+x+G)-h;w>0&&(this.field[F+y]+=w)}}}};this.addPlaneX=function(b,d){var e,g,h,j,k,l=this.size,o=this.yd,v=this.zd,u=this.field,t=l*Math.sqrt(b/d);t>l&&(t=l);for(e=0;e<t;e++){g=e/l;g*=g;j=b/(1.0E-4+g)-d;if(j>0)for(g=0;g<l;g++){k=e+g*o;for(h=0;h<l;h++)u[v*h+k]+=j}}};this.addPlaneY=function(b,d){var e,g,
A
alteredq 已提交
380 381 382
h,j,k,l,o=this.size,v=this.yd,u=this.zd,t=this.field,y=o*Math.sqrt(b/d);y>o&&(y=o);for(g=0;g<y;g++){e=g/o;e*=e;j=b/(1.0E-4+e)-d;if(j>0){k=g*v;for(e=0;e<o;e++){l=k+e;for(h=0;h<o;h++)t[u*h+l]+=j}}}};this.addPlaneZ=function(b,d){var e,g,h,j,k,l;size=this.size;yd=this.yd;zd=this.zd;field=this.field;dist=size*Math.sqrt(b/d);dist>size&&(dist=size);for(h=0;h<dist;h++){e=h/size;e*=e;j=b/(1.0E-4+e)-d;if(j>0){k=zd*h;for(g=0;g<size;g++){l=k+g*yd;for(e=0;e<size;e++)field[l+e]+=j}}}};this.reset=function(){var b;
for(b=0;b<this.size3;b++){this.normal_cache[b*3]=0;this.field[b]=0}};this.render=function(b){this.begin();var d,e,g,h,j,k,l,o,v,u=this.size-2;for(h=1;h<u;h++){v=this.size2*h;l=(h-this.halfsize)/this.halfsize;for(g=1;g<u;g++){o=v+this.size*g;k=(g-this.halfsize)/this.halfsize;for(e=1;e<u;e++){j=(e-this.halfsize)/this.halfsize;d=o+e;this.polygonize(j,k,l,d,this.isolation,b)}}}this.end(b)};this.generateGeometry=function(){var b=0,d=new THREE.Geometry;this.render(function(e){var g,h,j,k,l,o,v,u;for(g=
0;g<e.count;g++){l=g*3;v=l+1;u=l+2;h=e.positionArray[l];j=e.positionArray[v];k=e.positionArray[u];o=new THREE.Vector3(h,j,k);h=e.normalArray[l];j=e.normalArray[v];k=e.normalArray[u];l=new THREE.Vector3(h,j,k);l.normalize();l=new THREE.Vertex(o,l);d.vertices.push(l)}nfaces=e.count/3;for(g=0;g<nfaces;g++){l=(b+g)*3;v=l+1;u=l+2;o=d.vertices[l].normal;h=d.vertices[v].normal;j=d.vertices[u].normal;l=new THREE.Face3(l,v,u,[o,h,j]);d.faces.push(l)}b+=nfaces;e.count=0});return d};this.init(a)};
383
THREE.MarchingCubes.prototype=new THREE.Object3D;THREE.MarchingCubes.prototype.constructor=THREE.MarchingCubes;
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407
THREE.edgeTable=new Int32Array([0,265,515,778,1030,1295,1541,1804,2060,2309,2575,2822,3082,3331,3593,3840,400,153,915,666,1430,1183,1941,1692,2460,2197,2975,2710,3482,3219,3993,3728,560,825,51,314,1590,1855,1077,1340,2620,2869,2111,2358,3642,3891,3129,3376,928,681,419,170,1958,1711,1445,1196,2988,2725,2479,2214,4010,3747,3497,3232,1120,1385,1635,1898,102,367,613,876,3180,3429,3695,3942,2154,2403,2665,2912,1520,1273,2035,1786,502,255,1013,764,3580,3317,4095,3830,2554,2291,3065,2800,1616,1881,1107,
1370,598,863,85,348,3676,3925,3167,3414,2650,2899,2137,2384,1984,1737,1475,1226,966,719,453,204,4044,3781,3535,3270,3018,2755,2505,2240,2240,2505,2755,3018,3270,3535,3781,4044,204,453,719,966,1226,1475,1737,1984,2384,2137,2899,2650,3414,3167,3925,3676,348,85,863,598,1370,1107,1881,1616,2800,3065,2291,2554,3830,4095,3317,3580,764,1013,255,502,1786,2035,1273,1520,2912,2665,2403,2154,3942,3695,3429,3180,876,613,367,102,1898,1635,1385,1120,3232,3497,3747,4010,2214,2479,2725,2988,1196,1445,1711,1958,170,
419,681,928,3376,3129,3891,3642,2358,2111,2869,2620,1340,1077,1855,1590,314,51,825,560,3728,3993,3219,3482,2710,2975,2197,2460,1692,1941,1183,1430,666,915,153,400,3840,3593,3331,3082,2822,2575,2309,2060,1804,1541,1295,1030,778,515,265,0]);
THREE.triTable=new Int32Array([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,8,3,9,8,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,1,2,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,2,10,0,2,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,8,3,2,10,8,10,9,8,-1,-1,-1,-1,-1,-1,-1,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,11,2,8,11,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,2,3,11,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,1,11,2,1,9,11,9,8,11,-1,-1,-1,-1,-1,-1,-1,3,10,1,11,10,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,10,1,0,8,10,8,11,10,-1,-1,-1,-1,-1,-1,-1,3,9,0,3,11,9,11,10,9,-1,-1,-1,-1,-1,-1,-1,9,8,10,10,8,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,3,0,7,3,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,8,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,1,9,4,7,1,7,3,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,8,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,4,7,3,0,4,1,2,10,-1,-1,-1,-1,-1,-1,-1,9,2,10,9,0,2,8,4,7,
-1,-1,-1,-1,-1,-1,-1,2,10,9,2,9,7,2,7,3,7,9,4,-1,-1,-1,-1,8,4,7,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,4,7,11,2,4,2,0,4,-1,-1,-1,-1,-1,-1,-1,9,0,1,8,4,7,2,3,11,-1,-1,-1,-1,-1,-1,-1,4,7,11,9,4,11,9,11,2,9,2,1,-1,-1,-1,-1,3,10,1,3,11,10,7,8,4,-1,-1,-1,-1,-1,-1,-1,1,11,10,1,4,11,1,0,4,7,11,4,-1,-1,-1,-1,4,7,8,9,0,11,9,11,10,11,0,3,-1,-1,-1,-1,4,7,11,4,11,9,9,11,10,-1,-1,-1,-1,-1,-1,-1,9,5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,5,4,0,8,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,5,4,1,5,0,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,8,5,4,8,3,5,3,1,5,-1,-1,-1,-1,-1,-1,-1,1,2,10,9,5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,8,1,2,10,4,9,5,-1,-1,-1,-1,-1,-1,-1,5,2,10,5,4,2,4,0,2,-1,-1,-1,-1,-1,-1,-1,2,10,5,3,2,5,3,5,4,3,4,8,-1,-1,-1,-1,9,5,4,2,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,11,2,0,8,11,4,9,5,-1,-1,-1,-1,-1,-1,-1,0,5,4,0,1,5,2,3,11,-1,-1,-1,-1,-1,-1,-1,2,1,5,2,5,8,2,8,11,4,8,5,-1,-1,-1,-1,10,3,11,10,1,3,9,5,4,-1,-1,-1,-1,-1,-1,-1,4,9,5,0,8,1,8,10,1,8,11,10,-1,-1,-1,-1,5,4,0,5,0,11,5,11,10,11,0,3,-1,-1,-1,-1,5,4,8,5,
8,10,10,8,11,-1,-1,-1,-1,-1,-1,-1,9,7,8,5,7,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,3,0,9,5,3,5,7,3,-1,-1,-1,-1,-1,-1,-1,0,7,8,0,1,7,1,5,7,-1,-1,-1,-1,-1,-1,-1,1,5,3,3,5,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,7,8,9,5,7,10,1,2,-1,-1,-1,-1,-1,-1,-1,10,1,2,9,5,0,5,3,0,5,7,3,-1,-1,-1,-1,8,0,2,8,2,5,8,5,7,10,5,2,-1,-1,-1,-1,2,10,5,2,5,3,3,5,7,-1,-1,-1,-1,-1,-1,-1,7,9,5,7,8,9,3,11,2,-1,-1,-1,-1,-1,-1,-1,9,5,7,9,7,2,9,2,0,2,7,11,-1,-1,-1,-1,2,3,11,0,1,8,1,7,8,1,5,7,-1,-1,-1,-1,11,2,1,11,1,7,7,1,5,-1,-1,-1,-1,-1,-1,
-1,9,5,8,8,5,7,10,1,3,10,3,11,-1,-1,-1,-1,5,7,0,5,0,9,7,11,0,1,0,10,11,10,0,-1,11,10,0,11,0,3,10,5,0,8,0,7,5,7,0,-1,11,10,5,7,11,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,5,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,0,1,5,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,8,3,1,9,8,5,10,6,-1,-1,-1,-1,-1,-1,-1,1,6,5,2,6,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,6,5,1,2,6,3,0,8,-1,-1,-1,-1,-1,-1,-1,9,6,5,9,0,6,0,2,6,-1,-1,-1,-1,-1,-1,-1,5,9,8,5,8,2,5,2,6,3,2,8,-1,-1,-1,-1,2,3,11,10,6,
5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,0,8,11,2,0,10,6,5,-1,-1,-1,-1,-1,-1,-1,0,1,9,2,3,11,5,10,6,-1,-1,-1,-1,-1,-1,-1,5,10,6,1,9,2,9,11,2,9,8,11,-1,-1,-1,-1,6,3,11,6,5,3,5,1,3,-1,-1,-1,-1,-1,-1,-1,0,8,11,0,11,5,0,5,1,5,11,6,-1,-1,-1,-1,3,11,6,0,3,6,0,6,5,0,5,9,-1,-1,-1,-1,6,5,9,6,9,11,11,9,8,-1,-1,-1,-1,-1,-1,-1,5,10,6,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,3,0,4,7,3,6,5,10,-1,-1,-1,-1,-1,-1,-1,1,9,0,5,10,6,8,4,7,-1,-1,-1,-1,-1,-1,-1,10,6,5,1,9,7,1,7,3,7,9,4,-1,-1,-1,-1,6,1,2,6,5,1,4,7,8,-1,-1,-1,-1,
-1,-1,-1,1,2,5,5,2,6,3,0,4,3,4,7,-1,-1,-1,-1,8,4,7,9,0,5,0,6,5,0,2,6,-1,-1,-1,-1,7,3,9,7,9,4,3,2,9,5,9,6,2,6,9,-1,3,11,2,7,8,4,10,6,5,-1,-1,-1,-1,-1,-1,-1,5,10,6,4,7,2,4,2,0,2,7,11,-1,-1,-1,-1,0,1,9,4,7,8,2,3,11,5,10,6,-1,-1,-1,-1,9,2,1,9,11,2,9,4,11,7,11,4,5,10,6,-1,8,4,7,3,11,5,3,5,1,5,11,6,-1,-1,-1,-1,5,1,11,5,11,6,1,0,11,7,11,4,0,4,11,-1,0,5,9,0,6,5,0,3,6,11,6,3,8,4,7,-1,6,5,9,6,9,11,4,7,9,7,11,9,-1,-1,-1,-1,10,4,9,6,4,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,10,6,4,9,10,0,8,3,-1,-1,-1,-1,-1,-1,-1,
10,0,1,10,6,0,6,4,0,-1,-1,-1,-1,-1,-1,-1,8,3,1,8,1,6,8,6,4,6,1,10,-1,-1,-1,-1,1,4,9,1,2,4,2,6,4,-1,-1,-1,-1,-1,-1,-1,3,0,8,1,2,9,2,4,9,2,6,4,-1,-1,-1,-1,0,2,4,4,2,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,2,8,2,4,4,2,6,-1,-1,-1,-1,-1,-1,-1,10,4,9,10,6,4,11,2,3,-1,-1,-1,-1,-1,-1,-1,0,8,2,2,8,11,4,9,10,4,10,6,-1,-1,-1,-1,3,11,2,0,1,6,0,6,4,6,1,10,-1,-1,-1,-1,6,4,1,6,1,10,4,8,1,2,1,11,8,11,1,-1,9,6,4,9,3,6,9,1,3,11,6,3,-1,-1,-1,-1,8,11,1,8,1,0,11,6,1,9,1,4,6,4,1,-1,3,11,6,3,6,0,0,6,4,-1,-1,-1,-1,-1,-1,-1,
6,4,8,11,6,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,10,6,7,8,10,8,9,10,-1,-1,-1,-1,-1,-1,-1,0,7,3,0,10,7,0,9,10,6,7,10,-1,-1,-1,-1,10,6,7,1,10,7,1,7,8,1,8,0,-1,-1,-1,-1,10,6,7,10,7,1,1,7,3,-1,-1,-1,-1,-1,-1,-1,1,2,6,1,6,8,1,8,9,8,6,7,-1,-1,-1,-1,2,6,9,2,9,1,6,7,9,0,9,3,7,3,9,-1,7,8,0,7,0,6,6,0,2,-1,-1,-1,-1,-1,-1,-1,7,3,2,6,7,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,11,10,6,8,10,8,9,8,6,7,-1,-1,-1,-1,2,0,7,2,7,11,0,9,7,6,7,10,9,10,7,-1,1,8,0,1,7,8,1,10,7,6,7,10,2,3,11,-1,11,2,1,11,1,7,10,6,1,6,7,1,-1,-1,-1,-1,
8,9,6,8,6,7,9,1,6,11,6,3,1,3,6,-1,0,9,1,11,6,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,8,0,7,0,6,3,11,0,11,6,0,-1,-1,-1,-1,7,11,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,8,11,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,11,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,1,9,8,3,1,11,7,6,-1,-1,-1,-1,-1,-1,-1,10,1,2,6,11,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,10,3,0,8,6,11,7,-1,-1,-1,-1,-1,-1,-1,2,9,0,2,10,9,6,11,7,-1,-1,-1,-1,-1,-1,-1,6,11,7,2,10,3,10,8,3,10,9,8,-1,-1,-1,-1,7,
2,3,6,2,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,0,8,7,6,0,6,2,0,-1,-1,-1,-1,-1,-1,-1,2,7,6,2,3,7,0,1,9,-1,-1,-1,-1,-1,-1,-1,1,6,2,1,8,6,1,9,8,8,7,6,-1,-1,-1,-1,10,7,6,10,1,7,1,3,7,-1,-1,-1,-1,-1,-1,-1,10,7,6,1,7,10,1,8,7,1,0,8,-1,-1,-1,-1,0,3,7,0,7,10,0,10,9,6,10,7,-1,-1,-1,-1,7,6,10,7,10,8,8,10,9,-1,-1,-1,-1,-1,-1,-1,6,8,4,11,8,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,6,11,3,0,6,0,4,6,-1,-1,-1,-1,-1,-1,-1,8,6,11,8,4,6,9,0,1,-1,-1,-1,-1,-1,-1,-1,9,4,6,9,6,3,9,3,1,11,3,6,-1,-1,-1,-1,6,8,4,6,11,8,2,10,1,-1,-1,-1,
-1,-1,-1,-1,1,2,10,3,0,11,0,6,11,0,4,6,-1,-1,-1,-1,4,11,8,4,6,11,0,2,9,2,10,9,-1,-1,-1,-1,10,9,3,10,3,2,9,4,3,11,3,6,4,6,3,-1,8,2,3,8,4,2,4,6,2,-1,-1,-1,-1,-1,-1,-1,0,4,2,4,6,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,2,3,4,2,4,6,4,3,8,-1,-1,-1,-1,1,9,4,1,4,2,2,4,6,-1,-1,-1,-1,-1,-1,-1,8,1,3,8,6,1,8,4,6,6,10,1,-1,-1,-1,-1,10,1,0,10,0,6,6,0,4,-1,-1,-1,-1,-1,-1,-1,4,6,3,4,3,8,6,10,3,0,3,9,10,9,3,-1,10,9,4,6,10,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,9,5,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,4,9,5,11,7,6,
-1,-1,-1,-1,-1,-1,-1,5,0,1,5,4,0,7,6,11,-1,-1,-1,-1,-1,-1,-1,11,7,6,8,3,4,3,5,4,3,1,5,-1,-1,-1,-1,9,5,4,10,1,2,7,6,11,-1,-1,-1,-1,-1,-1,-1,6,11,7,1,2,10,0,8,3,4,9,5,-1,-1,-1,-1,7,6,11,5,4,10,4,2,10,4,0,2,-1,-1,-1,-1,3,4,8,3,5,4,3,2,5,10,5,2,11,7,6,-1,7,2,3,7,6,2,5,4,9,-1,-1,-1,-1,-1,-1,-1,9,5,4,0,8,6,0,6,2,6,8,7,-1,-1,-1,-1,3,6,2,3,7,6,1,5,0,5,4,0,-1,-1,-1,-1,6,2,8,6,8,7,2,1,8,4,8,5,1,5,8,-1,9,5,4,10,1,6,1,7,6,1,3,7,-1,-1,-1,-1,1,6,10,1,7,6,1,0,7,8,7,0,9,5,4,-1,4,0,10,4,10,5,0,3,10,6,10,7,3,7,10,
-1,7,6,10,7,10,8,5,4,10,4,8,10,-1,-1,-1,-1,6,9,5,6,11,9,11,8,9,-1,-1,-1,-1,-1,-1,-1,3,6,11,0,6,3,0,5,6,0,9,5,-1,-1,-1,-1,0,11,8,0,5,11,0,1,5,5,6,11,-1,-1,-1,-1,6,11,3,6,3,5,5,3,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,9,5,11,9,11,8,11,5,6,-1,-1,-1,-1,0,11,3,0,6,11,0,9,6,5,6,9,1,2,10,-1,11,8,5,11,5,6,8,0,5,10,5,2,0,2,5,-1,6,11,3,6,3,5,2,10,3,10,5,3,-1,-1,-1,-1,5,8,9,5,2,8,5,6,2,3,8,2,-1,-1,-1,-1,9,5,6,9,6,0,0,6,2,-1,-1,-1,-1,-1,-1,-1,1,5,8,1,8,0,5,6,8,3,8,2,6,2,8,-1,1,5,6,2,1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
1,3,6,1,6,10,3,8,6,5,6,9,8,9,6,-1,10,1,0,10,0,6,9,5,0,5,6,0,-1,-1,-1,-1,0,3,8,5,6,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,5,10,7,5,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,5,10,11,7,5,8,3,0,-1,-1,-1,-1,-1,-1,-1,5,11,7,5,10,11,1,9,0,-1,-1,-1,-1,-1,-1,-1,10,7,5,10,11,7,9,8,1,8,3,1,-1,-1,-1,-1,11,1,2,11,7,1,7,5,1,-1,-1,-1,-1,-1,-1,-1,0,8,3,1,2,7,1,7,5,7,2,11,-1,-1,-1,-1,9,7,5,9,2,7,9,0,2,2,11,7,-1,-1,-1,-1,7,5,2,7,2,11,5,9,2,3,2,8,9,8,2,-1,2,5,10,2,3,5,3,7,5,-1,-1,
-1,-1,-1,-1,-1,8,2,0,8,5,2,8,7,5,10,2,5,-1,-1,-1,-1,9,0,1,5,10,3,5,3,7,3,10,2,-1,-1,-1,-1,9,8,2,9,2,1,8,7,2,10,2,5,7,5,2,-1,1,3,5,3,7,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,7,0,7,1,1,7,5,-1,-1,-1,-1,-1,-1,-1,9,0,3,9,3,5,5,3,7,-1,-1,-1,-1,-1,-1,-1,9,8,7,5,9,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,8,4,5,10,8,10,11,8,-1,-1,-1,-1,-1,-1,-1,5,0,4,5,11,0,5,10,11,11,3,0,-1,-1,-1,-1,0,1,9,8,4,10,8,10,11,10,4,5,-1,-1,-1,-1,10,11,4,10,4,5,11,3,4,9,4,1,3,1,4,-1,2,5,1,2,8,5,2,11,8,4,5,8,-1,-1,-1,-1,0,4,11,0,11,3,4,5,11,
2,11,1,5,1,11,-1,0,2,5,0,5,9,2,11,5,4,5,8,11,8,5,-1,9,4,5,2,11,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,5,10,3,5,2,3,4,5,3,8,4,-1,-1,-1,-1,5,10,2,5,2,4,4,2,0,-1,-1,-1,-1,-1,-1,-1,3,10,2,3,5,10,3,8,5,4,5,8,0,1,9,-1,5,10,2,5,2,4,1,9,2,9,4,2,-1,-1,-1,-1,8,4,5,8,5,3,3,5,1,-1,-1,-1,-1,-1,-1,-1,0,4,5,1,0,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,4,5,8,5,3,9,0,5,0,3,5,-1,-1,-1,-1,9,4,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,11,7,4,9,11,9,10,11,-1,-1,-1,-1,-1,-1,-1,0,8,3,4,9,7,9,11,7,9,10,11,-1,-1,-1,-1,1,10,11,1,11,
4,1,4,0,7,4,11,-1,-1,-1,-1,3,1,4,3,4,8,1,10,4,7,4,11,10,11,4,-1,4,11,7,9,11,4,9,2,11,9,1,2,-1,-1,-1,-1,9,7,4,9,11,7,9,1,11,2,11,1,0,8,3,-1,11,7,4,11,4,2,2,4,0,-1,-1,-1,-1,-1,-1,-1,11,7,4,11,4,2,8,3,4,3,2,4,-1,-1,-1,-1,2,9,10,2,7,9,2,3,7,7,4,9,-1,-1,-1,-1,9,10,7,9,7,4,10,2,7,8,7,0,2,0,7,-1,3,7,10,3,10,2,7,4,10,1,10,0,4,0,10,-1,1,10,2,8,7,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,9,1,4,1,7,7,1,3,-1,-1,-1,-1,-1,-1,-1,4,9,1,4,1,7,0,8,1,8,7,1,-1,-1,-1,-1,4,0,3,7,4,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,8,7,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,10,8,10,11,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,9,3,9,11,11,9,10,-1,-1,-1,-1,-1,-1,-1,0,1,10,0,10,8,8,10,11,-1,-1,-1,-1,-1,-1,-1,3,1,10,11,3,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,11,1,11,9,9,11,8,-1,-1,-1,-1,-1,-1,-1,3,0,9,3,9,11,1,2,9,2,11,9,-1,-1,-1,-1,0,2,11,8,0,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,2,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,2,8,10,10,8,9,-1,-1,-1,-1,-1,-1,-1,9,10,2,0,9,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,2,8,10,0,1,8,1,10,8,-1,-1,-1,-1,1,10,
2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,3,8,9,1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,9,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]);THREE.Loader=function(a){this.statusDomElement=(this.showStatus=a)?this.addStatusElement():null};
M
Mikael Emtinger 已提交
408
THREE.Loader.prototype={addStatusElement:function(){var a=document.createElement("div");a.style.fontSize="0.8em";a.style.textAlign="left";a.style.background="#b00";a.style.color="#fff";a.style.width="140px";a.style.padding="0.25em 0.25em 0.25em 0.5em";a.style.position="absolute";a.style.right="0px";a.style.top="0px";a.style.zIndex=1E3;a.innerHTML="Loading ...";return a},updateProgress:function(a){var c="Loaded ";c+=a.total?(100*a.loaded/a.total).toFixed(0)+"%":(a.loaded/1E3).toFixed(2)+" KB";this.statusDomElement.innerHTML=
A
alteredq 已提交
409 410 411
c},loadAsciiOld:function(a,c){var b=document.createElement("script");b.type="text/javascript";b.onload=c;b.src=a;document.getElementsByTagName("head")[0].appendChild(b)},loadAscii:function(a){var c=a.model,b=a.callback,d=a.texture_path?a.texture_path:THREE.Loader.prototype.extractUrlbase(c);a=(new Date).getTime();c=new Worker(c);c.onmessage=function(e){THREE.Loader.prototype.createModel(e.data,b,d)};c.postMessage(a)},loadBinary:function(a){var c=a.model,b=a.callback,d=a.texture_path?a.texture_path:
THREE.Loader.prototype.extractUrlbase(c),e=a.bin_path?a.bin_path:THREE.Loader.prototype.extractUrlbase(c);a=(new Date).getTime();c=new Worker(c);var g=this.showProgress?THREE.Loader.prototype.updateProgress:null;c.onmessage=function(h){THREE.Loader.prototype.loadAjaxBuffers(h.data.buffers,h.data.materials,b,e,d,g)};c.onerror=function(h){alert("worker.onerror: "+h.message+"\n"+h.data);h.preventDefault()};c.postMessage(a)},loadAjaxBuffers:function(a,c,b,d,e,g){var h=new XMLHttpRequest,j=d+"/"+a,k=0;
h.onreadystatechange=function(){if(h.readyState==4)h.status==200||h.status==0?THREE.Loader.prototype.createBinModel(h.responseText,b,e,c):alert("Couldn't load ["+j+"] ["+h.status+"]");else if(h.readyState==3){if(g){k==0&&(k=h.getResponseHeader("Content-Length"));g({total:k,loaded:h.responseText.length})}}else h.readyState==2&&(k=h.getResponseHeader("Content-Length"))};h.open("GET",j,!0);h.overrideMimeType("text/plain; charset=x-user-defined");h.setRequestHeader("Content-Type","text/plain");h.send(null)},
M
Mikael Emtinger 已提交
412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433
createBinModel:function(a,c,b,d){var e=function(g){function h(q,n){var p=o(q,n),B=o(q,n+1),A=o(q,n+2),D=o(q,n+3),O=(D<<1&255|A>>7)-127;p|=(A&127)<<16|B<<8;if(p==0&&O==-127)return 0;return(1-2*(D>>7))*(1+p*Math.pow(2,-23))*Math.pow(2,O)}function j(q,n){var p=o(q,n),B=o(q,n+1),A=o(q,n+2);return(o(q,n+3)<<24)+(A<<16)+(B<<8)+p}function k(q,n){var p=o(q,n);return(o(q,n+1)<<8)+p}function l(q,n){var p=o(q,n);return p>127?p-256:p}function o(q,n){return q.charCodeAt(n)&255}function v(q){var n,p,B;n=j(a,q);
p=j(a,q+Y);B=j(a,q+M);q=k(a,q+f);THREE.Loader.prototype.f3(w,n,p,B,q)}function u(q){var n,p,B,A,D,O;n=j(a,q);p=j(a,q+Y);B=j(a,q+M);A=k(a,q+f);D=j(a,q+W);O=j(a,q+R);q=j(a,q+da);THREE.Loader.prototype.f3n(w,N,n,p,B,A,D,O,q)}function t(q){var n,p,B,A;n=j(a,q);p=j(a,q+ga);B=j(a,q+I);A=j(a,q+ca);q=k(a,q+za);THREE.Loader.prototype.f4(w,n,p,B,A,q)}function y(q){var n,p,B,A,D,O,X,E;n=j(a,q);p=j(a,q+ga);B=j(a,q+I);A=j(a,q+ca);D=k(a,q+za);O=j(a,q+ea);X=j(a,q+xa);E=j(a,q+ja);q=j(a,q+ha);THREE.Loader.prototype.f4n(w,
N,n,p,B,A,D,O,X,E,q)}function C(q){var n,p;n=j(a,q);p=j(a,q+va);q=j(a,q+Aa);THREE.Loader.prototype.uv3(w.uvs,L[n*2],L[n*2+1],L[p*2],L[p*2+1],L[q*2],L[q*2+1])}function F(q){var n,p,B;n=j(a,q);p=j(a,q+ia);B=j(a,q+$);q=j(a,q+qa);THREE.Loader.prototype.uv4(w.uvs,L[n*2],L[n*2+1],L[p*2],L[p*2+1],L[B*2],L[B*2+1],L[q*2],L[q*2+1])}var w=this,G=0,x,N=[],L=[],Y,M,f,W,R,da,ga,I,ca,za,ea,xa,ja,ha,va,Aa,ia,$,qa,ra,Q,ma,ta,m,z;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(w,d,g);x={signature:a.substr(G,
8),header_bytes:o(a,G+8),vertex_coordinate_bytes:o(a,G+9),normal_coordinate_bytes:o(a,G+10),uv_coordinate_bytes:o(a,G+11),vertex_index_bytes:o(a,G+12),normal_index_bytes:o(a,G+13),uv_index_bytes:o(a,G+14),material_index_bytes:o(a,G+15),nvertices:j(a,G+16),nnormals:j(a,G+16+4),nuvs:j(a,G+16+8),ntri_flat:j(a,G+16+12),ntri_smooth:j(a,G+16+16),ntri_flat_uv:j(a,G+16+20),ntri_smooth_uv:j(a,G+16+24),nquad_flat:j(a,G+16+28),nquad_smooth:j(a,G+16+32),nquad_flat_uv:j(a,G+16+36),nquad_smooth_uv:j(a,G+16+40)};
G+=x.header_bytes;Y=x.vertex_index_bytes;M=x.vertex_index_bytes*2;f=x.vertex_index_bytes*3;W=x.vertex_index_bytes*3+x.material_index_bytes;R=x.vertex_index_bytes*3+x.material_index_bytes+x.normal_index_bytes;da=x.vertex_index_bytes*3+x.material_index_bytes+x.normal_index_bytes*2;ga=x.vertex_index_bytes;I=x.vertex_index_bytes*2;ca=x.vertex_index_bytes*3;za=x.vertex_index_bytes*4;ea=x.vertex_index_bytes*4+x.material_index_bytes;xa=x.vertex_index_bytes*4+x.material_index_bytes+x.normal_index_bytes;ja=
x.vertex_index_bytes*4+x.material_index_bytes+x.normal_index_bytes*2;ha=x.vertex_index_bytes*4+x.material_index_bytes+x.normal_index_bytes*3;va=x.uv_index_bytes;Aa=x.uv_index_bytes*2;ia=x.uv_index_bytes;$=x.uv_index_bytes*2;qa=x.uv_index_bytes*3;g=x.vertex_index_bytes*3+x.material_index_bytes;z=x.vertex_index_bytes*4+x.material_index_bytes;ra=x.ntri_flat*g;Q=x.ntri_smooth*(g+x.normal_index_bytes*3);ma=x.ntri_flat_uv*(g+x.uv_index_bytes*3);ta=x.ntri_smooth_uv*(g+x.normal_index_bytes*3+x.uv_index_bytes*
3);m=x.nquad_flat*z;g=x.nquad_smooth*(z+x.normal_index_bytes*4);z=x.nquad_flat_uv*(z+x.uv_index_bytes*4);G+=function(q){for(var n,p,B,A=x.vertex_coordinate_bytes*3,D=q+x.nvertices*A;q<D;q+=A){n=h(a,q);p=h(a,q+x.vertex_coordinate_bytes);B=h(a,q+x.vertex_coordinate_bytes*2);THREE.Loader.prototype.v(w,n,p,B)}return x.nvertices*A}(G);G+=function(q){for(var n,p,B,A=x.normal_coordinate_bytes*3,D=q+x.nnormals*A;q<D;q+=A){n=l(a,q);p=l(a,q+x.normal_coordinate_bytes);B=l(a,q+x.normal_coordinate_bytes*2);N.push(n/
127,p/127,B/127)}return x.nnormals*A}(G);G+=function(q){for(var n,p,B=x.uv_coordinate_bytes*2,A=q+x.nuvs*B;q<A;q+=B){n=h(a,q);p=h(a,q+x.uv_coordinate_bytes);L.push(n,p)}return x.nuvs*B}(G);ra=G+ra;Q=ra+Q;ma=Q+ma;ta=ma+ta;m=ta+m;g=m+g;z=g+z;(function(q){var n,p=x.vertex_index_bytes*3+x.material_index_bytes,B=p+x.uv_index_bytes*3,A=q+x.ntri_flat_uv*B;for(n=q;n<A;n+=B){v(n);C(n+p)}return A-q})(Q);(function(q){var n,p=x.vertex_index_bytes*3+x.material_index_bytes+x.normal_index_bytes*3,B=p+x.uv_index_bytes*
3,A=q+x.ntri_smooth_uv*B;for(n=q;n<A;n+=B){u(n);C(n+p)}return A-q})(ma);(function(q){var n,p=x.vertex_index_bytes*4+x.material_index_bytes,B=p+x.uv_index_bytes*4,A=q+x.nquad_flat_uv*B;for(n=q;n<A;n+=B){t(n);F(n+p)}return A-q})(g);(function(q){var n,p=x.vertex_index_bytes*4+x.material_index_bytes+x.normal_index_bytes*4,B=p+x.uv_index_bytes*4,A=q+x.nquad_smooth_uv*B;for(n=q;n<A;n+=B){y(n);F(n+p)}return A-q})(z);(function(q){var n,p=x.vertex_index_bytes*3+x.material_index_bytes,B=q+x.ntri_flat*p;for(n=
q;n<B;n+=p)v(n);return B-q})(G);(function(q){var n,p=x.vertex_index_bytes*3+x.material_index_bytes+x.normal_index_bytes*3,B=q+x.ntri_smooth*p;for(n=q;n<B;n+=p)u(n);return B-q})(ra);(function(q){var n,p=x.vertex_index_bytes*4+x.material_index_bytes,B=q+x.nquad_flat*p;for(n=q;n<B;n+=p)t(n);return B-q})(ta);(function(q){var n,p=x.vertex_index_bytes*4+x.material_index_bytes+x.normal_index_bytes*4,B=q+x.nquad_smooth*p;for(n=q;n<B;n+=p)y(n);return B-q})(m);this.computeCentroids();this.computeFaceNormals()};
e.prototype=new THREE.Geometry;e.prototype.constructor=e;c(new e(b))},createModel:function(a,c,b){var d=function(e){var g=this;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(g,a.materials,e);(function(){var h,j,k,l,o,v;h=0;for(j=a.vertices.length;h<j;h+=3){k=a.vertices[h];l=a.vertices[h+1];o=a.vertices[h+2];THREE.Loader.prototype.v(g,k,l,o)}if(a.morphTargets!==undefined){h=0;for(j=a.morphTargets.length;h<j;h++){g.morphTargets[h]={};g.morphTargets[h].name=a.morphTargets[h].name;g.morphTargets[h].vertices=
[];v=g.morphTargets[h].vertices;o=a.morphTargets[h].vertices;k=0;for(l=o.length;k<l;k+=3)v.push(new THREE.Vertex(new THREE.Vector3(o[k],o[k+1],o[k+2])))}}if(a.colors){h=0;for(j=a.colors.length;h<j;h+=3){k=a.colors[h];l=a.colors[h+1];o=a.colors[h+2];THREE.Loader.prototype.vc(g,k,l,o)}}})();(function(){function h(y,C){THREE.Loader.prototype.f3(g,y[C],y[C+1],y[C+2],y[C+3])}function j(y,C){THREE.Loader.prototype.f3n(g,a.normals,y[C],y[C+1],y[C+2],y[C+3],y[C+4],y[C+5],y[C+6])}function k(y,C){THREE.Loader.prototype.f4(g,
y[C],y[C+1],y[C+2],y[C+3],y[C+4])}function l(y,C){THREE.Loader.prototype.f4n(g,a.normals,y[C],y[C+1],y[C+2],y[C+3],y[C+4],y[C+5],y[C+6],y[C+7],y[C+8])}function o(y,C){var F,w,G,x,N,L,Y,M,f;F=y[C];w=y[C+1];G=y[C+2];x=a.uvs[F*2];Y=a.uvs[F*2+1];N=a.uvs[w*2];M=a.uvs[w*2+1];L=a.uvs[G*2];f=a.uvs[G*2+1];THREE.Loader.prototype.uv3(g.uvs,x,Y,N,M,L,f);if(a.uvs2&&a.uvs2.length){x=a.uvs2[F*2];Y=a.uvs2[F*2+1];N=a.uvs2[w*2];M=a.uvs2[w*2+1];L=a.uvs2[G*2];f=a.uvs2[G*2+1];THREE.Loader.prototype.uv3(g.uvs2,x,1-Y,N,
1-M,L,1-f)}}function v(y,C){var F,w,G,x,N,L,Y,M,f,W,R,da;F=y[C];w=y[C+1];G=y[C+2];x=y[C+3];N=a.uvs[F*2];f=a.uvs[F*2+1];L=a.uvs[w*2];W=a.uvs[w*2+1];Y=a.uvs[G*2];R=a.uvs[G*2+1];M=a.uvs[x*2];da=a.uvs[x*2+1];THREE.Loader.prototype.uv4(g.uvs,N,f,L,W,Y,R,M,da);if(a.uvs2){N=a.uvs2[F*2];f=a.uvs2[F*2+1];L=a.uvs2[w*2];W=a.uvs2[w*2+1];Y=a.uvs2[G*2];R=a.uvs2[G*2+1];M=a.uvs2[x*2];da=a.uvs2[x*2+1];THREE.Loader.prototype.uv4(g.uvs2,N,1-f,L,1-W,Y,1-R,M,1-da)}}var u,t;u=0;for(t=a.trianglesUvs.length;u<t;u+=7){h(a.trianglesUvs,
u);o(a.trianglesUvs,u+4)}u=0;for(t=a.trianglesNormalsUvs.length;u<t;u+=10){j(a.trianglesNormalsUvs,u);o(a.trianglesNormalsUvs,u+7)}u=0;for(t=a.quadsUvs.length;u<t;u+=9){k(a.quadsUvs,u);v(a.quadsUvs,u+5)}u=0;for(t=a.quadsNormalsUvs.length;u<t;u+=13){l(a.quadsNormalsUvs,u);v(a.quadsNormalsUvs,u+9)}u=0;for(t=a.triangles.length;u<t;u+=4)h(a.triangles,u);u=0;for(t=a.trianglesNormals.length;u<t;u+=7)j(a.trianglesNormals,u);u=0;for(t=a.quads.length;u<t;u+=5)k(a.quads,u);u=0;for(t=a.quadsNormals.length;u<
t;u+=9)l(a.quadsNormals,u)})();(function(){var h,j,k,l;if(a.skinWeights){h=0;for(j=a.skinWeights.length;h<j;h+=2){k=a.skinWeights[h];l=a.skinWeights[h+1];THREE.Loader.prototype.sw(g,k,l,0,0)}}if(a.skinIndices){h=0;for(j=a.skinIndices.length;h<j;h+=2){k=a.skinIndices[h];l=a.skinIndices[h+1];THREE.Loader.prototype.si(g,k,l,0,0)}}THREE.Loader.prototype.bones(g,a.bones);THREE.Loader.prototype.animation(g,a.animation)})();this.computeCentroids();this.computeFaceNormals()};d.prototype=new THREE.Geometry;
d.prototype.constructor=d;c(new d(b))},bones:function(a,c){a.bones=c},animation:function(a,c){a.animation=c},si:function(a,c,b,d,e){a.skinIndices.push(new THREE.Vector4(c,b,d,e))},sw:function(a,c,b,d,e){a.skinWeights.push(new THREE.Vector4(c,b,d,e))},v:function(a,c,b,d){a.vertices.push(new THREE.Vertex(new THREE.Vector3(c,b,d)))},vc:function(a,c,b,d){var e=new THREE.Color(16777215);e.setRGB(c,b,d);a.colors.push(e)},f3:function(a,c,b,d,e){a.faces.push(new THREE.Face3(c,b,d,null,a.materials[e]))},f4:function(a,
c,b,d,e,g){a.faces.push(new THREE.Face4(c,b,d,e,null,a.materials[g]))},f3n:function(a,c,b,d,e,g,h,j,k){g=a.materials[g];var l=c[j*3],o=c[j*3+1];j=c[j*3+2];var v=c[k*3],u=c[k*3+1];k=c[k*3+2];a.faces.push(new THREE.Face3(b,d,e,[new THREE.Vector3(c[h*3],c[h*3+1],c[h*3+2]),new THREE.Vector3(l,o,j),new THREE.Vector3(v,u,k)],g))},f4n:function(a,c,b,d,e,g,h,j,k,l,o){h=a.materials[h];var v=c[k*3],u=c[k*3+1];k=c[k*3+2];var t=c[l*3],y=c[l*3+1];l=c[l*3+2];var C=c[o*3],F=c[o*3+1];o=c[o*3+2];a.faces.push(new THREE.Face4(b,
d,e,g,[new THREE.Vector3(c[j*3],c[j*3+1],c[j*3+2]),new THREE.Vector3(v,u,k),new THREE.Vector3(t,y,l),new THREE.Vector3(C,F,o)],h))},uv3:function(a,c,b,d,e,g,h){var j=[];j.push(new THREE.UV(c,b));j.push(new THREE.UV(d,e));j.push(new THREE.UV(g,h));a.push(j)},uv4:function(a,c,b,d,e,g,h,j,k){var l=[];l.push(new THREE.UV(c,b));l.push(new THREE.UV(d,e));l.push(new THREE.UV(g,h));l.push(new THREE.UV(j,k));a.push(l)},init_materials:function(a,c,b){a.materials=[];for(var d=0;d<c.length;++d)a.materials[d]=
[THREE.Loader.prototype.createMaterial(c[d],b)]},createMaterial:function(a,c){function b(j){j=Math.log(j)/Math.LN2;return Math.floor(j)==j}function d(j,k){var l=new Image;l.onload=function(){if(!b(this.width)||!b(this.height)){var o=Math.pow(2,Math.round(Math.log(this.width)/Math.LN2)),v=Math.pow(2,Math.round(Math.log(this.height)/Math.LN2));j.image.width=o;j.image.height=v;j.image.getContext("2d").drawImage(this,0,0,o,v)}else j.image=this;j.needsUpdate=!0};l.src=k}var e,g,h;e="MeshLambertMaterial";
g={color:15658734,opacity:1,map:null,lightMap:null,vertexColors:a.vertexColors};a.shading&&a.shading=="Phong"&&(e="MeshPhongMaterial");if(a.mapDiffuse&&c){h=document.createElement("canvas");g.map=new THREE.Texture(h);g.map.sourceFile=a.mapDiffuse;d(g.map,c+"/"+a.mapDiffuse)}else if(a.colorDiffuse){h=(a.colorDiffuse[0]*255<<16)+(a.colorDiffuse[1]*255<<8)+a.colorDiffuse[2]*255;g.color=h;g.opacity=a.transparency}else if(a.DbgColor)g.color=a.DbgColor;if(a.mapLightmap&&c){h=document.createElement("canvas");
g.lightMap=new THREE.Texture(h);g.lightMap.sourceFile=a.mapLightmap;d(g.lightMap,c+"/"+a.mapLightmap)}return new THREE[e](g)},extractUrlbase:function(a){a=a.split("/");a.pop();return a.join("/")}};