Jelajahi Sumber

Updated builds.

Mr.doob 12 tahun lalu
induk
melakukan
8fae05d3b0
2 mengubah file dengan 106 tambahan dan 137 penghapusan
  1. 40 70
      build/three.js
  2. 66 67
      build/three.min.js

+ 40 - 70
build/three.js

@@ -1580,7 +1580,7 @@ THREE.extend( THREE.Vector3.prototype, {
 
 	},
 
-	applyEuler: function() {
+	applyEuler: function () {
 
 		var q1 = new THREE.Quaternion();
 
@@ -1596,7 +1596,7 @@ THREE.extend( THREE.Vector3.prototype, {
 
 	}(),
 
-	applyAxisAngle: function() {
+	applyAxisAngle: function () {
 
 		var q1 = new THREE.Quaternion();
 
@@ -1747,7 +1747,7 @@ THREE.extend( THREE.Vector3.prototype, {
 
 	},
 
-	negate: function() {
+	negate: function () {
 
 		return this.multiplyScalar( - 1 );
 
@@ -3972,45 +3972,6 @@ THREE.extend( THREE.Matrix4.prototype, {
 
 	},
 
-	getColumnX: function() {
-
-		var v1 = new THREE.Vector3();
-
-		return function () {
-
-			var te = this.elements;
-			return v1.set( te[0], te[1], te[2] );
-
-		};
-
-	}(),
-
-	getColumnY: function() {
-
-		var v1 = new THREE.Vector3();
-
-		return function () {
-
-			var te = this.elements;
-			return v1.set( te[4], te[5], te[6] );
-
-		};
-
-	}(),
-
-	getColumnZ: function() {
-
-		var v1 = new THREE.Vector3();
-
-		return function() {
-
-			var te = this.elements;
-			return v1.set( te[8], te[9], te[10] );
-
-		};
-
-	}(),
-
 	getInverse: function ( m, throwOnInvertible ) {
 
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
@@ -4925,29 +4886,37 @@ THREE.extend( THREE.Frustum.prototype, {
 
 	},
 
-	intersectsObject: function ( object ) {
+	intersectsObject: function () {
 
-		// this method is expanded inlined for performance reasons.
-		var matrix = object.matrixWorld;
-		var planes = this.planes;
-		var center = matrix.getPosition();
-		var negRadius = - object.geometry.boundingSphere.radius * matrix.getMaxScaleOnAxis();
+		var center = new THREE.Vector3();
 
-		for ( var i = 0; i < 6; i ++ ) {
+		return function ( object ) {
 
-			var distance = planes[ i ].distanceToPoint( center );
+			// this method is expanded inlined for performance reasons.
 
-			if( distance < negRadius ) {
+			var matrix = object.matrixWorld;
+			var planes = this.planes;
+			var negRadius = - object.geometry.boundingSphere.radius * matrix.getMaxScaleOnAxis();
 
-				return false;
+			center.getPositionFromMatrix( matrix );
+
+			for ( var i = 0; i < 6; i ++ ) {
+
+				var distance = planes[ i ].distanceToPoint( center );
+
+				if ( distance < negRadius ) {
+
+					return false;
+
+				}
 
 			}
 
-		}
+			return true;
 
-		return true;
+		};
 
-	},
+	}(),
 
 	intersectsSphere: function ( sphere ) {
 
@@ -4959,7 +4928,7 @@ THREE.extend( THREE.Frustum.prototype, {
 
 			var distance = planes[ i ].distanceToPoint( center );
 
-			if( distance < negRadius ) {
+			if ( distance < negRadius ) {
 
 				return false;
 
@@ -4977,7 +4946,7 @@ THREE.extend( THREE.Frustum.prototype, {
 
 		for ( var i = 0; i < 6; i ++ ) {
 
-			if( planes[ i ].distanceToPoint( point ) < 0 ) {
+			if ( planes[ i ].distanceToPoint( point ) < 0 ) {
 
 				return false;
 
@@ -4995,7 +4964,8 @@ THREE.extend( THREE.Frustum.prototype, {
 
 	}
 
-} );/**
+} );
+/**
  * @author bhouston / http://exocortex.com
  */
 
@@ -5876,7 +5846,7 @@ THREE.EventDispatcher = function () {
 			// Checking boundingSphere distance to ray
 			sphere.set(
 				object.matrixWorld.getPosition(),
-				object.geometry.boundingSphere.radius* object.matrixWorld.getMaxScaleOnAxis() );
+				object.geometry.boundingSphere.radius * object.matrixWorld.getMaxScaleOnAxis() );
 
 			if ( ! raycaster.ray.isIntersectionSphere( sphere ) ) {
 
@@ -5902,7 +5872,7 @@ THREE.EventDispatcher = function () {
 			inverseMatrix.getInverse( object.matrixWorld );
 
 			localRay.copy( raycaster.ray ).transform( inverseMatrix );
-	
+
 			for ( var f = 0, fl = geometry.faces.length; f < fl; f ++ ) {
 
 				var face = geometry.faces[ f ];
@@ -5910,14 +5880,14 @@ THREE.EventDispatcher = function () {
 				var material = isFaceMaterial === true ? objectMaterials[ face.materialIndex ] : object.material;
 
 				if ( material === undefined ) continue;
-				
+
 				facePlane.setFromNormalAndCoplanarPoint( face.normal, vertices[face.a] );
 
 				var planeDistance = localRay.distanceToPlane( facePlane );
-	
+
 				// bail if raycaster and plane are parallel
 				if ( Math.abs( planeDistance ) < precision ) continue;
-	
+
 				// if negative distance, then plane is behind raycaster
 				if ( planeDistance < 0 ) continue;
 
@@ -5933,7 +5903,7 @@ THREE.EventDispatcher = function () {
 
 				// this can be done using the planeDistance from localRay because localRay wasn't normalized, but ray was
 				if ( planeDistance < raycaster.near || planeDistance > raycaster.far ) continue;
-				
+
 				intersectPoint = localRay.at( planeDistance, intersectPoint ); // passing in intersectPoint avoids a copy
 
 				if ( face instanceof THREE.Face3 ) {
@@ -6517,7 +6487,7 @@ THREE.Projector = function () {
 
 						} else {
 
-							_vector3.copy( object.matrixWorld.getPosition() );
+							_vector3.getPositionFromMatrix( object.matrixWorld );
 							_vector3.applyProjection( _viewProjectionMatrix );
 							_object.z = _vector3.z;
 
@@ -6540,7 +6510,7 @@ THREE.Projector = function () {
 
 					} else {
 
-						_vector3.copy( object.matrixWorld.getPosition() );
+						_vector3.getPositionFromMatrix( object.matrixWorld );
 						_vector3.applyProjection( _viewProjectionMatrix );
 						_object.z = _vector3.z;
 
@@ -6559,7 +6529,7 @@ THREE.Projector = function () {
 
 					} else {
 
-						_vector3.copy( object.matrixWorld.getPosition() );
+						_vector3.getPositionFromMatrix( object.matrixWorld );
 						_vector3.applyProjection( _viewProjectionMatrix );
 						_object.z = _vector3.z;
 
@@ -13655,7 +13625,7 @@ THREE.CanvasRenderer = function ( parameters ) {
 
 				if ( light instanceof THREE.DirectionalLight ) {
 
-					var lightPosition = light.matrixWorld.getPosition().normalize();
+					var lightPosition = _vector3.getPositionFromMatrix( light.matrixWorld ).normalize();
 
 					var amount = normal.dot( lightPosition );
 
@@ -13667,7 +13637,7 @@ THREE.CanvasRenderer = function ( parameters ) {
 
 				} else if ( light instanceof THREE.PointLight ) {
 
-					var lightPosition = light.matrixWorld.getPosition();
+					var lightPosition = _vector3.getPositionFromMatrix( light.matrixWorld );
 
 					var amount = normal.dot( _vector3.subVectors( lightPosition, position ).normalize() );
 
@@ -34891,7 +34861,7 @@ THREE.ShadowMapPlugin = function () {
 			shadowMatrix = light.shadowMatrix;
 			shadowCamera = light.shadowCamera;
 
-			shadowCamera.position.copy( light.matrixWorld.getPosition() );
+			shadowCamera.position.getPositionFromMatrix( light.matrixWorld );
 			shadowCamera.lookAt( light.target.matrixWorld.getPosition() );
 			shadowCamera.updateMatrixWorld();
 

+ 66 - 67
build/three.min.js

@@ -82,19 +82,18 @@ return a.applyProjection(this)},multiplyVector4:function(a){console.warn("DEPREC
 c*b[1]+d*b[5]+e*b[9];a.z=c*b[2]+d*b[6]+e*b[10];a.normalize();return a},crossVector:function(a){var b=this.elements,c=new THREE.Vector4;c.x=b[0]*a.x+b[4]*a.y+b[8]*a.z+b[12]*a.w;c.y=b[1]*a.x+b[5]*a.y+b[9]*a.z+b[13]*a.w;c.z=b[2]*a.x+b[6]*a.y+b[10]*a.z+b[14]*a.w;c.w=a.w?b[3]*a.x+b[7]*a.y+b[11]*a.z+b[15]*a.w:1;return c},determinant:function(){var a=this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],i=a[13],k=a[2],l=a[6],n=a[10],m=a[14];return a[3]*(+e*h*l-d*i*l-e*g*n+c*i*n+d*g*m-c*h*m)+a[7]*
 (+b*h*m-b*i*n+e*f*n-d*f*m+d*i*k-e*h*k)+a[11]*(+b*i*l-b*g*m-e*f*l+c*f*m+e*g*k-c*i*k)+a[15]*(-d*g*k-b*h*l+b*g*n+d*f*l-c*f*n+c*h*k)},transpose:function(){var a=this.elements,b;b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},flattenToArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];a[6]=b[6];a[7]=b[7];a[8]=b[8];a[9]=b[9];a[10]=b[10];a[11]=
 b[11];a[12]=b[12];a[13]=b[13];a[14]=b[14];a[15]=b[15];return a},flattenToArrayOffset:function(a,b){var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a},getPosition:function(){var a=new THREE.Vector3;return function(){var b=this.elements;return a.set(b[12],b[13],b[14])}}(),setPosition:function(a){var b=this.elements;b[12]=
-a.x;b[13]=a.y;b[14]=a.z;return this},getColumnX:function(){var a=new THREE.Vector3;return function(){var b=this.elements;return a.set(b[0],b[1],b[2])}}(),getColumnY:function(){var a=new THREE.Vector3;return function(){var b=this.elements;return a.set(b[4],b[5],b[6])}}(),getColumnZ:function(){var a=new THREE.Vector3;return function(){var b=this.elements;return a.set(b[8],b[9],b[10])}}(),getInverse:function(a,b){var c=this.elements,d=a.elements,e=d[0],f=d[4],g=d[8],h=d[12],i=d[1],k=d[5],l=d[9],n=d[13],
-m=d[2],s=d[6],q=d[10],r=d[14],p=d[3],t=d[7],x=d[11],w=d[15];c[0]=l*r*t-n*q*t+n*s*x-k*r*x-l*s*w+k*q*w;c[4]=h*q*t-g*r*t-h*s*x+f*r*x+g*s*w-f*q*w;c[8]=g*n*t-h*l*t+h*k*x-f*n*x-g*k*w+f*l*w;c[12]=h*l*s-g*n*s-h*k*q+f*n*q+g*k*r-f*l*r;c[1]=n*q*p-l*r*p-n*m*x+i*r*x+l*m*w-i*q*w;c[5]=g*r*p-h*q*p+h*m*x-e*r*x-g*m*w+e*q*w;c[9]=h*l*p-g*n*p-h*i*x+e*n*x+g*i*w-e*l*w;c[13]=g*n*m-h*l*m+h*i*q-e*n*q-g*i*r+e*l*r;c[2]=k*r*p-n*s*p+n*m*t-i*r*t-k*m*w+i*s*w;c[6]=h*s*p-f*r*p-h*m*t+e*r*t+f*m*w-e*s*w;c[10]=f*n*p-h*k*p+h*i*t-e*n*t-
-f*i*w+e*k*w;c[14]=h*k*m-f*n*m-h*i*s+e*n*s+f*i*r-e*k*r;c[3]=l*s*p-k*q*p-l*m*t+i*q*t+k*m*x-i*s*x;c[7]=f*q*p-g*s*p+g*m*t-e*q*t-f*m*x+e*s*x;c[11]=g*k*p-f*l*p-g*i*t+e*l*t+f*i*x-e*k*x;c[15]=f*l*m-g*k*m+g*i*s-e*l*s-f*i*q+e*k*q;c=d[0]*c[0]+d[1]*c[4]+d[2]*c[8]+d[3]*c[12];if(0==c){if(b)throw Error("Matrix4.getInverse(): can't invert matrix, determinant is 0");console.warn("Matrix4.getInverse(): can't invert matrix, determinant is 0");this.identity();return this}this.multiplyScalar(1/c);return this},compose:function(){var a=
-new THREE.Matrix4,b=new THREE.Matrix4;return function(c,d,e){var f=this.elements;a.identity();a.setRotationFromQuaternion(d);b.makeScale(e.x,e.y,e.z);this.multiplyMatrices(a,b);f[12]=c.x;f[13]=c.y;f[14]=c.z;return this}}(),decompose:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Matrix4;return function(e,f,g){var h=this.elements;a.set(h[0],h[1],h[2]);b.set(h[4],h[5],h[6]);c.set(h[8],h[9],h[10]);e=e instanceof THREE.Vector3?e:new THREE.Vector3;f=f instanceof
-THREE.Quaternion?f:new THREE.Quaternion;g=g instanceof THREE.Vector3?g:new THREE.Vector3;g.x=a.length();g.y=b.length();g.z=c.length();e.x=h[12];e.y=h[13];e.z=h[14];d.copy(this);d.elements[0]/=g.x;d.elements[1]/=g.x;d.elements[2]/=g.x;d.elements[4]/=g.y;d.elements[5]/=g.y;d.elements[6]/=g.y;d.elements[8]/=g.z;d.elements[9]/=g.z;d.elements[10]/=g.z;f.setFromRotationMatrix(d);return[e,f,g]}}(),extractPosition:function(a){var b=this.elements,a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},
-extractRotation:function(){var a=new THREE.Vector3;return function(b){var c=this.elements,b=b.elements,d=1/a.set(b[0],b[1],b[2]).length(),e=1/a.set(b[4],b[5],b[6]).length(),f=1/a.set(b[8],b[9],b[10]).length();c[0]=b[0]*d;c[1]=b[1]*d;c[2]=b[2]*d;c[4]=b[4]*e;c[5]=b[5]*e;c[6]=b[6]*e;c[8]=b[8]*f;c[9]=b[9]*f;c[10]=b[10]*f;return this}}(),translate:function(a){var b=this.elements,c=a.x,d=a.y,a=a.z;b[12]=b[0]*c+b[4]*d+b[8]*a+b[12];b[13]=b[1]*c+b[5]*d+b[9]*a+b[13];b[14]=b[2]*c+b[6]*d+b[10]*a+b[14];b[15]=
-b[3]*c+b[7]*d+b[11]*a+b[15];return this},rotateX:function(a){var b=this.elements,c=b[4],d=b[5],e=b[6],f=b[7],g=b[8],h=b[9],i=b[10],k=b[11],l=Math.cos(a),a=Math.sin(a);b[4]=l*c+a*g;b[5]=l*d+a*h;b[6]=l*e+a*i;b[7]=l*f+a*k;b[8]=l*g-a*c;b[9]=l*h-a*d;b[10]=l*i-a*e;b[11]=l*k-a*f;return this},rotateY:function(a){var b=this.elements,c=b[0],d=b[1],e=b[2],f=b[3],g=b[8],h=b[9],i=b[10],k=b[11],l=Math.cos(a),a=Math.sin(a);b[0]=l*c-a*g;b[1]=l*d-a*h;b[2]=l*e-a*i;b[3]=l*f-a*k;b[8]=l*g+a*c;b[9]=l*h+a*d;b[10]=l*i+a*
-e;b[11]=l*k+a*f;return this},rotateZ:function(a){var b=this.elements,c=b[0],d=b[1],e=b[2],f=b[3],g=b[4],h=b[5],i=b[6],k=b[7],l=Math.cos(a),a=Math.sin(a);b[0]=l*c+a*g;b[1]=l*d+a*h;b[2]=l*e+a*i;b[3]=l*f+a*k;b[4]=l*g-a*c;b[5]=l*h-a*d;b[6]=l*i-a*e;b[7]=l*k-a*f;return this},rotateByAxis:function(a,b){var c=this.elements;if(1===a.x&&0===a.y&&0===a.z)return this.rotateX(b);if(0===a.x&&1===a.y&&0===a.z)return this.rotateY(b);if(0===a.x&&0===a.y&&1===a.z)return this.rotateZ(b);var d=a.x,e=a.y,f=a.z,g=Math.sqrt(d*
-d+e*e+f*f),d=d/g,e=e/g,f=f/g,g=d*d,h=e*e,i=f*f,k=Math.cos(b),l=Math.sin(b),n=1-k,m=d*e*n,s=d*f*n,n=e*f*n,d=d*l,q=e*l,l=f*l,f=g+(1-g)*k,g=m+l,e=s-q,m=m-l,h=h+(1-h)*k,l=n+d,s=s+q,n=n-d,i=i+(1-i)*k,k=c[0],d=c[1],q=c[2],r=c[3],p=c[4],t=c[5],x=c[6],w=c[7],v=c[8],H=c[9],F=c[10],A=c[11];c[0]=f*k+g*p+e*v;c[1]=f*d+g*t+e*H;c[2]=f*q+g*x+e*F;c[3]=f*r+g*w+e*A;c[4]=m*k+h*p+l*v;c[5]=m*d+h*t+l*H;c[6]=m*q+h*x+l*F;c[7]=m*r+h*w+l*A;c[8]=s*k+n*p+i*v;c[9]=s*d+n*t+i*H;c[10]=s*q+n*x+i*F;c[11]=s*r+n*w+i*A;return this},scale:function(a){var b=
-this.elements,c=a.x,d=a.y,a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],Math.max(a[4]*a[4]+a[5]*a[5]+a[6]*a[6],a[8]*a[8]+a[9]*a[9]+a[10]*a[10])))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},makeRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,
-0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,f=a.x,g=a.y,h=a.z,i=e*f,k=e*g;this.set(i*f+c,i*g-d*h,i*h+d*g,0,i*g+d*h,k*g+c,k*h-d*f,0,i*h-d*g,k*h+d*f,e*h*h+c,0,0,0,0,1);return this},makeScale:function(a,b,c){this.set(a,0,0,0,0,b,
-0,0,0,0,c,0,0,0,0,1);return this},makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){var a=c*Math.tan(THREE.Math.degToRad(0.5*a)),e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=b-a,i=c-d,k=f-e;g[0]=2/h;g[4]=0;g[8]=
-0;g[12]=-((b+a)/h);g[1]=0;g[5]=2/i;g[9]=0;g[13]=-((c+d)/i);g[2]=0;g[6]=0;g[10]=-2/k;g[14]=-((f+e)/k);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},clone:function(){var a=this.elements;return new THREE.Matrix4(a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15])}});THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3};
+a.x;b[13]=a.y;b[14]=a.z;return this},getInverse:function(a,b){var c=this.elements,d=a.elements,e=d[0],f=d[4],g=d[8],h=d[12],i=d[1],k=d[5],l=d[9],n=d[13],m=d[2],s=d[6],q=d[10],r=d[14],p=d[3],t=d[7],x=d[11],w=d[15];c[0]=l*r*t-n*q*t+n*s*x-k*r*x-l*s*w+k*q*w;c[4]=h*q*t-g*r*t-h*s*x+f*r*x+g*s*w-f*q*w;c[8]=g*n*t-h*l*t+h*k*x-f*n*x-g*k*w+f*l*w;c[12]=h*l*s-g*n*s-h*k*q+f*n*q+g*k*r-f*l*r;c[1]=n*q*p-l*r*p-n*m*x+i*r*x+l*m*w-i*q*w;c[5]=g*r*p-h*q*p+h*m*x-e*r*x-g*m*w+e*q*w;c[9]=h*l*p-g*n*p-h*i*x+e*n*x+g*i*w-e*l*w;
+c[13]=g*n*m-h*l*m+h*i*q-e*n*q-g*i*r+e*l*r;c[2]=k*r*p-n*s*p+n*m*t-i*r*t-k*m*w+i*s*w;c[6]=h*s*p-f*r*p-h*m*t+e*r*t+f*m*w-e*s*w;c[10]=f*n*p-h*k*p+h*i*t-e*n*t-f*i*w+e*k*w;c[14]=h*k*m-f*n*m-h*i*s+e*n*s+f*i*r-e*k*r;c[3]=l*s*p-k*q*p-l*m*t+i*q*t+k*m*x-i*s*x;c[7]=f*q*p-g*s*p+g*m*t-e*q*t-f*m*x+e*s*x;c[11]=g*k*p-f*l*p-g*i*t+e*l*t+f*i*x-e*k*x;c[15]=f*l*m-g*k*m+g*i*s-e*l*s-f*i*q+e*k*q;c=d[0]*c[0]+d[1]*c[4]+d[2]*c[8]+d[3]*c[12];if(0==c){if(b)throw Error("Matrix4.getInverse(): can't invert matrix, determinant is 0");
+console.warn("Matrix4.getInverse(): can't invert matrix, determinant is 0");this.identity();return this}this.multiplyScalar(1/c);return this},compose:function(){var a=new THREE.Matrix4,b=new THREE.Matrix4;return function(c,d,e){var f=this.elements;a.identity();a.setRotationFromQuaternion(d);b.makeScale(e.x,e.y,e.z);this.multiplyMatrices(a,b);f[12]=c.x;f[13]=c.y;f[14]=c.z;return this}}(),decompose:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Matrix4;return function(e,
+f,g){var h=this.elements;a.set(h[0],h[1],h[2]);b.set(h[4],h[5],h[6]);c.set(h[8],h[9],h[10]);e=e instanceof THREE.Vector3?e:new THREE.Vector3;f=f instanceof THREE.Quaternion?f:new THREE.Quaternion;g=g instanceof THREE.Vector3?g:new THREE.Vector3;g.x=a.length();g.y=b.length();g.z=c.length();e.x=h[12];e.y=h[13];e.z=h[14];d.copy(this);d.elements[0]/=g.x;d.elements[1]/=g.x;d.elements[2]/=g.x;d.elements[4]/=g.y;d.elements[5]/=g.y;d.elements[6]/=g.y;d.elements[8]/=g.z;d.elements[9]/=g.z;d.elements[10]/=
+g.z;f.setFromRotationMatrix(d);return[e,f,g]}}(),extractPosition:function(a){var b=this.elements,a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractRotation:function(){var a=new THREE.Vector3;return function(b){var c=this.elements,b=b.elements,d=1/a.set(b[0],b[1],b[2]).length(),e=1/a.set(b[4],b[5],b[6]).length(),f=1/a.set(b[8],b[9],b[10]).length();c[0]=b[0]*d;c[1]=b[1]*d;c[2]=b[2]*d;c[4]=b[4]*e;c[5]=b[5]*e;c[6]=b[6]*e;c[8]=b[8]*f;c[9]=b[9]*f;c[10]=b[10]*f;return this}}(),translate:function(a){var b=
+this.elements,c=a.x,d=a.y,a=a.z;b[12]=b[0]*c+b[4]*d+b[8]*a+b[12];b[13]=b[1]*c+b[5]*d+b[9]*a+b[13];b[14]=b[2]*c+b[6]*d+b[10]*a+b[14];b[15]=b[3]*c+b[7]*d+b[11]*a+b[15];return this},rotateX:function(a){var b=this.elements,c=b[4],d=b[5],e=b[6],f=b[7],g=b[8],h=b[9],i=b[10],k=b[11],l=Math.cos(a),a=Math.sin(a);b[4]=l*c+a*g;b[5]=l*d+a*h;b[6]=l*e+a*i;b[7]=l*f+a*k;b[8]=l*g-a*c;b[9]=l*h-a*d;b[10]=l*i-a*e;b[11]=l*k-a*f;return this},rotateY:function(a){var b=this.elements,c=b[0],d=b[1],e=b[2],f=b[3],g=b[8],h=
+b[9],i=b[10],k=b[11],l=Math.cos(a),a=Math.sin(a);b[0]=l*c-a*g;b[1]=l*d-a*h;b[2]=l*e-a*i;b[3]=l*f-a*k;b[8]=l*g+a*c;b[9]=l*h+a*d;b[10]=l*i+a*e;b[11]=l*k+a*f;return this},rotateZ:function(a){var b=this.elements,c=b[0],d=b[1],e=b[2],f=b[3],g=b[4],h=b[5],i=b[6],k=b[7],l=Math.cos(a),a=Math.sin(a);b[0]=l*c+a*g;b[1]=l*d+a*h;b[2]=l*e+a*i;b[3]=l*f+a*k;b[4]=l*g-a*c;b[5]=l*h-a*d;b[6]=l*i-a*e;b[7]=l*k-a*f;return this},rotateByAxis:function(a,b){var c=this.elements;if(1===a.x&&0===a.y&&0===a.z)return this.rotateX(b);
+if(0===a.x&&1===a.y&&0===a.z)return this.rotateY(b);if(0===a.x&&0===a.y&&1===a.z)return this.rotateZ(b);var d=a.x,e=a.y,f=a.z,g=Math.sqrt(d*d+e*e+f*f),d=d/g,e=e/g,f=f/g,g=d*d,h=e*e,i=f*f,k=Math.cos(b),l=Math.sin(b),n=1-k,m=d*e*n,s=d*f*n,n=e*f*n,d=d*l,q=e*l,l=f*l,f=g+(1-g)*k,g=m+l,e=s-q,m=m-l,h=h+(1-h)*k,l=n+d,s=s+q,n=n-d,i=i+(1-i)*k,k=c[0],d=c[1],q=c[2],r=c[3],p=c[4],t=c[5],x=c[6],w=c[7],v=c[8],H=c[9],F=c[10],A=c[11];c[0]=f*k+g*p+e*v;c[1]=f*d+g*t+e*H;c[2]=f*q+g*x+e*F;c[3]=f*r+g*w+e*A;c[4]=m*k+h*p+
+l*v;c[5]=m*d+h*t+l*H;c[6]=m*q+h*x+l*F;c[7]=m*r+h*w+l*A;c[8]=s*k+n*p+i*v;c[9]=s*d+n*t+i*H;c[10]=s*q+n*x+i*F;c[11]=s*r+n*w+i*A;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y,a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],Math.max(a[4]*a[4]+a[5]*a[5]+a[6]*a[6],a[8]*a[8]+a[9]*a[9]+a[10]*a[10])))},makeTranslation:function(a,
+b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},makeRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,f=a.x,g=a.y,h=a.z,i=e*f,k=e*g;
+this.set(i*f+c,i*g-d*h,i*h+d*g,0,i*g+d*h,k*g+c,k*h-d*f,0,i*h-d*g,k*h+d*f,e*h*h+c,0,0,0,0,1);return this},makeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){var a=c*Math.tan(THREE.Math.degToRad(0.5*
+a)),e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=b-a,i=c-d,k=f-e;g[0]=2/h;g[4]=0;g[8]=0;g[12]=-((b+a)/h);g[1]=0;g[5]=2/i;g[9]=0;g[13]=-((c+d)/i);g[2]=0;g[6]=0;g[10]=-2/k;g[14]=-((f+e)/k);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},clone:function(){var a=this.elements;return new THREE.Matrix4(a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15])}});THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3};
 THREE.extend(THREE.Ray.prototype,{set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).add(this.origin)},recast:function(){var a=new THREE.Vector3;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.subVectors(a,this.origin);var d=
 c.dot(this.direction);return c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceTo(b)}}(),isIntersectionSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},isIntersectionPlane:function(a){return 0!=a.normal.dot(this.direction)||0==a.distanceToPoint(this.origin)?!0:!1},distanceToPlane:function(a){var b=
 a.normal.dot(this.direction);if(0==b){if(0==a.distanceToPoint(this.origin))return 0}else return-(this.origin.dot(a.normal)+a.constant)/b},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return void 0===c?void 0:this.at(c,b)},transform:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)},clone:function(){return(new THREE.Ray).copy(this)}});THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0};
@@ -102,8 +101,8 @@ THREE.extend(THREE.Sphere.prototype,{set:function(a,b){this.center.copy(a);this.
 this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},transform:function(a){this.center.applyMatrix4(a);
 this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius},clone:function(){return(new THREE.Sphere).copy(this)}});THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]};
 THREE.extend(THREE.Frustum.prototype,{set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements,a=c[0],d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],i=c[6],k=c[7],l=c[8],n=c[9],m=c[10],s=c[11],q=c[12],r=c[13],p=c[14],c=c[15];b[0].setComponents(f-a,k-g,s-l,c-q).normalize();b[1].setComponents(f+
-a,k+g,s+l,c+q).normalize();b[2].setComponents(f+d,k+h,s+n,c+r).normalize();b[3].setComponents(f-d,k-h,s-n,c-r).normalize();b[4].setComponents(f-e,k-i,s-m,c-p).normalize();b[5].setComponents(f+e,k+i,s+m,c+p).normalize();return this},intersectsObject:function(a){for(var b=a.matrixWorld,c=this.planes,d=b.getPosition(),a=-a.geometry.boundingSphere.radius*b.getMaxScaleOnAxis(),b=0;6>b;b++)if(c[b].distanceToPoint(d)<a)return!1;return!0},intersectsSphere:function(a){for(var b=this.planes,c=a.center,a=-a.radius,
-d=0;6>d;d++)if(b[d].distanceToPoint(c)<a)return!1;return!0},containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0},clone:function(){return(new THREE.Frustum).copy(this)}});THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0};
+a,k+g,s+l,c+q).normalize();b[2].setComponents(f+d,k+h,s+n,c+r).normalize();b[3].setComponents(f-d,k-h,s-n,c-r).normalize();b[4].setComponents(f-e,k-i,s-m,c-p).normalize();b[5].setComponents(f+e,k+i,s+m,c+p).normalize();return this},intersectsObject:function(){var a=new THREE.Vector3;return function(b){var c=b.matrixWorld,d=this.planes,b=-b.geometry.boundingSphere.radius*c.getMaxScaleOnAxis();a.getPositionFromMatrix(c);for(c=0;6>c;c++)if(d[c].distanceToPoint(a)<b)return!1;return!0}}(),intersectsSphere:function(a){for(var b=
+this.planes,c=a.center,a=-a.radius,d=0;6>d;d++)if(b[d].distanceToPoint(c)<a)return!1;return!0},containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0},clone:function(){return(new THREE.Frustum).copy(this)}});THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0};
 THREE.extend(THREE.Plane.prototype,{set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),
 copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,
 b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},isIntersectionLine:function(a,b){var c=this.distanceToPoint(a),d=this.distanceToPoint(b);return 0>c&&0<d||0>d&&0<c},intersectLine:function(){var a=new THREE.Vector3;return function(b,c,d){var d=d||new THREE.Vector3,c=a.subVectors(c,b),e=this.normal.dot(c);if(0==e){if(0==this.distanceToPoint(b))return d.copy(b)}else return e=-(b.dot(this.normal)+this.constant)/e,0>e||1<e?void 0:d.copy(c).multiplyScalar(e).add(b)}}(),
@@ -134,14 +133,14 @@ a.matrixAutoUpdate=this.matrixAutoUpdate;a.matrixWorldNeedsUpdate=this.matrixWor
 c)return!1;a.lerp(b,c);b.lerp(a,1-d);return!0}var e,f,g=[],h=0,i,k,l=[],n=0,m,s,q=[],r=0,p,t=[],x=0,w,v,H=[],F=0,A,z,K=[],I=0,E={objects:[],sprites:[],lights:[],elements:[]},V=new THREE.Vector3,B=new THREE.Vector4,T=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),C=new THREE.Box3,G=Array(3),M=Array(4),W=new THREE.Matrix4,ua=new THREE.Matrix4,Ha,oa=new THREE.Matrix4,J=new THREE.Matrix3,da=new THREE.Matrix3,ka=new THREE.Vector3,Y=new THREE.Frustum,L=new THREE.Vector4,va=new THREE.Vector4;
 this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);ua.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);return a.applyProjection(ua)};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);ua.multiplyMatrices(b.matrixWorld,b.projectionMatrixInverse);return a.applyProjection(ua)};this.pickingRay=function(a,b){a.z=-1;var c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.sub(a).normalize();return new THREE.Raycaster(a,
 c)};this.projectScene=function(g,h,n,ta){var Ma=!1,ga,ja,ma,X,ha,ra,fa,Da,Ya,Za,ia,Qa,Ta;z=v=p=s=0;E.elements.length=0;g.updateMatrixWorld();void 0===h.parent&&h.updateMatrixWorld();W.copy(h.matrixWorldInverse.getInverse(h.matrixWorld));ua.multiplyMatrices(h.projectionMatrix,W);da.getInverse(W);da.transpose();Y.setFromMatrix(ua);f=0;E.objects.length=0;E.sprites.length=0;E.lights.length=0;var Ra=function(b){for(var c=0,d=b.children.length;c<d;c++){var f=b.children[c];if(!1!==f.visible){if(f instanceof
-THREE.Light)E.lights.push(f);else if(f instanceof THREE.Mesh||f instanceof THREE.Line){if(!1===f.frustumCulled||!0===Y.intersectsObject(f))e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(V.copy(f.matrixWorld.getPosition()),V.applyProjection(ua),e.z=V.z),E.objects.push(e)}else f instanceof THREE.Sprite||f instanceof THREE.Particle?(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(V.copy(f.matrixWorld.getPosition()),V.applyProjection(ua),e.z=V.z),E.sprites.push(e)):(e=a(),e.object=
-f,null!==f.renderDepth?e.z=f.renderDepth:(V.copy(f.matrixWorld.getPosition()),V.applyProjection(ua),e.z=V.z),E.objects.push(e));Ra(f)}}};Ra(g);!0===n&&E.objects.sort(c);g=0;for(n=E.objects.length;g<n;g++)if(Da=E.objects[g].object,Ha=Da.matrixWorld,k=0,Da instanceof THREE.Mesh){Ya=Da.geometry;ma=Ya.vertices;Za=Ya.faces;Ya=Ya.faceVertexUvs;J.getInverse(Ha);J.transpose();Qa=Da.material instanceof THREE.MeshFaceMaterial;Ta=!0===Qa?Da.material:null;ga=0;for(ja=ma.length;ga<ja;ga++)i=b(),i.positionWorld.copy(ma[ga]).applyMatrix4(Ha),
-i.positionScreen.copy(i.positionWorld).applyMatrix4(ua),i.positionScreen.x/=i.positionScreen.w,i.positionScreen.y/=i.positionScreen.w,i.positionScreen.z/=i.positionScreen.w,i.visible=!(-1>i.positionScreen.x||1<i.positionScreen.x||-1>i.positionScreen.y||1<i.positionScreen.y||-1>i.positionScreen.z||1<i.positionScreen.z);ma=0;for(ga=Za.length;ma<ga;ma++){ja=Za[ma];var db=!0===Qa?Ta.materials[ja.materialIndex]:Da.material;if(void 0!==db){ra=db.side;if(ja instanceof THREE.Face3)if(X=l[ja.a],ha=l[ja.b],
+THREE.Light)E.lights.push(f);else if(f instanceof THREE.Mesh||f instanceof THREE.Line){if(!1===f.frustumCulled||!0===Y.intersectsObject(f))e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(V.getPositionFromMatrix(f.matrixWorld),V.applyProjection(ua),e.z=V.z),E.objects.push(e)}else f instanceof THREE.Sprite||f instanceof THREE.Particle?(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(V.getPositionFromMatrix(f.matrixWorld),V.applyProjection(ua),e.z=V.z),E.sprites.push(e)):(e=a(),e.object=
+f,null!==f.renderDepth?e.z=f.renderDepth:(V.getPositionFromMatrix(f.matrixWorld),V.applyProjection(ua),e.z=V.z),E.objects.push(e));Ra(f)}}};Ra(g);!0===n&&E.objects.sort(c);g=0;for(n=E.objects.length;g<n;g++)if(Da=E.objects[g].object,Ha=Da.matrixWorld,k=0,Da instanceof THREE.Mesh){Ya=Da.geometry;ma=Ya.vertices;Za=Ya.faces;Ya=Ya.faceVertexUvs;J.getInverse(Ha);J.transpose();Qa=Da.material instanceof THREE.MeshFaceMaterial;Ta=!0===Qa?Da.material:null;ga=0;for(ja=ma.length;ga<ja;ga++)i=b(),i.positionWorld.copy(ma[ga]).applyMatrix4(Ha),
+i.positionScreen.copy(i.positionWorld).applyMatrix4(ua),i.positionScreen.x/=i.positionScreen.w,i.positionScreen.y/=i.positionScreen.w,i.positionScreen.z/=i.positionScreen.w,i.visible=!(-1>i.positionScreen.x||1<i.positionScreen.x||-1>i.positionScreen.y||1<i.positionScreen.y||-1>i.positionScreen.z||1<i.positionScreen.z);ma=0;for(ga=Za.length;ma<ga;ma++){ja=Za[ma];var eb=!0===Qa?Ta.materials[ja.materialIndex]:Da.material;if(void 0!==eb){ra=eb.side;if(ja instanceof THREE.Face3)if(X=l[ja.a],ha=l[ja.b],
 fa=l[ja.c],G[0]=X.positionScreen,G[1]=ha.positionScreen,G[2]=fa.positionScreen,!0===X.visible||!0===ha.visible||!0===fa.visible||T.isIntersectionBox(C.setFromPoints(G)))if(Ma=0>(fa.positionScreen.x-X.positionScreen.x)*(ha.positionScreen.y-X.positionScreen.y)-(fa.positionScreen.y-X.positionScreen.y)*(ha.positionScreen.x-X.positionScreen.x),ra===THREE.DoubleSide||Ma===(ra===THREE.FrontSide))s===r?(ia=new THREE.RenderableFace3,q.push(ia),r++,s++,m=ia):m=q[s++],m.v1.copy(X),m.v2.copy(ha),m.v3.copy(fa);
 else continue;else continue;else if(ja instanceof THREE.Face4)if(X=l[ja.a],ha=l[ja.b],fa=l[ja.c],ia=l[ja.d],M[0]=X.positionScreen,M[1]=ha.positionScreen,M[2]=fa.positionScreen,M[3]=ia.positionScreen,!0===X.visible||!0===ha.visible||!0===fa.visible||!0===ia.visible||T.isIntersectionBox(C.setFromPoints(M)))if(Ma=0>(ia.positionScreen.x-X.positionScreen.x)*(ha.positionScreen.y-X.positionScreen.y)-(ia.positionScreen.y-X.positionScreen.y)*(ha.positionScreen.x-X.positionScreen.x)||0>(ha.positionScreen.x-
 fa.positionScreen.x)*(ia.positionScreen.y-fa.positionScreen.y)-(ha.positionScreen.y-fa.positionScreen.y)*(ia.positionScreen.x-fa.positionScreen.x),ra===THREE.DoubleSide||Ma===(ra===THREE.FrontSide)){if(p===x){var ob=new THREE.RenderableFace4;t.push(ob);x++;p++;m=ob}else m=t[p++];m.v1.copy(X);m.v2.copy(ha);m.v3.copy(fa);m.v4.copy(ia)}else continue;else continue;m.normalModel.copy(ja.normal);!1===Ma&&(ra===THREE.BackSide||ra===THREE.DoubleSide)&&m.normalModel.negate();m.normalModel.applyMatrix3(J).normalize();
 m.normalModelView.copy(m.normalModel).applyMatrix3(da);m.centroidModel.copy(ja.centroid).applyMatrix4(Ha);fa=ja.vertexNormals;X=0;for(ha=fa.length;X<ha;X++)ia=m.vertexNormalsModel[X],ia.copy(fa[X]),!1===Ma&&(ra===THREE.BackSide||ra===THREE.DoubleSide)&&ia.negate(),ia.applyMatrix3(J).normalize(),m.vertexNormalsModelView[X].copy(ia).applyMatrix3(da);m.vertexNormalsLength=fa.length;X=0;for(ha=Ya.length;X<ha;X++)if(ia=Ya[X][ma],void 0!==ia){ra=0;for(fa=ia.length;ra<fa;ra++)m.uvs[X][ra]=ia[ra]}m.color=
-ja.color;m.material=db;ka.copy(m.centroidModel).applyProjection(ua);m.z=ka.z;E.elements.push(m)}}}else if(Da instanceof THREE.Line){oa.multiplyMatrices(ua,Ha);ma=Da.geometry.vertices;X=b();X.positionScreen.copy(ma[0]).applyMatrix4(oa);Za=Da.type===THREE.LinePieces?2:1;ga=1;for(ja=ma.length;ga<ja;ga++)X=b(),X.positionScreen.copy(ma[ga]).applyMatrix4(oa),0<(ga+1)%Za||(ha=l[k-2],L.copy(X.positionScreen),va.copy(ha.positionScreen),!0===d(L,va)&&(L.multiplyScalar(1/L.w),va.multiplyScalar(1/va.w),v===F?
+ja.color;m.material=eb;ka.copy(m.centroidModel).applyProjection(ua);m.z=ka.z;E.elements.push(m)}}}else if(Da instanceof THREE.Line){oa.multiplyMatrices(ua,Ha);ma=Da.geometry.vertices;X=b();X.positionScreen.copy(ma[0]).applyMatrix4(oa);Za=Da.type===THREE.LinePieces?2:1;ga=1;for(ja=ma.length;ga<ja;ga++)X=b(),X.positionScreen.copy(ma[ga]).applyMatrix4(oa),0<(ga+1)%Za||(ha=l[k-2],L.copy(X.positionScreen),va.copy(ha.positionScreen),!0===d(L,va)&&(L.multiplyScalar(1/L.w),va.multiplyScalar(1/va.w),v===F?
 (Ya=new THREE.RenderableLine,H.push(Ya),F++,v++,w=Ya):w=H[v++],w.v1.positionScreen.copy(L),w.v2.positionScreen.copy(va),w.z=Math.max(L.z,va.z),w.material=Da.material,E.elements.push(w)))}g=0;for(n=E.sprites.length;g<n;g++)Da=E.sprites[g].object,Ha=Da.matrixWorld,Da instanceof THREE.Particle&&(B.set(Ha.elements[12],Ha.elements[13],Ha.elements[14],1),B.applyMatrix4(ua),B.z/=B.w,0<B.z&&1>B.z&&(z===I?(Ma=new THREE.RenderableParticle,K.push(Ma),I++,z++,A=Ma):A=K[z++],A.object=Da,A.x=B.x/B.w,A.y=B.y/B.w,
 A.z=B.z,A.rotation=Da.rotation.z,A.scale.x=Da.scale.x*Math.abs(A.x-(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])),A.scale.y=Da.scale.y*Math.abs(A.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),A.material=Da.material,E.elements.push(A)));!0===ta&&E.elements.sort(c);return E}};THREE.Face3=function(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=void 0!==f?f:0;this.centroid=new THREE.Vector3};
 THREE.Face3.prototype={constructor:THREE.Face3,clone:function(){var a=new THREE.Face3(this.a,this.b,this.c);a.normal.copy(this.normal);a.color.copy(this.color);a.centroid.copy(this.centroid);a.materialIndex=this.materialIndex;var b,c;b=0;for(c=this.vertexNormals.length;b<c;b++)a.vertexNormals[b]=this.vertexNormals[b].clone();b=0;for(c=this.vertexColors.length;b<c;b++)a.vertexColors[b]=this.vertexColors[b].clone();b=0;for(c=this.vertexTangents.length;b<c;b++)a.vertexTangents[b]=this.vertexTangents[b].clone();
@@ -261,35 +260,35 @@ THREE.Sprite.prototype.clone=function(a){void 0===a&&(a=new THREE.Sprite(this.ma
 THREE.Scene.prototype.__addObject=function(a){if(a instanceof THREE.Light)-1===this.__lights.indexOf(a)&&this.__lights.push(a),a.target&&void 0===a.target.parent&&this.add(a.target);else if(!(a instanceof THREE.Camera||a instanceof THREE.Bone)&&-1===this.__objects.indexOf(a)){this.__objects.push(a);this.__objectsAdded.push(a);var b=this.__objectsRemoved.indexOf(a);-1!==b&&this.__objectsRemoved.splice(b,1)}for(b=0;b<a.children.length;b++)this.__addObject(a.children[b])};
 THREE.Scene.prototype.__removeObject=function(a){if(a instanceof THREE.Light){var b=this.__lights.indexOf(a);-1!==b&&this.__lights.splice(b,1)}else a instanceof THREE.Camera||(b=this.__objects.indexOf(a),-1!==b&&(this.__objects.splice(b,1),this.__objectsRemoved.push(a),b=this.__objectsAdded.indexOf(a),-1!==b&&this.__objectsAdded.splice(b,1)));for(b=0;b<a.children.length;b++)this.__removeObject(a.children[b])};THREE.Fog=function(a,b,c){this.name="";this.color=new THREE.Color(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3};THREE.Fog.prototype.clone=function(){return new THREE.Fog(this.color.getHex(),this.near,this.far)};THREE.FogExp2=function(a,b){this.name="";this.color=new THREE.Color(a);this.density=void 0!==b?b:2.5E-4};THREE.FogExp2.prototype.clone=function(){return new THREE.FogExp2(this.color.getHex(),this.density)};THREE.CanvasRenderer=function(a){function b(a){F!==a&&(F=w.globalAlpha=a)}function c(a){A!==a&&(a===THREE.NormalBlending?w.globalCompositeOperation="source-over":a===THREE.AdditiveBlending?w.globalCompositeOperation="lighter":a===THREE.SubtractiveBlending&&(w.globalCompositeOperation="darker"),A=a)}function d(a){I!==a&&(I=w.lineWidth=a)}function e(a){E!==a&&(E=w.lineCap=a)}function f(a){V!==a&&(V=w.lineJoin=a)}function g(a){z!==a&&(z=w.strokeStyle=a)}function h(a){K!==a&&(K=w.fillStyle=a)}function i(a,
 b){if(B!==a||T!==b)w.setLineDash([a,b]),B=a,T=b}console.log("THREE.CanvasRenderer",THREE.REVISION);var a=a||{},k=this,l,n,m,s=new THREE.Projector,q=void 0!==a.canvas?a.canvas:document.createElement("canvas"),r,p,t,x,w=q.getContext("2d"),v=new THREE.Color(0),H=0,F=1,A=0,z=null,K=null,I=null,E=null,V=null,B=null,T=0,C,G,M,W,ua=new THREE.RenderableVertex,Ha=new THREE.RenderableVertex,oa,J,da,ka,Y,L,va,Xa,lb,Gb,ta,Ma,ga=new THREE.Color,ja=new THREE.Color,ma=new THREE.Color,X=new THREE.Color,ha=new THREE.Color,
-ra=new THREE.Color,fa=new THREE.Color,Da=new THREE.Color,Ya={},Za={},ia,Qa,Ta,Ra,db,ob,Hb,Ib,ec,mc,pb=new THREE.Box2,qa=new THREE.Box2,Ea=new THREE.Box2,fc=!1,ub=new THREE.Color,gc=new THREE.Color,Na=new THREE.Color,hb=new THREE.Vector3,wb,j,xb,$a,nb,Ua,yb=16;wb=document.createElement("canvas");wb.width=wb.height=2;j=wb.getContext("2d");j.fillStyle="rgba(0,0,0,1)";j.fillRect(0,0,2,2);xb=j.getImageData(0,0,2,2);$a=xb.data;nb=document.createElement("canvas");nb.width=nb.height=yb;Ua=nb.getContext("2d");
+ra=new THREE.Color,fa=new THREE.Color,Da=new THREE.Color,Ya={},Za={},ia,Qa,Ta,Ra,eb,ob,Hb,Ib,ec,mc,pb=new THREE.Box2,qa=new THREE.Box2,Ea=new THREE.Box2,fc=!1,ub=new THREE.Color,gc=new THREE.Color,Na=new THREE.Color,$a=new THREE.Vector3,wb,j,xb,ab,nb,Ua,yb=16;wb=document.createElement("canvas");wb.width=wb.height=2;j=wb.getContext("2d");j.fillStyle="rgba(0,0,0,1)";j.fillRect(0,0,2,2);xb=j.getImageData(0,0,2,2);ab=xb.data;nb=document.createElement("canvas");nb.width=nb.height=yb;Ua=nb.getContext("2d");
 Ua.translate(-yb/2,-yb/2);Ua.scale(yb,yb);yb--;void 0===w.setLineDash&&(w.setLineDash=void 0!==w.mozDash?function(a){w.mozDash=null!==a[0]?a:null}:function(){});this.domElement=q;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==window.devicePixelRatio?window.devicePixelRatio:1;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.supportsVertexTextures=function(){};this.setFaceCulling=function(){};this.setSize=function(a,b){r=
 a*this.devicePixelRatio;p=b*this.devicePixelRatio;t=Math.floor(r/2);x=Math.floor(p/2);q.width=r;q.height=p;q.style.width=a+"px";q.style.height=b+"px";pb.set(new THREE.Vector2(-t,-x),new THREE.Vector2(t,x));qa.set(new THREE.Vector2(-t,-x),new THREE.Vector2(t,x));F=1;A=0;V=E=I=K=z=null};this.setClearColor=function(a,b){v.copy(a);H=void 0!==b?b:1;qa.set(new THREE.Vector2(-t,-x),new THREE.Vector2(t,x))};this.setClearColorHex=function(a,b){v.setHex(a);H=void 0!==b?b:1;qa.set(new THREE.Vector2(-t,-x),new THREE.Vector2(t,
 x))};this.getMaxAnisotropy=function(){return 0};this.clear=function(){w.setTransform(1,0,0,-1,t,x);!1===qa.empty()&&(qa.intersect(pb),qa.expandByScalar(2),1>H&&w.clearRect(qa.min.x|0,qa.min.y|0,qa.max.x-qa.min.x|0,qa.max.y-qa.min.y|0),0<H&&(c(THREE.NormalBlending),b(1),h("rgba("+Math.floor(255*v.r)+","+Math.floor(255*v.g)+","+Math.floor(255*v.b)+","+H+")"),w.fillRect(qa.min.x|0,qa.min.y|0,qa.max.x-qa.min.x|0,qa.max.y-qa.min.y|0)),qa.makeEmpty())};this.render=function(a,p){function q(a,b,c){for(var d=
-0,e=m.length;d<e;d++){var f=m[d];Da.copy(f.color);if(f instanceof THREE.DirectionalLight){var g=f.matrixWorld.getPosition().normalize(),j=b.dot(g);0>=j||(j*=f.intensity,c.add(Da.multiplyScalar(j)))}else f instanceof THREE.PointLight&&(g=f.matrixWorld.getPosition(),j=b.dot(hb.subVectors(g,a).normalize()),0>=j||(j*=0==f.distance?1:1-Math.min(a.distanceTo(g)/f.distance,1),0!=j&&(j*=f.intensity,c.add(Da.multiplyScalar(j)))))}}function r(a,d,e,f,g,j,h,i){k.info.render.vertices+=3;k.info.render.faces++;
-b(i.opacity);c(i.blending);oa=a.positionScreen.x;J=a.positionScreen.y;da=d.positionScreen.x;ka=d.positionScreen.y;Y=e.positionScreen.x;L=e.positionScreen.y;v(oa,J,da,ka,Y,L);(i instanceof THREE.MeshLambertMaterial||i instanceof THREE.MeshPhongMaterial)&&null===i.map&&null===i.map?(ra.copy(i.color),fa.copy(i.emissive),i.vertexColors===THREE.FaceColors&&ra.multiply(h.color),!0===fc?!1===i.wireframe&&i.shading==THREE.SmoothShading&&3==h.vertexNormalsLength?(ja.copy(ub),ma.copy(ub),X.copy(ub),q(h.v1.positionWorld,
-h.vertexNormalsModel[0],ja),q(h.v2.positionWorld,h.vertexNormalsModel[1],ma),q(h.v3.positionWorld,h.vertexNormalsModel[2],X),ja.multiply(ra).add(fa),ma.multiply(ra).add(fa),X.multiply(ra).add(fa),ha.addColors(ma,X).multiplyScalar(0.5),Ta=H(ja,ma,X,ha),E(oa,J,da,ka,Y,L,0,0,1,0,0,1,Ta)):(ga.copy(ub),q(h.centroidModel,h.normalModel,ga),ga.multiply(ra).add(fa),!0===i.wireframe?B(ga,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(ga)):!0===i.wireframe?B(i.color,i.wireframeLinewidth,i.wireframeLinecap,
-i.wireframeLinejoin):A(i.color)):i instanceof THREE.MeshBasicMaterial||i instanceof THREE.MeshLambertMaterial||i instanceof THREE.MeshPhongMaterial?null!==i.map?i.map.mapping instanceof THREE.UVMapping&&(Ra=h.uvs[0],F(oa,J,da,ka,Y,L,Ra[f].x,Ra[f].y,Ra[g].x,Ra[g].y,Ra[j].x,Ra[j].y,i.map)):null!==i.envMap?i.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(hb.copy(h.vertexNormalsModelView[f]),db=0.5*hb.x+0.5,ob=0.5*hb.y+0.5,hb.copy(h.vertexNormalsModelView[g]),Hb=0.5*hb.x+0.5,Ib=0.5*hb.y+
-0.5,hb.copy(h.vertexNormalsModelView[j]),ec=0.5*hb.x+0.5,mc=0.5*hb.y+0.5,F(oa,J,da,ka,Y,L,db,ob,Hb,Ib,ec,mc,i.envMap)):(ga.copy(i.color),i.vertexColors===THREE.FaceColors&&ga.multiply(h.color),!0===i.wireframe?B(ga,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(ga)):i instanceof THREE.MeshDepthMaterial?(ia=p.near,Qa=p.far,g=1-K(a.positionScreen.z*a.positionScreen.w,ia,Qa),ja.setRGB(g,g,g),g=1-K(d.positionScreen.z*d.positionScreen.w,ia,Qa),ma.setRGB(g,g,g),g=1-K(e.positionScreen.z*
-e.positionScreen.w,ia,Qa),X.setRGB(g,g,g),ha.addColors(ma,X).multiplyScalar(0.5),Ta=H(ja,ma,X,ha),E(oa,J,da,ka,Y,L,0,0,1,0,0,1,Ta)):i instanceof THREE.MeshNormalMaterial&&(i.shading==THREE.FlatShading?(d=h.normalModelView,ga.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),!0===i.wireframe?B(ga,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(ga)):i.shading==THREE.SmoothShading&&(d=h.vertexNormalsModelView[f],ja.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),d=h.vertexNormalsModelView[g],
-ma.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),d=h.vertexNormalsModelView[j],X.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),ha.addColors(ma,X).multiplyScalar(0.5),Ta=H(ja,ma,X,ha),E(oa,J,da,ka,Y,L,0,0,1,0,0,1,Ta)))}function v(a,b,c,d,e,f){w.beginPath();w.moveTo(a,b);w.lineTo(c,d);w.lineTo(e,f);w.closePath()}function z(a,b,c,d,e,f,g,j){w.beginPath();w.moveTo(a,b);w.lineTo(c,d);w.lineTo(e,f);w.lineTo(g,j);w.closePath()}function B(a,b,c,j){d(b);e(c);f(j);g(a.getStyle());w.stroke();
-Ea.expandByScalar(2*b)}function A(a){h(a.getStyle());w.fill()}function F(a,b,c,d,e,f,g,j,i,ea,k,l,m){if(!(m instanceof THREE.DataTexture||void 0===m.image||0==m.image.width)){if(!0===m.needsUpdate){var n=m.wrapS==THREE.RepeatWrapping,eb=m.wrapT==THREE.RepeatWrapping;Ya[m.id]=w.createPattern(m.image,!0===n&&!0===eb?"repeat":!0===n&&!1===eb?"repeat-x":!1===n&&!0===eb?"repeat-y":"no-repeat");m.needsUpdate=!1}void 0===Ya[m.id]?h("rgba(0,0,0,1)"):h(Ya[m.id]);var n=m.offset.x/m.repeat.x,eb=m.offset.y/m.repeat.y,
-q=m.image.width*m.repeat.x,p=m.image.height*m.repeat.y,g=(g+n)*q,j=(1-j+eb)*p,c=c-a,d=d-b,e=e-a,f=f-b,i=(i+n)*q-g,ea=(1-ea+eb)*p-j,k=(k+n)*q-g,l=(1-l+eb)*p-j,n=i*l-k*ea;0===n?(void 0===Za[m.id]&&(b=document.createElement("canvas"),b.width=m.image.width,b.height=m.image.height,b=b.getContext("2d"),b.drawImage(m.image,0,0),Za[m.id]=b.getImageData(0,0,m.image.width,m.image.height).data),b=Za[m.id],g=4*(Math.floor(g)+Math.floor(j)*m.image.width),ga.setRGB(b[g]/255,b[g+1]/255,b[g+2]/255),A(ga)):(n=1/n,
-m=(l*c-ea*e)*n,ea=(l*d-ea*f)*n,c=(i*e-k*c)*n,d=(i*f-k*d)*n,a=a-m*g-c*j,g=b-ea*g-d*j,w.save(),w.transform(m,ea,c,d,a,g),w.fill(),w.restore())}}function E(a,b,c,d,e,f,g,j,h,i,ea,k,m){var l,n;l=m.width-1;n=m.height-1;g*=l;j*=n;c-=a;d-=b;e-=a;f-=b;h=h*l-g;i=i*n-j;ea=ea*l-g;k=k*n-j;n=1/(h*k-ea*i);l=(k*c-i*e)*n;i=(k*d-i*f)*n;c=(h*e-ea*c)*n;d=(h*f-ea*d)*n;a=a-l*g-c*j;b=b-i*g-d*j;w.save();w.transform(l,i,c,d,a,b);w.clip();w.drawImage(m,0,0);w.restore()}function H(a,b,c,d){$a[0]=255*a.r|0;$a[1]=255*a.g|0;
-$a[2]=255*a.b|0;$a[4]=255*b.r|0;$a[5]=255*b.g|0;$a[6]=255*b.b|0;$a[8]=255*c.r|0;$a[9]=255*c.g|0;$a[10]=255*c.b|0;$a[12]=255*d.r|0;$a[13]=255*d.g|0;$a[14]=255*d.b|0;j.putImageData(xb,0,0);Ua.drawImage(wb,0,0);return nb}function K(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function I(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;0!==e&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}if(!1===p instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");
+0,e=m.length;d<e;d++){var f=m[d];Da.copy(f.color);if(f instanceof THREE.DirectionalLight){var g=$a.getPositionFromMatrix(f.matrixWorld).normalize(),j=b.dot(g);0>=j||(j*=f.intensity,c.add(Da.multiplyScalar(j)))}else f instanceof THREE.PointLight&&(g=$a.getPositionFromMatrix(f.matrixWorld),j=b.dot($a.subVectors(g,a).normalize()),0>=j||(j*=0==f.distance?1:1-Math.min(a.distanceTo(g)/f.distance,1),0!=j&&(j*=f.intensity,c.add(Da.multiplyScalar(j)))))}}function r(a,d,e,f,g,j,h,i){k.info.render.vertices+=
+3;k.info.render.faces++;b(i.opacity);c(i.blending);oa=a.positionScreen.x;J=a.positionScreen.y;da=d.positionScreen.x;ka=d.positionScreen.y;Y=e.positionScreen.x;L=e.positionScreen.y;v(oa,J,da,ka,Y,L);(i instanceof THREE.MeshLambertMaterial||i instanceof THREE.MeshPhongMaterial)&&null===i.map&&null===i.map?(ra.copy(i.color),fa.copy(i.emissive),i.vertexColors===THREE.FaceColors&&ra.multiply(h.color),!0===fc?!1===i.wireframe&&i.shading==THREE.SmoothShading&&3==h.vertexNormalsLength?(ja.copy(ub),ma.copy(ub),
+X.copy(ub),q(h.v1.positionWorld,h.vertexNormalsModel[0],ja),q(h.v2.positionWorld,h.vertexNormalsModel[1],ma),q(h.v3.positionWorld,h.vertexNormalsModel[2],X),ja.multiply(ra).add(fa),ma.multiply(ra).add(fa),X.multiply(ra).add(fa),ha.addColors(ma,X).multiplyScalar(0.5),Ta=H(ja,ma,X,ha),E(oa,J,da,ka,Y,L,0,0,1,0,0,1,Ta)):(ga.copy(ub),q(h.centroidModel,h.normalModel,ga),ga.multiply(ra).add(fa),!0===i.wireframe?B(ga,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(ga)):!0===i.wireframe?B(i.color,
+i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(i.color)):i instanceof THREE.MeshBasicMaterial||i instanceof THREE.MeshLambertMaterial||i instanceof THREE.MeshPhongMaterial?null!==i.map?i.map.mapping instanceof THREE.UVMapping&&(Ra=h.uvs[0],F(oa,J,da,ka,Y,L,Ra[f].x,Ra[f].y,Ra[g].x,Ra[g].y,Ra[j].x,Ra[j].y,i.map)):null!==i.envMap?i.envMap.mapping instanceof THREE.SphericalReflectionMapping&&($a.copy(h.vertexNormalsModelView[f]),eb=0.5*$a.x+0.5,ob=0.5*$a.y+0.5,$a.copy(h.vertexNormalsModelView[g]),
+Hb=0.5*$a.x+0.5,Ib=0.5*$a.y+0.5,$a.copy(h.vertexNormalsModelView[j]),ec=0.5*$a.x+0.5,mc=0.5*$a.y+0.5,F(oa,J,da,ka,Y,L,eb,ob,Hb,Ib,ec,mc,i.envMap)):(ga.copy(i.color),i.vertexColors===THREE.FaceColors&&ga.multiply(h.color),!0===i.wireframe?B(ga,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(ga)):i instanceof THREE.MeshDepthMaterial?(ia=p.near,Qa=p.far,g=1-K(a.positionScreen.z*a.positionScreen.w,ia,Qa),ja.setRGB(g,g,g),g=1-K(d.positionScreen.z*d.positionScreen.w,ia,Qa),ma.setRGB(g,g,
+g),g=1-K(e.positionScreen.z*e.positionScreen.w,ia,Qa),X.setRGB(g,g,g),ha.addColors(ma,X).multiplyScalar(0.5),Ta=H(ja,ma,X,ha),E(oa,J,da,ka,Y,L,0,0,1,0,0,1,Ta)):i instanceof THREE.MeshNormalMaterial&&(i.shading==THREE.FlatShading?(d=h.normalModelView,ga.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),!0===i.wireframe?B(ga,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(ga)):i.shading==THREE.SmoothShading&&(d=h.vertexNormalsModelView[f],ja.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),
+d=h.vertexNormalsModelView[g],ma.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),d=h.vertexNormalsModelView[j],X.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),ha.addColors(ma,X).multiplyScalar(0.5),Ta=H(ja,ma,X,ha),E(oa,J,da,ka,Y,L,0,0,1,0,0,1,Ta)))}function v(a,b,c,d,e,f){w.beginPath();w.moveTo(a,b);w.lineTo(c,d);w.lineTo(e,f);w.closePath()}function z(a,b,c,d,e,f,g,j){w.beginPath();w.moveTo(a,b);w.lineTo(c,d);w.lineTo(e,f);w.lineTo(g,j);w.closePath()}function B(a,b,c,j){d(b);e(c);
+f(j);g(a.getStyle());w.stroke();Ea.expandByScalar(2*b)}function A(a){h(a.getStyle());w.fill()}function F(a,b,c,d,e,f,g,j,i,ea,k,l,m){if(!(m instanceof THREE.DataTexture||void 0===m.image||0==m.image.width)){if(!0===m.needsUpdate){var n=m.wrapS==THREE.RepeatWrapping,fb=m.wrapT==THREE.RepeatWrapping;Ya[m.id]=w.createPattern(m.image,!0===n&&!0===fb?"repeat":!0===n&&!1===fb?"repeat-x":!1===n&&!0===fb?"repeat-y":"no-repeat");m.needsUpdate=!1}void 0===Ya[m.id]?h("rgba(0,0,0,1)"):h(Ya[m.id]);var n=m.offset.x/
+m.repeat.x,fb=m.offset.y/m.repeat.y,q=m.image.width*m.repeat.x,p=m.image.height*m.repeat.y,g=(g+n)*q,j=(1-j+fb)*p,c=c-a,d=d-b,e=e-a,f=f-b,i=(i+n)*q-g,ea=(1-ea+fb)*p-j,k=(k+n)*q-g,l=(1-l+fb)*p-j,n=i*l-k*ea;0===n?(void 0===Za[m.id]&&(b=document.createElement("canvas"),b.width=m.image.width,b.height=m.image.height,b=b.getContext("2d"),b.drawImage(m.image,0,0),Za[m.id]=b.getImageData(0,0,m.image.width,m.image.height).data),b=Za[m.id],g=4*(Math.floor(g)+Math.floor(j)*m.image.width),ga.setRGB(b[g]/255,
+b[g+1]/255,b[g+2]/255),A(ga)):(n=1/n,m=(l*c-ea*e)*n,ea=(l*d-ea*f)*n,c=(i*e-k*c)*n,d=(i*f-k*d)*n,a=a-m*g-c*j,g=b-ea*g-d*j,w.save(),w.transform(m,ea,c,d,a,g),w.fill(),w.restore())}}function E(a,b,c,d,e,f,g,j,h,i,ea,k,m){var l,n;l=m.width-1;n=m.height-1;g*=l;j*=n;c-=a;d-=b;e-=a;f-=b;h=h*l-g;i=i*n-j;ea=ea*l-g;k=k*n-j;n=1/(h*k-ea*i);l=(k*c-i*e)*n;i=(k*d-i*f)*n;c=(h*e-ea*c)*n;d=(h*f-ea*d)*n;a=a-l*g-c*j;b=b-i*g-d*j;w.save();w.transform(l,i,c,d,a,b);w.clip();w.drawImage(m,0,0);w.restore()}function H(a,b,
+c,d){ab[0]=255*a.r|0;ab[1]=255*a.g|0;ab[2]=255*a.b|0;ab[4]=255*b.r|0;ab[5]=255*b.g|0;ab[6]=255*b.b|0;ab[8]=255*c.r|0;ab[9]=255*c.g|0;ab[10]=255*c.b|0;ab[12]=255*d.r|0;ab[13]=255*d.g|0;ab[14]=255*d.b|0;j.putImageData(xb,0,0);Ua.drawImage(wb,0,0);return nb}function K(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function I(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;0!==e&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}if(!1===p instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");
 else{!0===this.autoClear&&this.clear();w.setTransform(1,0,0,-1,t,x);k.info.render.vertices=0;k.info.render.faces=0;l=s.projectScene(a,p,this.sortObjects,this.sortElements);n=l.elements;m=l.lights;fc=0<m.length;if(!0===fc){ub.setRGB(0,0,0);gc.setRGB(0,0,0);Na.setRGB(0,0,0);for(var T=0,V=m.length;T<V;T++){var O=m[T],aa=O.color;O instanceof THREE.AmbientLight?ub.add(aa):O instanceof THREE.DirectionalLight?gc.add(aa):O instanceof THREE.PointLight&&Na.add(aa)}}T=0;for(V=n.length;T<V;T++){var ea=n[T],O=
-ea.material;if(!(void 0===O||!1===O.visible)){Ea.makeEmpty();if(ea instanceof THREE.RenderableParticle){C=ea;C.x*=t;C.y*=x;var aa=C,ib=ea;b(O.opacity);c(O.blending);var eb=void 0,zb=void 0,Ab=void 0,Bb=void 0,yc=ea=void 0,od=void 0;O instanceof THREE.ParticleBasicMaterial?null===O.map?(Ab=ib.object.scale.x,Bb=ib.object.scale.y,Ab*=ib.scale.x*t,Bb*=ib.scale.y*x,Ea.min.set(aa.x-Ab,aa.y-Bb),Ea.max.set(aa.x+Ab,aa.y+Bb),!1!==pb.isIntersectionBox(Ea)&&(h(O.color.getStyle()),w.save(),w.translate(aa.x,aa.y),
-w.rotate(-ib.rotation),w.scale(Ab,Bb),w.fillRect(-1,-1,2,2),w.restore())):(ea=O.map.image,yc=ea.width>>1,od=ea.height>>1,Ab=ib.scale.x*t,Bb=ib.scale.y*x,eb=Ab*yc,zb=Bb*od,Ea.min.set(aa.x-eb,aa.y-zb),Ea.max.set(aa.x+eb,aa.y+zb),!1!==pb.isIntersectionBox(Ea)&&(w.save(),w.translate(aa.x,aa.y),w.rotate(-ib.rotation),w.scale(Ab,-Bb),w.translate(-yc,-od),w.drawImage(ea,0,0),w.restore())):O instanceof THREE.ParticleCanvasMaterial&&(eb=ib.scale.x*t,zb=ib.scale.y*x,Ea.min.set(aa.x-eb,aa.y-zb),Ea.max.set(aa.x+
-eb,aa.y+zb),!1!==pb.isIntersectionBox(Ea)&&(g(O.color.getStyle()),h(O.color.getStyle()),w.save(),w.translate(aa.x,aa.y),w.rotate(-ib.rotation),w.scale(eb,zb),O.program(w),w.restore()))}else if(ea instanceof THREE.RenderableLine)C=ea.v1,G=ea.v2,C.positionScreen.x*=t,C.positionScreen.y*=x,G.positionScreen.x*=t,G.positionScreen.y*=x,Ea.setFromPoints([C.positionScreen,G.positionScreen]),!0===pb.isIntersectionBox(Ea)&&(aa=C,ib=G,b(O.opacity),c(O.blending),w.beginPath(),w.moveTo(aa.positionScreen.x,aa.positionScreen.y),
+ea.material;if(!(void 0===O||!1===O.visible)){Ea.makeEmpty();if(ea instanceof THREE.RenderableParticle){C=ea;C.x*=t;C.y*=x;var aa=C,ib=ea;b(O.opacity);c(O.blending);var fb=void 0,zb=void 0,Ab=void 0,Bb=void 0,yc=ea=void 0,od=void 0;O instanceof THREE.ParticleBasicMaterial?null===O.map?(Ab=ib.object.scale.x,Bb=ib.object.scale.y,Ab*=ib.scale.x*t,Bb*=ib.scale.y*x,Ea.min.set(aa.x-Ab,aa.y-Bb),Ea.max.set(aa.x+Ab,aa.y+Bb),!1!==pb.isIntersectionBox(Ea)&&(h(O.color.getStyle()),w.save(),w.translate(aa.x,aa.y),
+w.rotate(-ib.rotation),w.scale(Ab,Bb),w.fillRect(-1,-1,2,2),w.restore())):(ea=O.map.image,yc=ea.width>>1,od=ea.height>>1,Ab=ib.scale.x*t,Bb=ib.scale.y*x,fb=Ab*yc,zb=Bb*od,Ea.min.set(aa.x-fb,aa.y-zb),Ea.max.set(aa.x+fb,aa.y+zb),!1!==pb.isIntersectionBox(Ea)&&(w.save(),w.translate(aa.x,aa.y),w.rotate(-ib.rotation),w.scale(Ab,-Bb),w.translate(-yc,-od),w.drawImage(ea,0,0),w.restore())):O instanceof THREE.ParticleCanvasMaterial&&(fb=ib.scale.x*t,zb=ib.scale.y*x,Ea.min.set(aa.x-fb,aa.y-zb),Ea.max.set(aa.x+
+fb,aa.y+zb),!1!==pb.isIntersectionBox(Ea)&&(g(O.color.getStyle()),h(O.color.getStyle()),w.save(),w.translate(aa.x,aa.y),w.rotate(-ib.rotation),w.scale(fb,zb),O.program(w),w.restore()))}else if(ea instanceof THREE.RenderableLine)C=ea.v1,G=ea.v2,C.positionScreen.x*=t,C.positionScreen.y*=x,G.positionScreen.x*=t,G.positionScreen.y*=x,Ea.setFromPoints([C.positionScreen,G.positionScreen]),!0===pb.isIntersectionBox(Ea)&&(aa=C,ib=G,b(O.opacity),c(O.blending),w.beginPath(),w.moveTo(aa.positionScreen.x,aa.positionScreen.y),
 w.lineTo(ib.positionScreen.x,ib.positionScreen.y),O instanceof THREE.LineBasicMaterial?(d(O.linewidth),e(O.linecap),f(O.linejoin),g(O.color.getStyle()),i(null,null),w.stroke(),Ea.expandByScalar(2*O.linewidth)):O instanceof THREE.LineDashedMaterial&&(d(O.linewidth),e(O.linecap),f(O.linejoin),g(O.color.getStyle()),i(O.dashSize,O.gapSize),w.stroke(),Ea.expandByScalar(2*O.linewidth)));else if(ea instanceof THREE.RenderableFace3){C=ea.v1;G=ea.v2;M=ea.v3;if(-1>C.positionScreen.z||1<C.positionScreen.z)continue;
 if(-1>G.positionScreen.z||1<G.positionScreen.z)continue;if(-1>M.positionScreen.z||1<M.positionScreen.z)continue;C.positionScreen.x*=t;C.positionScreen.y*=x;G.positionScreen.x*=t;G.positionScreen.y*=x;M.positionScreen.x*=t;M.positionScreen.y*=x;!0===O.overdraw&&(I(C.positionScreen,G.positionScreen),I(G.positionScreen,M.positionScreen),I(M.positionScreen,C.positionScreen));Ea.setFromPoints([C.positionScreen,G.positionScreen,M.positionScreen]);r(C,G,M,0,1,2,ea,O,a)}else if(ea instanceof THREE.RenderableFace4){C=
 ea.v1;G=ea.v2;M=ea.v3;W=ea.v4;if(-1>C.positionScreen.z||1<C.positionScreen.z)continue;if(-1>G.positionScreen.z||1<G.positionScreen.z)continue;if(-1>M.positionScreen.z||1<M.positionScreen.z)continue;if(-1>W.positionScreen.z||1<W.positionScreen.z)continue;C.positionScreen.x*=t;C.positionScreen.y*=x;G.positionScreen.x*=t;G.positionScreen.y*=x;M.positionScreen.x*=t;M.positionScreen.y*=x;W.positionScreen.x*=t;W.positionScreen.y*=x;ua.positionScreen.copy(G.positionScreen);Ha.positionScreen.copy(W.positionScreen);
-!0===O.overdraw&&(I(C.positionScreen,G.positionScreen),I(G.positionScreen,W.positionScreen),I(W.positionScreen,C.positionScreen),I(M.positionScreen,ua.positionScreen),I(M.positionScreen,Ha.positionScreen));Ea.setFromPoints([C.positionScreen,G.positionScreen,M.positionScreen,W.positionScreen]);aa=C;ib=G;eb=M;zb=W;Ab=ua;Bb=Ha;yc=a;k.info.render.vertices+=4;k.info.render.faces++;b(O.opacity);c(O.blending);void 0!==O.map&&null!==O.map||void 0!==O.envMap&&null!==O.envMap?(r(aa,ib,zb,0,1,3,ea,O,yc),r(Ab,
-eb,Bb,1,2,3,ea,O,yc)):(oa=aa.positionScreen.x,J=aa.positionScreen.y,da=ib.positionScreen.x,ka=ib.positionScreen.y,Y=eb.positionScreen.x,L=eb.positionScreen.y,va=zb.positionScreen.x,Xa=zb.positionScreen.y,lb=Ab.positionScreen.x,Gb=Ab.positionScreen.y,ta=Bb.positionScreen.x,Ma=Bb.positionScreen.y,O instanceof THREE.MeshLambertMaterial||O instanceof THREE.MeshPhongMaterial?(ra.copy(O.color),fa.copy(O.emissive),O.vertexColors===THREE.FaceColors&&ra.multiply(ea.color),!0===fc?!1===O.wireframe&&O.shading==
+!0===O.overdraw&&(I(C.positionScreen,G.positionScreen),I(G.positionScreen,W.positionScreen),I(W.positionScreen,C.positionScreen),I(M.positionScreen,ua.positionScreen),I(M.positionScreen,Ha.positionScreen));Ea.setFromPoints([C.positionScreen,G.positionScreen,M.positionScreen,W.positionScreen]);aa=C;ib=G;fb=M;zb=W;Ab=ua;Bb=Ha;yc=a;k.info.render.vertices+=4;k.info.render.faces++;b(O.opacity);c(O.blending);void 0!==O.map&&null!==O.map||void 0!==O.envMap&&null!==O.envMap?(r(aa,ib,zb,0,1,3,ea,O,yc),r(Ab,
+fb,Bb,1,2,3,ea,O,yc)):(oa=aa.positionScreen.x,J=aa.positionScreen.y,da=ib.positionScreen.x,ka=ib.positionScreen.y,Y=fb.positionScreen.x,L=fb.positionScreen.y,va=zb.positionScreen.x,Xa=zb.positionScreen.y,lb=Ab.positionScreen.x,Gb=Ab.positionScreen.y,ta=Bb.positionScreen.x,Ma=Bb.positionScreen.y,O instanceof THREE.MeshLambertMaterial||O instanceof THREE.MeshPhongMaterial?(ra.copy(O.color),fa.copy(O.emissive),O.vertexColors===THREE.FaceColors&&ra.multiply(ea.color),!0===fc?!1===O.wireframe&&O.shading==
 THREE.SmoothShading&&4==ea.vertexNormalsLength?(ja.copy(ub),ma.copy(ub),X.copy(ub),ha.copy(ub),q(ea.v1.positionWorld,ea.vertexNormalsModel[0],ja),q(ea.v2.positionWorld,ea.vertexNormalsModel[1],ma),q(ea.v4.positionWorld,ea.vertexNormalsModel[3],X),q(ea.v3.positionWorld,ea.vertexNormalsModel[2],ha),ja.multiply(ra).add(fa),ma.multiply(ra).add(fa),X.multiply(ra).add(fa),ha.multiply(ra).add(fa),Ta=H(ja,ma,X,ha),v(oa,J,da,ka,va,Xa),E(oa,J,da,ka,va,Xa,0,0,1,0,0,1,Ta),v(lb,Gb,Y,L,ta,Ma),E(lb,Gb,Y,L,ta,Ma,
 1,0,1,1,0,1,Ta)):(ga.copy(ub),q(ea.centroidModel,ea.normalModel,ga),ga.multiply(ra).add(fa),z(oa,J,da,ka,Y,L,va,Xa),!0===O.wireframe?B(ga,O.wireframeLinewidth,O.wireframeLinecap,O.wireframeLinejoin):A(ga)):(ga.addColors(ra,fa),z(oa,J,da,ka,Y,L,va,Xa),!0===O.wireframe?B(ga,O.wireframeLinewidth,O.wireframeLinecap,O.wireframeLinejoin):A(ga))):O instanceof THREE.MeshBasicMaterial?(ga.copy(O.color),O.vertexColors===THREE.FaceColors&&ga.multiply(ea.color),z(oa,J,da,ka,Y,L,va,Xa),!0===O.wireframe?B(ga,O.wireframeLinewidth,
 O.wireframeLinecap,O.wireframeLinejoin):A(ga)):O instanceof THREE.MeshNormalMaterial?(aa=void 0,O.shading==THREE.FlatShading?(aa=ea.normalModelView,ga.setRGB(aa.x,aa.y,aa.z).multiplyScalar(0.5).addScalar(0.5),z(oa,J,da,ka,Y,L,va,Xa),!0===O.wireframe?B(ga,O.wireframeLinewidth,O.wireframeLinecap,O.wireframeLinejoin):A(ga)):O.shading==THREE.SmoothShading&&(aa=ea.vertexNormalsModelView[0],ja.setRGB(aa.x,aa.y,aa.z).multiplyScalar(0.5).addScalar(0.5),aa=ea.vertexNormalsModelView[1],ma.setRGB(aa.x,aa.y,
 aa.z).multiplyScalar(0.5).addScalar(0.5),aa=ea.vertexNormalsModelView[3],X.setRGB(aa.x,aa.y,aa.z).multiplyScalar(0.5).addScalar(0.5),aa=ea.vertexNormalsModelView[2],ha.setRGB(aa.x,aa.y,aa.z).multiplyScalar(0.5).addScalar(0.5),Ta=H(ja,ma,X,ha),v(oa,J,da,ka,va,Xa),E(oa,J,da,ka,va,Xa,0,0,1,0,0,1,Ta),v(lb,Gb,Y,L,ta,Ma),E(lb,Gb,Y,L,ta,Ma,1,0,1,1,0,1,Ta))):O instanceof THREE.MeshDepthMaterial&&(ia=p.near,Qa=p.far,ja.r=ja.g=ja.b=1-K(aa.positionScreen.z*aa.positionScreen.w,ia,Qa),ma.r=ma.g=ma.b=1-K(ib.positionScreen.z*
-ib.positionScreen.w,ia,Qa),X.r=X.g=X.b=1-K(zb.positionScreen.z*zb.positionScreen.w,ia,Qa),ha.r=ha.g=ha.b=1-K(eb.positionScreen.z*eb.positionScreen.w,ia,Qa),Ta=H(ja,ma,X,ha),v(oa,J,da,ka,va,Xa),E(oa,J,da,ka,va,Xa,0,0,1,0,0,1,Ta),v(lb,Gb,Y,L,ta,Ma),E(lb,Gb,Y,L,ta,Ma,1,0,1,1,0,1,Ta)))}qa.union(Ea)}}w.setTransform(1,0,0,1,0,0)}}};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",
+ib.positionScreen.w,ia,Qa),X.r=X.g=X.b=1-K(zb.positionScreen.z*zb.positionScreen.w,ia,Qa),ha.r=ha.g=ha.b=1-K(fb.positionScreen.z*fb.positionScreen.w,ia,Qa),Ta=H(ja,ma,X,ha),v(oa,J,da,ka,va,Xa),E(oa,J,da,ka,va,Xa,0,0,1,0,0,1,Ta),v(lb,Gb,Y,L,ta,Ma),E(lb,Gb,Y,L,ta,Ma,1,0,1,1,0,1,Ta)))}qa.union(Ea)}}w.setTransform(1,0,0,1,0,0)}}};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\nuniform float reflectivity;\nuniform samplerCube envMap;\nuniform float flipEnvMap;\nuniform int combine;\n#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\nuniform bool useRefract;\nuniform float refractionRatio;\n#else\nvarying vec3 vReflect;\n#endif\n#endif",envmap_fragment:"#ifdef USE_ENVMAP\nvec3 reflectVec;\n#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\nvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\nif ( useRefract ) {\nreflectVec = refract( cameraToVertex, normal, refractionRatio );\n} else { \nreflectVec = reflect( cameraToVertex, normal );\n}\n#else\nreflectVec = vReflect;\n#endif\n#ifdef DOUBLE_SIDED\nfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\nvec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n#else\nvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n#endif\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\nif ( combine == 1 ) {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\n} else if ( combine == 2 ) {\ngl_FragColor.xyz += cubeColor.xyz * specularStrength * reflectivity;\n} else {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\n}\n#endif",
 envmap_pars_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\nvarying vec3 vReflect;\nuniform float refractionRatio;\nuniform bool useRefract;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n#ifdef USE_SKINNING\nvec4 worldPosition = modelMatrix * skinned;\n#endif\n#if defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\nvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\n#endif\n#if ! defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\nvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n#endif\n#endif",
 envmap_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\nvec3 worldNormal = mat3( modelMatrix[ 0 ].xyz, modelMatrix[ 1 ].xyz, modelMatrix[ 2 ].xyz ) * objectNormal;\nworldNormal = normalize( worldNormal );\nvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\nif ( useRefract ) {\nvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n} else {\nvReflect = reflect( cameraToVertex, worldNormal );\n}\n#endif",map_particle_pars_fragment:"#ifdef USE_MAP\nuniform sampler2D map;\n#endif",
@@ -347,15 +346,15 @@ m;c++)a.__morphTargetsArrays.push(new Float32Array(3*i))}if(a.numMorphNormals){a
 THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function g(a){return a.map||a.lightMap||a.bumpMap||a.normalMap||a.specularMap||a instanceof THREE.ShaderMaterial?!0:!1}function h(a){var b,c,d;for(b in a.attributes)d="index"===b?j.ELEMENT_ARRAY_BUFFER:j.ARRAY_BUFFER,c=a.attributes[b],c.buffer=j.createBuffer(),j.bindBuffer(d,c.buffer),j.bufferData(d,c.array,j.STATIC_DRAW)}function i(a,b,c){var d=a.attributes,e=d.index,f=d.position,g=d.normal,h=d.uv,i=d.color,d=d.tangent;a.elementsNeedUpdate&&
 void 0!==e&&(j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,e.buffer),j.bufferData(j.ELEMENT_ARRAY_BUFFER,e.array,b));a.verticesNeedUpdate&&void 0!==f&&(j.bindBuffer(j.ARRAY_BUFFER,f.buffer),j.bufferData(j.ARRAY_BUFFER,f.array,b));a.normalsNeedUpdate&&void 0!==g&&(j.bindBuffer(j.ARRAY_BUFFER,g.buffer),j.bufferData(j.ARRAY_BUFFER,g.array,b));a.uvsNeedUpdate&&void 0!==h&&(j.bindBuffer(j.ARRAY_BUFFER,h.buffer),j.bufferData(j.ARRAY_BUFFER,h.array,b));a.colorsNeedUpdate&&void 0!==i&&(j.bindBuffer(j.ARRAY_BUFFER,
 i.buffer),j.bufferData(j.ARRAY_BUFFER,i.array,b));a.tangentsNeedUpdate&&void 0!==d&&(j.bindBuffer(j.ARRAY_BUFFER,d.buffer),j.bufferData(j.ARRAY_BUFFER,d.array,b));if(c)for(var k in a.attributes)delete a.attributes[k].array}function k(a){qa[a]||(j.enableVertexAttribArray(a),qa[a]=!0)}function l(){for(var a in qa)qa[a]&&(j.disableVertexAttribArray(a),qa[a]=!1)}function n(a,b){return a.z!==b.z?b.z-a.z:b.id-a.id}function m(a,b){return b[0]-a[0]}function s(a,b,c){if(a.length)for(var d=0,e=a.length;d<e;d++)ga=
-lb=null,ta=Ma=ha=X=ia=Za=ra=-1,hb=!0,a[d].render(b,c,mc,pb),ga=lb=null,ta=Ma=ha=X=ia=Za=ra=-1,hb=!0}function q(a,b,c,d,e,f,g,j){var h,i,k,m;b?(i=a.length-1,m=b=-1):(i=0,b=a.length,m=1);for(var l=i;l!==b;l+=m)if(h=a[l],h.render){i=h.object;k=h.buffer;if(j)h=j;else{h=h[c];if(!h)continue;g&&L.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);L.setDepthTest(h.depthTest);L.setDepthWrite(h.depthWrite);I(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}L.setMaterialFaces(h);k instanceof
+lb=null,ta=Ma=ha=X=ia=Za=ra=-1,$a=!0,a[d].render(b,c,mc,pb),ga=lb=null,ta=Ma=ha=X=ia=Za=ra=-1,$a=!0}function q(a,b,c,d,e,f,g,j){var h,i,k,m;b?(i=a.length-1,m=b=-1):(i=0,b=a.length,m=1);for(var l=i;l!==b;l+=m)if(h=a[l],h.render){i=h.object;k=h.buffer;if(j)h=j;else{h=h[c];if(!h)continue;g&&L.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);L.setDepthTest(h.depthTest);L.setDepthWrite(h.depthWrite);I(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}L.setMaterialFaces(h);k instanceof
 THREE.BufferGeometry?L.renderBufferDirect(d,e,f,h,k,i):L.renderBuffer(d,e,f,h,k,i)}}function r(a,b,c,d,e,f,g){for(var j,h,i=0,k=a.length;i<k;i++)if(j=a[i],h=j.object,h.visible){if(g)j=g;else{j=j[b];if(!j)continue;f&&L.setBlending(j.blending,j.blendEquation,j.blendSrc,j.blendDst);L.setDepthTest(j.depthTest);L.setDepthWrite(j.depthWrite);I(j.polygonOffset,j.polygonOffsetFactor,j.polygonOffsetUnits)}L.renderImmediateObject(c,d,e,j,h)}}function p(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}
 function t(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function x(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function w(a,b){for(var c=a.length-1;0<=c;c--)a[c].object===b&&a.splice(c,1)}function v(a,b){for(var c=a.length-1;0<=c;c--)a[c]===b&&a.splice(c,1)}function H(a,b,c,d,e){ma=0;d.needsUpdate&&(d.program&&aa(d),L.initMaterial(d,b,c,e),d.needsUpdate=!1);d.morphTargets&&!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(L.maxMorphTargets));
 var f=!1,g=d.program,h=g.uniforms,i=d.uniforms;g!==lb&&(j.useProgram(g),lb=g,f=!0);d.id!==ta&&(ta=d.id,f=!0);if(f||a!==ga)j.uniformMatrix4fv(h.projectionMatrix,!1,a.projectionMatrix.elements),a!==ga&&(ga=a);if(d.skinning)if(tc&&e.useVertexTexture){if(null!==h.boneTexture){var k=F();j.uniform1i(h.boneTexture,k);L.setTexture(e.boneTexture,k)}}else null!==h.boneGlobalMatrices&&j.uniformMatrix4fv(h.boneGlobalMatrices,!1,e.boneMatrices);if(f){c&&d.fog&&(i.fogColor.value=c.color,c instanceof THREE.Fog?
-(i.fogNear.value=c.near,i.fogFar.value=c.far):c instanceof THREE.FogExp2&&(i.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(hb){for(var m,l=k=0,n=0,q,p,r,s=wb,t=s.directional.colors,w=s.directional.positions,v=s.point.colors,x=s.point.positions,C=s.point.distances,A=s.spot.colors,E=s.spot.positions,I=s.spot.distances,H=s.spot.directions,J=s.spot.anglesCos,O=s.spot.exponents,T=s.hemi.skyColors,X=s.hemi.groundColors,va=s.hemi.positions,
+(i.fogNear.value=c.near,i.fogFar.value=c.far):c instanceof THREE.FogExp2&&(i.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if($a){for(var m,l=k=0,n=0,q,p,r,s=wb,t=s.directional.colors,w=s.directional.positions,v=s.point.colors,x=s.point.positions,C=s.point.distances,A=s.spot.colors,E=s.spot.positions,I=s.spot.distances,H=s.spot.directions,J=s.spot.anglesCos,O=s.spot.exponents,T=s.hemi.skyColors,X=s.hemi.groundColors,va=s.hemi.positions,
 W=0,V=0,ja=0,da=0,ha=0,ka=0,fa=0,Xa=0,N=m=0,c=r=N=0,f=b.length;c<f;c++)m=b[c],m.onlyShadow||(q=m.color,p=m.intensity,r=m.distance,m instanceof THREE.AmbientLight?m.visible&&(L.gammaInput?(k+=q.r*q.r,l+=q.g*q.g,n+=q.b*q.b):(k+=q.r,l+=q.g,n+=q.b)):m instanceof THREE.DirectionalLight?(ha+=1,m.visible&&(Na.copy(m.matrixWorld.getPosition()),Na.sub(m.target.matrixWorld.getPosition()),Na.normalize(),0===Na.x&&0===Na.y&&0===Na.z||(m=3*W,w[m]=Na.x,w[m+1]=Na.y,w[m+2]=Na.z,L.gammaInput?z(t,m,q,p*p):K(t,m,q,
 p),W+=1))):m instanceof THREE.PointLight?(ka+=1,m.visible&&(N=3*V,L.gammaInput?z(v,N,q,p*p):K(v,N,q,p),p=m.matrixWorld.getPosition(),x[N]=p.x,x[N+1]=p.y,x[N+2]=p.z,C[V]=r,V+=1)):m instanceof THREE.SpotLight?(fa+=1,m.visible&&(N=3*ja,L.gammaInput?z(A,N,q,p*p):K(A,N,q,p),p=m.matrixWorld.getPosition(),E[N]=p.x,E[N+1]=p.y,E[N+2]=p.z,I[ja]=r,Na.copy(p),Na.sub(m.target.matrixWorld.getPosition()),Na.normalize(),H[N]=Na.x,H[N+1]=Na.y,H[N+2]=Na.z,J[ja]=Math.cos(m.angle),O[ja]=m.exponent,ja+=1)):m instanceof
 THREE.HemisphereLight&&(Xa+=1,m.visible&&(Na.copy(m.matrixWorld.getPosition()),Na.normalize(),0===Na.x&&0===Na.y&&0===Na.z||(r=3*da,va[r]=Na.x,va[r+1]=Na.y,va[r+2]=Na.z,q=m.color,m=m.groundColor,L.gammaInput?(p*=p,z(T,r,q,p),z(X,r,m,p)):(K(T,r,q,p),K(X,r,m,p)),da+=1))));c=3*W;for(f=Math.max(t.length,3*ha);c<f;c++)t[c]=0;c=3*V;for(f=Math.max(v.length,3*ka);c<f;c++)v[c]=0;c=3*ja;for(f=Math.max(A.length,3*fa);c<f;c++)A[c]=0;c=3*da;for(f=Math.max(T.length,3*Xa);c<f;c++)T[c]=0;c=3*da;for(f=Math.max(X.length,
-3*Xa);c<f;c++)X[c]=0;s.directional.length=W;s.point.length=V;s.spot.length=ja;s.hemi.length=da;s.ambient[0]=k;s.ambient[1]=l;s.ambient[2]=n;hb=!1}c=wb;i.ambientLightColor.value=c.ambient;i.directionalLightColor.value=c.directional.colors;i.directionalLightDirection.value=c.directional.positions;i.pointLightColor.value=c.point.colors;i.pointLightPosition.value=c.point.positions;i.pointLightDistance.value=c.point.distances;i.spotLightColor.value=c.spot.colors;i.spotLightPosition.value=c.spot.positions;
+3*Xa);c<f;c++)X[c]=0;s.directional.length=W;s.point.length=V;s.spot.length=ja;s.hemi.length=da;s.ambient[0]=k;s.ambient[1]=l;s.ambient[2]=n;$a=!1}c=wb;i.ambientLightColor.value=c.ambient;i.directionalLightColor.value=c.directional.colors;i.directionalLightDirection.value=c.directional.positions;i.pointLightColor.value=c.point.colors;i.pointLightPosition.value=c.point.positions;i.pointLightDistance.value=c.point.distances;i.spotLightColor.value=c.spot.colors;i.spotLightPosition.value=c.spot.positions;
 i.spotLightDistance.value=c.spot.distances;i.spotLightDirection.value=c.spot.directions;i.spotLightAngleCos.value=c.spot.anglesCos;i.spotLightExponent.value=c.spot.exponents;i.hemisphereLightSkyColor.value=c.hemi.skyColors;i.hemisphereLightGroundColor.value=c.hemi.groundColors;i.hemisphereLightDirection.value=c.hemi.positions}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial){i.opacity.value=d.opacity;L.gammaInput?i.diffuse.value.copyGammaToLinear(d.color):
 i.diffuse.value=d.color;i.map.value=d.map;i.lightMap.value=d.lightMap;i.specularMap.value=d.specularMap;d.bumpMap&&(i.bumpMap.value=d.bumpMap,i.bumpScale.value=d.bumpScale);d.normalMap&&(i.normalMap.value=d.normalMap,i.normalScale.value.copy(d.normalScale));var Y;d.map?Y=d.map:d.specularMap?Y=d.specularMap:d.normalMap?Y=d.normalMap:d.bumpMap&&(Y=d.bumpMap);void 0!==Y&&(c=Y.offset,Y=Y.repeat,i.offsetRepeat.value.set(c.x,c.y,Y.x,Y.y));i.envMap.value=d.envMap;i.flipEnvMap.value=d.envMap instanceof THREE.WebGLRenderTargetCube?
 1:-1;i.reflectivity.value=d.reflectivity;i.refractionRatio.value=d.refractionRatio;i.combine.value=d.combine;i.useRefract.value=d.envMap&&d.envMap.mapping instanceof THREE.CubeRefractionMapping}d instanceof THREE.LineBasicMaterial?(i.diffuse.value=d.color,i.opacity.value=d.opacity):d instanceof THREE.LineDashedMaterial?(i.diffuse.value=d.color,i.opacity.value=d.opacity,i.dashSize.value=d.dashSize,i.totalSize.value=d.dashSize+d.gapSize,i.scale.value=d.scale):d instanceof THREE.ParticleBasicMaterial?
@@ -380,16 +379,16 @@ THREE.SrcColorFactor)return j.SRC_COLOR;if(a===THREE.OneMinusSrcColorFactor)retu
 if(void 0!==Ua){if(a===THREE.RGB_S3TC_DXT1_Format)return Ua.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return Ua.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT3_Format)return Ua.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return Ua.COMPRESSED_RGBA_S3TC_DXT5_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},M=void 0!==a.canvas?a.canvas:document.createElement("canvas"),W=void 0!==a.precision?a.precision:"highp",ua=void 0!==
 a.alpha?a.alpha:!0,Ha=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,oa=void 0!==a.antialias?a.antialias:!1,J=void 0!==a.stencil?a.stencil:!0,da=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,ka=void 0!==a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0),Y=void 0!==a.clearAlpha?a.clearAlpha:0;this.domElement=M;this.context=null;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==window.devicePixelRatio?window.devicePixelRatio:1;this.autoUpdateScene=
 this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.shadowMapEnabled=this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapAutoUpdate=!0;this.shadowMapType=THREE.PCFShadowMap;this.shadowMapCullFace=THREE.CullFaceFront;this.shadowMapCascade=this.shadowMapDebug=!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,
-geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var L=this,va=[],Xa=0,lb=null,Gb=null,ta=-1,Ma=null,ga=null,ja=0,ma=0,X=-1,ha=-1,ra=-1,fa=-1,Da=-1,Ya=-1,Za=-1,ia=-1,Qa=null,Ta=null,Ra=null,db=null,ob=0,Hb=0,Ib=0,ec=0,mc=0,pb=0,qa={},Ea=new THREE.Frustum,fc=new THREE.Matrix4,ub=new THREE.Matrix4,gc=new THREE.Vector3,Na=new THREE.Vector3,hb=!0,wb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,
-colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},j,xb,$a,nb,Ua;try{if(!(j=M.getContext("experimental-webgl",{alpha:ua,premultipliedAlpha:Ha,antialias:oa,stencil:J,preserveDrawingBuffer:da})))throw"Error creating WebGL context.";}catch(yb){console.error(yb)}xb=j.getExtension("OES_texture_float");$a=j.getExtension("OES_standard_derivatives");nb=j.getExtension("EXT_texture_filter_anisotropic")||j.getExtension("MOZ_EXT_texture_filter_anisotropic")||
-j.getExtension("WEBKIT_EXT_texture_filter_anisotropic");Ua=j.getExtension("WEBGL_compressed_texture_s3tc")||j.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||j.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");xb||console.log("THREE.WebGLRenderer: Float textures not supported.");$a||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");nb||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");Ua||console.log("THREE.WebGLRenderer: S3TC compressed textures not supported.");
+geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var L=this,va=[],Xa=0,lb=null,Gb=null,ta=-1,Ma=null,ga=null,ja=0,ma=0,X=-1,ha=-1,ra=-1,fa=-1,Da=-1,Ya=-1,Za=-1,ia=-1,Qa=null,Ta=null,Ra=null,eb=null,ob=0,Hb=0,Ib=0,ec=0,mc=0,pb=0,qa={},Ea=new THREE.Frustum,fc=new THREE.Matrix4,ub=new THREE.Matrix4,gc=new THREE.Vector3,Na=new THREE.Vector3,$a=!0,wb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,
+colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},j,xb,ab,nb,Ua;try{if(!(j=M.getContext("experimental-webgl",{alpha:ua,premultipliedAlpha:Ha,antialias:oa,stencil:J,preserveDrawingBuffer:da})))throw"Error creating WebGL context.";}catch(yb){console.error(yb)}xb=j.getExtension("OES_texture_float");ab=j.getExtension("OES_standard_derivatives");nb=j.getExtension("EXT_texture_filter_anisotropic")||j.getExtension("MOZ_EXT_texture_filter_anisotropic")||
+j.getExtension("WEBKIT_EXT_texture_filter_anisotropic");Ua=j.getExtension("WEBGL_compressed_texture_s3tc")||j.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||j.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");xb||console.log("THREE.WebGLRenderer: Float textures not supported.");ab||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");nb||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");Ua||console.log("THREE.WebGLRenderer: S3TC compressed textures not supported.");
 j.clearColor(0,0,0,1);j.clearDepth(1);j.clearStencil(0);j.enable(j.DEPTH_TEST);j.depthFunc(j.LEQUAL);j.frontFace(j.CCW);j.cullFace(j.BACK);j.enable(j.CULL_FACE);j.enable(j.BLEND);j.blendEquation(j.FUNC_ADD);j.blendFunc(j.SRC_ALPHA,j.ONE_MINUS_SRC_ALPHA);j.clearColor(ka.r,ka.g,ka.b,Y);this.context=j;var Oc=j.getParameter(j.MAX_TEXTURE_IMAGE_UNITS),hd=j.getParameter(j.MAX_VERTEX_TEXTURE_IMAGE_UNITS);j.getParameter(j.MAX_TEXTURE_SIZE);var id=j.getParameter(j.MAX_CUBE_MAP_TEXTURE_SIZE),Ec=nb?j.getParameter(nb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):
 0,sc=0<hd,tc=sc&&xb;Ua&&j.getParameter(j.COMPRESSED_TEXTURE_FORMATS);var ld=j.getShaderPrecisionFormat(j.VERTEX_SHADER,j.HIGH_FLOAT),md=j.getShaderPrecisionFormat(j.VERTEX_SHADER,j.MEDIUM_FLOAT);j.getShaderPrecisionFormat(j.VERTEX_SHADER,j.LOW_FLOAT);var nd=j.getShaderPrecisionFormat(j.FRAGMENT_SHADER,j.HIGH_FLOAT),kd=j.getShaderPrecisionFormat(j.FRAGMENT_SHADER,j.MEDIUM_FLOAT);j.getShaderPrecisionFormat(j.FRAGMENT_SHADER,j.LOW_FLOAT);j.getShaderPrecisionFormat(j.VERTEX_SHADER,j.HIGH_INT);j.getShaderPrecisionFormat(j.VERTEX_SHADER,
 j.MEDIUM_INT);j.getShaderPrecisionFormat(j.VERTEX_SHADER,j.LOW_INT);j.getShaderPrecisionFormat(j.FRAGMENT_SHADER,j.HIGH_INT);j.getShaderPrecisionFormat(j.FRAGMENT_SHADER,j.MEDIUM_INT);j.getShaderPrecisionFormat(j.FRAGMENT_SHADER,j.LOW_INT);var jd=0<ld.precision&&0<nd.precision,Pc=0<md.precision&&0<kd.precision;"highp"===W&&!jd&&(Pc?(W="mediump",console.warn("WebGLRenderer: highp not supported, using mediump")):(W="lowp",console.warn("WebGLRenderer: highp and mediump not supported, using lowp")));
-"mediump"===W&&!Pc&&(W="lowp",console.warn("WebGLRenderer: mediump not supported, using lowp"));this.getContext=function(){return j};this.supportsVertexTextures=function(){return sc};this.supportsFloatTextures=function(){return xb};this.supportsStandardDerivatives=function(){return $a};this.supportsCompressedTextureS3TC=function(){return Ua};this.getMaxAnisotropy=function(){return Ec};this.getPrecision=function(){return W};this.setSize=function(a,b){M.width=a*this.devicePixelRatio;M.height=b*this.devicePixelRatio;
+"mediump"===W&&!Pc&&(W="lowp",console.warn("WebGLRenderer: mediump not supported, using lowp"));this.getContext=function(){return j};this.supportsVertexTextures=function(){return sc};this.supportsFloatTextures=function(){return xb};this.supportsStandardDerivatives=function(){return ab};this.supportsCompressedTextureS3TC=function(){return Ua};this.getMaxAnisotropy=function(){return Ec};this.getPrecision=function(){return W};this.setSize=function(a,b){M.width=a*this.devicePixelRatio;M.height=b*this.devicePixelRatio;
 M.style.width=a+"px";M.style.height=b+"px";this.setViewport(0,0,M.width,M.height)};this.setViewport=function(a,b,c,d){ob=void 0!==a?a:0;Hb=void 0!==b?b:0;Ib=void 0!==c?c:M.width;ec=void 0!==d?d:M.height;j.viewport(ob,Hb,Ib,ec)};this.setScissor=function(a,b,c,d){j.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?j.enable(j.SCISSOR_TEST):j.disable(j.SCISSOR_TEST)};this.setClearColorHex=function(a,b){ka.setHex(a);Y=b;j.clearColor(ka.r,ka.g,ka.b,Y)};this.setClearColor=function(a,b){ka.copy(a);Y=
 b;j.clearColor(ka.r,ka.g,ka.b,Y)};this.getClearColor=function(){return ka};this.getClearAlpha=function(){return Y};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=j.COLOR_BUFFER_BIT;if(void 0===b||b)d|=j.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=j.STENCIL_BUFFER_BIT;j.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};
-this.updateShadowMap=function(a,b){lb=null;ta=Ma=ia=Za=ra=-1;hb=!0;ha=X=-1;this.shadowMapPlugin.update(a,b)};var xd=function(a){a=a.target;a.removeEventListener("dispose",xd);a.__webglInit=void 0;void 0!==a.__webglVertexBuffer&&j.deleteBuffer(a.__webglVertexBuffer);void 0!==a.__webglNormalBuffer&&j.deleteBuffer(a.__webglNormalBuffer);void 0!==a.__webglTangentBuffer&&j.deleteBuffer(a.__webglTangentBuffer);void 0!==a.__webglColorBuffer&&j.deleteBuffer(a.__webglColorBuffer);void 0!==a.__webglUVBuffer&&
+this.updateShadowMap=function(a,b){lb=null;ta=Ma=ia=Za=ra=-1;$a=!0;ha=X=-1;this.shadowMapPlugin.update(a,b)};var xd=function(a){a=a.target;a.removeEventListener("dispose",xd);a.__webglInit=void 0;void 0!==a.__webglVertexBuffer&&j.deleteBuffer(a.__webglVertexBuffer);void 0!==a.__webglNormalBuffer&&j.deleteBuffer(a.__webglNormalBuffer);void 0!==a.__webglTangentBuffer&&j.deleteBuffer(a.__webglTangentBuffer);void 0!==a.__webglColorBuffer&&j.deleteBuffer(a.__webglColorBuffer);void 0!==a.__webglUVBuffer&&
 j.deleteBuffer(a.__webglUVBuffer);void 0!==a.__webglUV2Buffer&&j.deleteBuffer(a.__webglUV2Buffer);void 0!==a.__webglSkinIndicesBuffer&&j.deleteBuffer(a.__webglSkinIndicesBuffer);void 0!==a.__webglSkinWeightsBuffer&&j.deleteBuffer(a.__webglSkinWeightsBuffer);void 0!==a.__webglFaceBuffer&&j.deleteBuffer(a.__webglFaceBuffer);void 0!==a.__webglLineBuffer&&j.deleteBuffer(a.__webglLineBuffer);void 0!==a.__webglLineDistanceBuffer&&j.deleteBuffer(a.__webglLineDistanceBuffer);if(void 0!==a.geometryGroups)for(var c in a.geometryGroups){var d=
 a.geometryGroups[c];if(void 0!==d.numMorphTargets)for(var e=0,f=d.numMorphTargets;e<f;e++)j.deleteBuffer(d.__webglMorphTargetsBuffers[e]);if(void 0!==d.numMorphNormals){e=0;for(f=d.numMorphNormals;e<f;e++)j.deleteBuffer(d.__webglMorphNormalsBuffers[e])}b(d)}b(a);L.info.memory.geometries--},Qc=function(a){a=a.target;a.removeEventListener("dispose",Qc);a.image&&a.image.__webglTextureCube?j.deleteTexture(a.image.__webglTextureCube):a.__webglInit&&(a.__webglInit=!1,j.deleteTexture(a.__webglTexture));
 L.info.memory.textures--},Rc=function(a){a=a.target;a.removeEventListener("dispose",Rc);if(a&&a.__webglTexture)if(j.deleteTexture(a.__webglTexture),a instanceof THREE.WebGLRenderTargetCube)for(var b=0;6>b;b++)j.deleteFramebuffer(a.__webglFramebuffer[b]),j.deleteRenderbuffer(a.__webglRenderbuffer[b]);else j.deleteFramebuffer(a.__webglFramebuffer),j.deleteRenderbuffer(a.__webglRenderbuffer);L.info.memory.textures--},O=function(a){a=a.target;a.removeEventListener("dispose",O);aa(a)},aa=function(a){var b=
@@ -409,9 +408,9 @@ h.buffer),k(a.position),j.vertexAttribPointer(a.position,m,j.FLOAT,!1,0,0),m=e.a
 (j.bindBuffer(j.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[n]),k(c["morphNormal"+h]),j.vertexAttribPointer(c["morphNormal"+h],3,j.FLOAT,!1,0,0)),f.__webglMorphTargetInfluences[h]=g[n]):f.__webglMorphTargetInfluences[h]=0,h++}null!==d.program.uniforms.morphTargetInfluences&&j.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){g=0;for(i=e.__webglCustomAttributesList.length;g<i;g++)c=e.__webglCustomAttributesList[g],0<=b[c.buffer.belongsToAttribute]&&
 (j.bindBuffer(j.ARRAY_BUFFER,c.buffer),k(b[c.buffer.belongsToAttribute]),j.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,j.FLOAT,!1,0,0))}0<=b.color&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglColorBuffer),k(b.color),j.vertexAttribPointer(b.color,3,j.FLOAT,!1,0,0));0<=b.normal&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglNormalBuffer),k(b.normal),j.vertexAttribPointer(b.normal,3,j.FLOAT,!1,0,0));0<=b.tangent&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglTangentBuffer),k(b.tangent),j.vertexAttribPointer(b.tangent,
 4,j.FLOAT,!1,0,0));0<=b.uv&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglUVBuffer),k(b.uv),j.vertexAttribPointer(b.uv,2,j.FLOAT,!1,0,0));0<=b.uv2&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglUV2Buffer),k(b.uv2),j.vertexAttribPointer(b.uv2,2,j.FLOAT,!1,0,0));d.skinning&&(0<=b.skinIndex&&0<=b.skinWeight)&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),k(b.skinIndex),j.vertexAttribPointer(b.skinIndex,4,j.FLOAT,!1,0,0),j.bindBuffer(j.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),k(b.skinWeight),j.vertexAttribPointer(b.skinWeight,
-4,j.FLOAT,!1,0,0));0<=b.lineDistance&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglLineDistanceBuffer),k(b.lineDistance),j.vertexAttribPointer(b.lineDistance,1,j.FLOAT,!1,0,0))}f instanceof THREE.Mesh?(d.wireframe?(d=d.wireframeLinewidth,d!==db&&(j.lineWidth(d),db=d),a&&j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),j.drawElements(j.LINES,e.__webglLineCount,j.UNSIGNED_SHORT,0)):(a&&j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),j.drawElements(j.TRIANGLES,e.__webglFaceCount,j.UNSIGNED_SHORT,
-0)),L.info.render.calls++,L.info.render.vertices+=e.__webglFaceCount,L.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?j.LINE_STRIP:j.LINES,d=d.linewidth,d!==db&&(j.lineWidth(d),db=d),j.drawArrays(f,0,e.__webglLineCount),L.info.render.calls++):f instanceof THREE.ParticleSystem?(j.drawArrays(j.POINTS,0,e.__webglParticleCount),L.info.render.calls++,L.info.render.points+=e.__webglParticleCount):f instanceof THREE.Ribbon&&(j.drawArrays(j.TRIANGLE_STRIP,0,e.__webglVertexCount),
-L.info.render.calls++)}};this.render=function(a,b,c,d){if(!1===b instanceof THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e,f,g,i,h=a.__lights,k=a.fog;ta=-1;hb=!0;this.autoUpdateScene&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);fc.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);Ea.setFromMatrix(fc);this.autoUpdateObjects&&this.initWebGLObjects(a);s(this.renderPluginsPre,
+4,j.FLOAT,!1,0,0));0<=b.lineDistance&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglLineDistanceBuffer),k(b.lineDistance),j.vertexAttribPointer(b.lineDistance,1,j.FLOAT,!1,0,0))}f instanceof THREE.Mesh?(d.wireframe?(d=d.wireframeLinewidth,d!==eb&&(j.lineWidth(d),eb=d),a&&j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),j.drawElements(j.LINES,e.__webglLineCount,j.UNSIGNED_SHORT,0)):(a&&j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),j.drawElements(j.TRIANGLES,e.__webglFaceCount,j.UNSIGNED_SHORT,
+0)),L.info.render.calls++,L.info.render.vertices+=e.__webglFaceCount,L.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?j.LINE_STRIP:j.LINES,d=d.linewidth,d!==eb&&(j.lineWidth(d),eb=d),j.drawArrays(f,0,e.__webglLineCount),L.info.render.calls++):f instanceof THREE.ParticleSystem?(j.drawArrays(j.POINTS,0,e.__webglParticleCount),L.info.render.calls++,L.info.render.points+=e.__webglParticleCount):f instanceof THREE.Ribbon&&(j.drawArrays(j.TRIANGLE_STRIP,0,e.__webglVertexCount),
+L.info.render.calls++)}};this.render=function(a,b,c,d){if(!1===b instanceof THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e,f,g,i,h=a.__lights,k=a.fog;ta=-1;$a=!0;this.autoUpdateScene&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);fc.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);Ea.setFromMatrix(fc);this.autoUpdateObjects&&this.initWebGLObjects(a);s(this.renderPluginsPre,
 a,b);L.info.render.calls=0;L.info.render.vertices=0;L.info.render.faces=0;L.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);i=a.__webglObjects;d=0;for(e=i.length;d<e;d++)if(f=i[d],g=f.object,f.render=!1,g.visible&&(!(g instanceof THREE.Mesh||g instanceof THREE.ParticleSystem)||!g.frustumCulled||Ea.intersectsObject(g))){A(g,b);var m=f,l=m.buffer,p=void 0,t=p=void 0,t=m.object.material;if(t instanceof THREE.MeshFaceMaterial)p=
 l.materialIndex,p=t.materials[p],p.transparent?(m.transparent=p,m.opaque=null):(m.opaque=p,m.transparent=null);else if(p=t)p.transparent?(m.transparent=p,m.opaque=null):(m.opaque=p,m.transparent=null);f.render=!0;!0===this.sortObjects&&(null!==g.renderDepth?f.z=g.renderDepth:(gc.copy(g.matrixWorld.getPosition()),gc.applyProjection(fc),f.z=gc.z),f.id=g.id)}this.sortObjects&&i.sort(n);i=a.__webglObjectsImmediate;d=0;for(e=i.length;d<e;d++)f=i[d],g=f.object,g.visible&&(A(g,b),g=f.object.material,g.transparent?
 (f.transparent=g,f.opaque=null):(f.opaque=g,f.transparent=null));a.overrideMaterial?(d=a.overrideMaterial,this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst),this.setDepthTest(d.depthTest),this.setDepthWrite(d.depthWrite),I(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),q(a.__webglObjects,!1,"",b,h,k,!0,d),r(a.__webglObjectsImmediate,"",b,h,k,!1,d)):(d=null,this.setBlending(THREE.NoBlending),q(a.__webglObjects,!0,"opaque",b,h,k,!1,d),r(a.__webglObjectsImmediate,"opaque",
@@ -428,20 +427,20 @@ ha.__vertexArray=new Float32Array(3*Xa);ha.__colorArray=new Float32Array(3*Xa);h
 b instanceof THREE.ParticleSystem?(n=b.geometry,p(k.__webglObjects,n,b)):b instanceof THREE.ImmediateRenderObject||b.immediateRenderCallback?k.__webglObjectsImmediate.push({object:b,opaque:null,transparent:null}):b instanceof THREE.Sprite?k.__webglSprites.push(b):b instanceof THREE.LensFlare&&k.__webglFlares.push(b);b.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var fa=a.__objectsRemoved[0],lb=a;fa instanceof THREE.Mesh||fa instanceof THREE.ParticleSystem||fa instanceof
 THREE.Ribbon||fa instanceof THREE.Line?w(lb.__webglObjects,fa):fa instanceof THREE.Sprite?v(lb.__webglSprites,fa):fa instanceof THREE.LensFlare?v(lb.__webglFlares,fa):(fa instanceof THREE.ImmediateRenderObject||fa.immediateRenderCallback)&&w(lb.__webglObjectsImmediate,fa);fa.__webglActive=!1;a.__objectsRemoved.splice(0,1)}for(var ra=0,Ma=a.__webglObjects.length;ra<Ma;ra++){var ia=a.__webglObjects[ra].object,N=ia.geometry,ua=void 0,oa=void 0,ta=void 0;if(ia instanceof THREE.Mesh)if(N instanceof THREE.BufferGeometry)(N.verticesNeedUpdate||
 N.elementsNeedUpdate||N.uvsNeedUpdate||N.normalsNeedUpdate||N.colorsNeedUpdate||N.tangentsNeedUpdate)&&i(N,j.DYNAMIC_DRAW,!N.dynamic),N.verticesNeedUpdate=!1,N.elementsNeedUpdate=!1,N.uvsNeedUpdate=!1,N.normalsNeedUpdate=!1,N.colorsNeedUpdate=!1,N.tangentsNeedUpdate=!1;else{for(var Da=0,Gb=N.geometryGroupsList.length;Da<Gb;Da++)if(ua=N.geometryGroupsList[Da],ta=e(ia,ua),N.buffersNeedUpdate&&d(ua,ia),oa=ta.attributes&&t(ta),N.verticesNeedUpdate||N.morphTargetsNeedUpdate||N.elementsNeedUpdate||N.uvsNeedUpdate||
-N.normalsNeedUpdate||N.colorsNeedUpdate||N.tangentsNeedUpdate||oa){var sa=ua,Ha=ia,qa=j.DYNAMIC_DRAW,Na=!N.dynamic,Ea=ta;if(sa.__inittedArrays){var Ta=f(Ea),Ya=Ea.vertexColors?Ea.vertexColors:!1,hb=g(Ea),$a=Ta===THREE.SmoothShading,D=void 0,U=void 0,Qa=void 0,P=void 0,Za=void 0,Ua=void 0,Ra=void 0,nb=void 0,db=void 0,ob=void 0,pb=void 0,Q=void 0,R=void 0,S=void 0,pa=void 0,Lb=void 0,Mb=void 0,Nb=void 0,wb=void 0,Ob=void 0,Pb=void 0,Qb=void 0,xb=void 0,Rb=void 0,Sb=void 0,Tb=void 0,yb=void 0,Ub=void 0,
-Vb=void 0,Wb=void 0,Hb=void 0,Xb=void 0,Yb=void 0,Zb=void 0,Ib=void 0,ya=void 0,ec=void 0,nc=void 0,zc=void 0,Ac=void 0,ab=void 0,mc=void 0,Va=void 0,Wa=void 0,oc=void 0,hc=void 0,Oa=0,Sa=0,ic=0,jc=0,Cb=0,jb=0,Ba=0,mb=0,Pa=0,$=0,la=0,y=0,za=void 0,bb=sa.__vertexArray,Fc=sa.__uvArray,Gc=sa.__uv2Array,Db=sa.__normalArray,Ia=sa.__tangentArray,cb=sa.__colorArray,Ja=sa.__skinIndexArray,Ka=sa.__skinWeightArray,sc=sa.__morphTargetsArrays,tc=sa.__morphNormalsArrays,pd=sa.__webglCustomAttributesList,u=void 0,
-$b=sa.__faceArray,vb=sa.__lineArray,qb=Ha.geometry,Oc=qb.elementsNeedUpdate,Ec=qb.uvsNeedUpdate,Pc=qb.normalsNeedUpdate,Qc=qb.tangentsNeedUpdate,Rc=qb.colorsNeedUpdate,hd=qb.morphTargetsNeedUpdate,uc=qb.vertices,wa=sa.faces3,xa=sa.faces4,kb=qb.faces,qd=qb.faceVertexUvs[0],rd=qb.faceVertexUvs[1],vc=qb.skinIndices,pc=qb.skinWeights,qc=qb.morphTargets,Sc=qb.morphNormals;if(qb.verticesNeedUpdate){D=0;for(U=wa.length;D<U;D++)P=kb[wa[D]],Q=uc[P.a],R=uc[P.b],S=uc[P.c],bb[Sa]=Q.x,bb[Sa+1]=Q.y,bb[Sa+2]=Q.z,
-bb[Sa+3]=R.x,bb[Sa+4]=R.y,bb[Sa+5]=R.z,bb[Sa+6]=S.x,bb[Sa+7]=S.y,bb[Sa+8]=S.z,Sa+=9;D=0;for(U=xa.length;D<U;D++)P=kb[xa[D]],Q=uc[P.a],R=uc[P.b],S=uc[P.c],pa=uc[P.d],bb[Sa]=Q.x,bb[Sa+1]=Q.y,bb[Sa+2]=Q.z,bb[Sa+3]=R.x,bb[Sa+4]=R.y,bb[Sa+5]=R.z,bb[Sa+6]=S.x,bb[Sa+7]=S.y,bb[Sa+8]=S.z,bb[Sa+9]=pa.x,bb[Sa+10]=pa.y,bb[Sa+11]=pa.z,Sa+=12;j.bindBuffer(j.ARRAY_BUFFER,sa.__webglVertexBuffer);j.bufferData(j.ARRAY_BUFFER,bb,qa)}if(hd){ab=0;for(mc=qc.length;ab<mc;ab++){D=la=0;for(U=wa.length;D<U;D++)oc=wa[D],P=
-kb[oc],Q=qc[ab].vertices[P.a],R=qc[ab].vertices[P.b],S=qc[ab].vertices[P.c],Va=sc[ab],Va[la]=Q.x,Va[la+1]=Q.y,Va[la+2]=Q.z,Va[la+3]=R.x,Va[la+4]=R.y,Va[la+5]=R.z,Va[la+6]=S.x,Va[la+7]=S.y,Va[la+8]=S.z,Ea.morphNormals&&($a?(hc=Sc[ab].vertexNormals[oc],Ob=hc.a,Pb=hc.b,Qb=hc.c):Qb=Pb=Ob=Sc[ab].faceNormals[oc],Wa=tc[ab],Wa[la]=Ob.x,Wa[la+1]=Ob.y,Wa[la+2]=Ob.z,Wa[la+3]=Pb.x,Wa[la+4]=Pb.y,Wa[la+5]=Pb.z,Wa[la+6]=Qb.x,Wa[la+7]=Qb.y,Wa[la+8]=Qb.z),la+=9;D=0;for(U=xa.length;D<U;D++)oc=xa[D],P=kb[oc],Q=qc[ab].vertices[P.a],
-R=qc[ab].vertices[P.b],S=qc[ab].vertices[P.c],pa=qc[ab].vertices[P.d],Va=sc[ab],Va[la]=Q.x,Va[la+1]=Q.y,Va[la+2]=Q.z,Va[la+3]=R.x,Va[la+4]=R.y,Va[la+5]=R.z,Va[la+6]=S.x,Va[la+7]=S.y,Va[la+8]=S.z,Va[la+9]=pa.x,Va[la+10]=pa.y,Va[la+11]=pa.z,Ea.morphNormals&&($a?(hc=Sc[ab].vertexNormals[oc],Ob=hc.a,Pb=hc.b,Qb=hc.c,xb=hc.d):xb=Qb=Pb=Ob=Sc[ab].faceNormals[oc],Wa=tc[ab],Wa[la]=Ob.x,Wa[la+1]=Ob.y,Wa[la+2]=Ob.z,Wa[la+3]=Pb.x,Wa[la+4]=Pb.y,Wa[la+5]=Pb.z,Wa[la+6]=Qb.x,Wa[la+7]=Qb.y,Wa[la+8]=Qb.z,Wa[la+9]=xb.x,
-Wa[la+10]=xb.y,Wa[la+11]=xb.z),la+=12;j.bindBuffer(j.ARRAY_BUFFER,sa.__webglMorphTargetsBuffers[ab]);j.bufferData(j.ARRAY_BUFFER,sc[ab],qa);Ea.morphNormals&&(j.bindBuffer(j.ARRAY_BUFFER,sa.__webglMorphNormalsBuffers[ab]),j.bufferData(j.ARRAY_BUFFER,tc[ab],qa))}}if(pc.length){D=0;for(U=wa.length;D<U;D++)P=kb[wa[D]],Ub=pc[P.a],Vb=pc[P.b],Wb=pc[P.c],Ka[$]=Ub.x,Ka[$+1]=Ub.y,Ka[$+2]=Ub.z,Ka[$+3]=Ub.w,Ka[$+4]=Vb.x,Ka[$+5]=Vb.y,Ka[$+6]=Vb.z,Ka[$+7]=Vb.w,Ka[$+8]=Wb.x,Ka[$+9]=Wb.y,Ka[$+10]=Wb.z,Ka[$+11]=Wb.w,
+N.normalsNeedUpdate||N.colorsNeedUpdate||N.tangentsNeedUpdate||oa){var sa=ua,Ha=ia,qa=j.DYNAMIC_DRAW,Na=!N.dynamic,Ea=ta;if(sa.__inittedArrays){var Ta=f(Ea),Ya=Ea.vertexColors?Ea.vertexColors:!1,$a=g(Ea),ab=Ta===THREE.SmoothShading,D=void 0,U=void 0,Qa=void 0,P=void 0,Za=void 0,Ua=void 0,Ra=void 0,nb=void 0,eb=void 0,ob=void 0,pb=void 0,Q=void 0,R=void 0,S=void 0,pa=void 0,Lb=void 0,Mb=void 0,Nb=void 0,wb=void 0,Ob=void 0,Pb=void 0,Qb=void 0,xb=void 0,Rb=void 0,Sb=void 0,Tb=void 0,yb=void 0,Ub=void 0,
+Vb=void 0,Wb=void 0,Hb=void 0,Xb=void 0,Yb=void 0,Zb=void 0,Ib=void 0,ya=void 0,ec=void 0,nc=void 0,zc=void 0,Ac=void 0,bb=void 0,mc=void 0,Va=void 0,Wa=void 0,oc=void 0,hc=void 0,Oa=0,Sa=0,ic=0,jc=0,Cb=0,jb=0,Ba=0,mb=0,Pa=0,$=0,la=0,y=0,za=void 0,cb=sa.__vertexArray,Fc=sa.__uvArray,Gc=sa.__uv2Array,Db=sa.__normalArray,Ia=sa.__tangentArray,db=sa.__colorArray,Ja=sa.__skinIndexArray,Ka=sa.__skinWeightArray,sc=sa.__morphTargetsArrays,tc=sa.__morphNormalsArrays,pd=sa.__webglCustomAttributesList,u=void 0,
+$b=sa.__faceArray,vb=sa.__lineArray,qb=Ha.geometry,Oc=qb.elementsNeedUpdate,Ec=qb.uvsNeedUpdate,Pc=qb.normalsNeedUpdate,Qc=qb.tangentsNeedUpdate,Rc=qb.colorsNeedUpdate,hd=qb.morphTargetsNeedUpdate,uc=qb.vertices,wa=sa.faces3,xa=sa.faces4,kb=qb.faces,qd=qb.faceVertexUvs[0],rd=qb.faceVertexUvs[1],vc=qb.skinIndices,pc=qb.skinWeights,qc=qb.morphTargets,Sc=qb.morphNormals;if(qb.verticesNeedUpdate){D=0;for(U=wa.length;D<U;D++)P=kb[wa[D]],Q=uc[P.a],R=uc[P.b],S=uc[P.c],cb[Sa]=Q.x,cb[Sa+1]=Q.y,cb[Sa+2]=Q.z,
+cb[Sa+3]=R.x,cb[Sa+4]=R.y,cb[Sa+5]=R.z,cb[Sa+6]=S.x,cb[Sa+7]=S.y,cb[Sa+8]=S.z,Sa+=9;D=0;for(U=xa.length;D<U;D++)P=kb[xa[D]],Q=uc[P.a],R=uc[P.b],S=uc[P.c],pa=uc[P.d],cb[Sa]=Q.x,cb[Sa+1]=Q.y,cb[Sa+2]=Q.z,cb[Sa+3]=R.x,cb[Sa+4]=R.y,cb[Sa+5]=R.z,cb[Sa+6]=S.x,cb[Sa+7]=S.y,cb[Sa+8]=S.z,cb[Sa+9]=pa.x,cb[Sa+10]=pa.y,cb[Sa+11]=pa.z,Sa+=12;j.bindBuffer(j.ARRAY_BUFFER,sa.__webglVertexBuffer);j.bufferData(j.ARRAY_BUFFER,cb,qa)}if(hd){bb=0;for(mc=qc.length;bb<mc;bb++){D=la=0;for(U=wa.length;D<U;D++)oc=wa[D],P=
+kb[oc],Q=qc[bb].vertices[P.a],R=qc[bb].vertices[P.b],S=qc[bb].vertices[P.c],Va=sc[bb],Va[la]=Q.x,Va[la+1]=Q.y,Va[la+2]=Q.z,Va[la+3]=R.x,Va[la+4]=R.y,Va[la+5]=R.z,Va[la+6]=S.x,Va[la+7]=S.y,Va[la+8]=S.z,Ea.morphNormals&&(ab?(hc=Sc[bb].vertexNormals[oc],Ob=hc.a,Pb=hc.b,Qb=hc.c):Qb=Pb=Ob=Sc[bb].faceNormals[oc],Wa=tc[bb],Wa[la]=Ob.x,Wa[la+1]=Ob.y,Wa[la+2]=Ob.z,Wa[la+3]=Pb.x,Wa[la+4]=Pb.y,Wa[la+5]=Pb.z,Wa[la+6]=Qb.x,Wa[la+7]=Qb.y,Wa[la+8]=Qb.z),la+=9;D=0;for(U=xa.length;D<U;D++)oc=xa[D],P=kb[oc],Q=qc[bb].vertices[P.a],
+R=qc[bb].vertices[P.b],S=qc[bb].vertices[P.c],pa=qc[bb].vertices[P.d],Va=sc[bb],Va[la]=Q.x,Va[la+1]=Q.y,Va[la+2]=Q.z,Va[la+3]=R.x,Va[la+4]=R.y,Va[la+5]=R.z,Va[la+6]=S.x,Va[la+7]=S.y,Va[la+8]=S.z,Va[la+9]=pa.x,Va[la+10]=pa.y,Va[la+11]=pa.z,Ea.morphNormals&&(ab?(hc=Sc[bb].vertexNormals[oc],Ob=hc.a,Pb=hc.b,Qb=hc.c,xb=hc.d):xb=Qb=Pb=Ob=Sc[bb].faceNormals[oc],Wa=tc[bb],Wa[la]=Ob.x,Wa[la+1]=Ob.y,Wa[la+2]=Ob.z,Wa[la+3]=Pb.x,Wa[la+4]=Pb.y,Wa[la+5]=Pb.z,Wa[la+6]=Qb.x,Wa[la+7]=Qb.y,Wa[la+8]=Qb.z,Wa[la+9]=xb.x,
+Wa[la+10]=xb.y,Wa[la+11]=xb.z),la+=12;j.bindBuffer(j.ARRAY_BUFFER,sa.__webglMorphTargetsBuffers[bb]);j.bufferData(j.ARRAY_BUFFER,sc[bb],qa);Ea.morphNormals&&(j.bindBuffer(j.ARRAY_BUFFER,sa.__webglMorphNormalsBuffers[bb]),j.bufferData(j.ARRAY_BUFFER,tc[bb],qa))}}if(pc.length){D=0;for(U=wa.length;D<U;D++)P=kb[wa[D]],Ub=pc[P.a],Vb=pc[P.b],Wb=pc[P.c],Ka[$]=Ub.x,Ka[$+1]=Ub.y,Ka[$+2]=Ub.z,Ka[$+3]=Ub.w,Ka[$+4]=Vb.x,Ka[$+5]=Vb.y,Ka[$+6]=Vb.z,Ka[$+7]=Vb.w,Ka[$+8]=Wb.x,Ka[$+9]=Wb.y,Ka[$+10]=Wb.z,Ka[$+11]=Wb.w,
 Xb=vc[P.a],Yb=vc[P.b],Zb=vc[P.c],Ja[$]=Xb.x,Ja[$+1]=Xb.y,Ja[$+2]=Xb.z,Ja[$+3]=Xb.w,Ja[$+4]=Yb.x,Ja[$+5]=Yb.y,Ja[$+6]=Yb.z,Ja[$+7]=Yb.w,Ja[$+8]=Zb.x,Ja[$+9]=Zb.y,Ja[$+10]=Zb.z,Ja[$+11]=Zb.w,$+=12;D=0;for(U=xa.length;D<U;D++)P=kb[xa[D]],Ub=pc[P.a],Vb=pc[P.b],Wb=pc[P.c],Hb=pc[P.d],Ka[$]=Ub.x,Ka[$+1]=Ub.y,Ka[$+2]=Ub.z,Ka[$+3]=Ub.w,Ka[$+4]=Vb.x,Ka[$+5]=Vb.y,Ka[$+6]=Vb.z,Ka[$+7]=Vb.w,Ka[$+8]=Wb.x,Ka[$+9]=Wb.y,Ka[$+10]=Wb.z,Ka[$+11]=Wb.w,Ka[$+12]=Hb.x,Ka[$+13]=Hb.y,Ka[$+14]=Hb.z,Ka[$+15]=Hb.w,Xb=vc[P.a],
 Yb=vc[P.b],Zb=vc[P.c],Ib=vc[P.d],Ja[$]=Xb.x,Ja[$+1]=Xb.y,Ja[$+2]=Xb.z,Ja[$+3]=Xb.w,Ja[$+4]=Yb.x,Ja[$+5]=Yb.y,Ja[$+6]=Yb.z,Ja[$+7]=Yb.w,Ja[$+8]=Zb.x,Ja[$+9]=Zb.y,Ja[$+10]=Zb.z,Ja[$+11]=Zb.w,Ja[$+12]=Ib.x,Ja[$+13]=Ib.y,Ja[$+14]=Ib.z,Ja[$+15]=Ib.w,$+=16;0<$&&(j.bindBuffer(j.ARRAY_BUFFER,sa.__webglSkinIndicesBuffer),j.bufferData(j.ARRAY_BUFFER,Ja,qa),j.bindBuffer(j.ARRAY_BUFFER,sa.__webglSkinWeightsBuffer),j.bufferData(j.ARRAY_BUFFER,Ka,qa))}if(Rc&&Ya){D=0;for(U=wa.length;D<U;D++)P=kb[wa[D]],Ra=P.vertexColors,
-nb=P.color,3===Ra.length&&Ya===THREE.VertexColors?(Rb=Ra[0],Sb=Ra[1],Tb=Ra[2]):Tb=Sb=Rb=nb,cb[Pa]=Rb.r,cb[Pa+1]=Rb.g,cb[Pa+2]=Rb.b,cb[Pa+3]=Sb.r,cb[Pa+4]=Sb.g,cb[Pa+5]=Sb.b,cb[Pa+6]=Tb.r,cb[Pa+7]=Tb.g,cb[Pa+8]=Tb.b,Pa+=9;D=0;for(U=xa.length;D<U;D++)P=kb[xa[D]],Ra=P.vertexColors,nb=P.color,4===Ra.length&&Ya===THREE.VertexColors?(Rb=Ra[0],Sb=Ra[1],Tb=Ra[2],yb=Ra[3]):yb=Tb=Sb=Rb=nb,cb[Pa]=Rb.r,cb[Pa+1]=Rb.g,cb[Pa+2]=Rb.b,cb[Pa+3]=Sb.r,cb[Pa+4]=Sb.g,cb[Pa+5]=Sb.b,cb[Pa+6]=Tb.r,cb[Pa+7]=Tb.g,cb[Pa+8]=
-Tb.b,cb[Pa+9]=yb.r,cb[Pa+10]=yb.g,cb[Pa+11]=yb.b,Pa+=12;0<Pa&&(j.bindBuffer(j.ARRAY_BUFFER,sa.__webglColorBuffer),j.bufferData(j.ARRAY_BUFFER,cb,qa))}if(Qc&&qb.hasTangents){D=0;for(U=wa.length;D<U;D++)P=kb[wa[D]],db=P.vertexTangents,Lb=db[0],Mb=db[1],Nb=db[2],Ia[Ba]=Lb.x,Ia[Ba+1]=Lb.y,Ia[Ba+2]=Lb.z,Ia[Ba+3]=Lb.w,Ia[Ba+4]=Mb.x,Ia[Ba+5]=Mb.y,Ia[Ba+6]=Mb.z,Ia[Ba+7]=Mb.w,Ia[Ba+8]=Nb.x,Ia[Ba+9]=Nb.y,Ia[Ba+10]=Nb.z,Ia[Ba+11]=Nb.w,Ba+=12;D=0;for(U=xa.length;D<U;D++)P=kb[xa[D]],db=P.vertexTangents,Lb=db[0],
-Mb=db[1],Nb=db[2],wb=db[3],Ia[Ba]=Lb.x,Ia[Ba+1]=Lb.y,Ia[Ba+2]=Lb.z,Ia[Ba+3]=Lb.w,Ia[Ba+4]=Mb.x,Ia[Ba+5]=Mb.y,Ia[Ba+6]=Mb.z,Ia[Ba+7]=Mb.w,Ia[Ba+8]=Nb.x,Ia[Ba+9]=Nb.y,Ia[Ba+10]=Nb.z,Ia[Ba+11]=Nb.w,Ia[Ba+12]=wb.x,Ia[Ba+13]=wb.y,Ia[Ba+14]=wb.z,Ia[Ba+15]=wb.w,Ba+=16;j.bindBuffer(j.ARRAY_BUFFER,sa.__webglTangentBuffer);j.bufferData(j.ARRAY_BUFFER,Ia,qa)}if(Pc&&Ta){D=0;for(U=wa.length;D<U;D++)if(P=kb[wa[D]],Za=P.vertexNormals,Ua=P.normal,3===Za.length&&$a)for(ya=0;3>ya;ya++)nc=Za[ya],Db[jb]=nc.x,Db[jb+1]=
-nc.y,Db[jb+2]=nc.z,jb+=3;else for(ya=0;3>ya;ya++)Db[jb]=Ua.x,Db[jb+1]=Ua.y,Db[jb+2]=Ua.z,jb+=3;D=0;for(U=xa.length;D<U;D++)if(P=kb[xa[D]],Za=P.vertexNormals,Ua=P.normal,4===Za.length&&$a)for(ya=0;4>ya;ya++)nc=Za[ya],Db[jb]=nc.x,Db[jb+1]=nc.y,Db[jb+2]=nc.z,jb+=3;else for(ya=0;4>ya;ya++)Db[jb]=Ua.x,Db[jb+1]=Ua.y,Db[jb+2]=Ua.z,jb+=3;j.bindBuffer(j.ARRAY_BUFFER,sa.__webglNormalBuffer);j.bufferData(j.ARRAY_BUFFER,Db,qa)}if(Ec&&qd&&hb){D=0;for(U=wa.length;D<U;D++)if(Qa=wa[D],ob=qd[Qa],void 0!==ob)for(ya=
-0;3>ya;ya++)zc=ob[ya],Fc[ic]=zc.x,Fc[ic+1]=zc.y,ic+=2;D=0;for(U=xa.length;D<U;D++)if(Qa=xa[D],ob=qd[Qa],void 0!==ob)for(ya=0;4>ya;ya++)zc=ob[ya],Fc[ic]=zc.x,Fc[ic+1]=zc.y,ic+=2;0<ic&&(j.bindBuffer(j.ARRAY_BUFFER,sa.__webglUVBuffer),j.bufferData(j.ARRAY_BUFFER,Fc,qa))}if(Ec&&rd&&hb){D=0;for(U=wa.length;D<U;D++)if(Qa=wa[D],pb=rd[Qa],void 0!==pb)for(ya=0;3>ya;ya++)Ac=pb[ya],Gc[jc]=Ac.x,Gc[jc+1]=Ac.y,jc+=2;D=0;for(U=xa.length;D<U;D++)if(Qa=xa[D],pb=rd[Qa],void 0!==pb)for(ya=0;4>ya;ya++)Ac=pb[ya],Gc[jc]=
+nb=P.color,3===Ra.length&&Ya===THREE.VertexColors?(Rb=Ra[0],Sb=Ra[1],Tb=Ra[2]):Tb=Sb=Rb=nb,db[Pa]=Rb.r,db[Pa+1]=Rb.g,db[Pa+2]=Rb.b,db[Pa+3]=Sb.r,db[Pa+4]=Sb.g,db[Pa+5]=Sb.b,db[Pa+6]=Tb.r,db[Pa+7]=Tb.g,db[Pa+8]=Tb.b,Pa+=9;D=0;for(U=xa.length;D<U;D++)P=kb[xa[D]],Ra=P.vertexColors,nb=P.color,4===Ra.length&&Ya===THREE.VertexColors?(Rb=Ra[0],Sb=Ra[1],Tb=Ra[2],yb=Ra[3]):yb=Tb=Sb=Rb=nb,db[Pa]=Rb.r,db[Pa+1]=Rb.g,db[Pa+2]=Rb.b,db[Pa+3]=Sb.r,db[Pa+4]=Sb.g,db[Pa+5]=Sb.b,db[Pa+6]=Tb.r,db[Pa+7]=Tb.g,db[Pa+8]=
+Tb.b,db[Pa+9]=yb.r,db[Pa+10]=yb.g,db[Pa+11]=yb.b,Pa+=12;0<Pa&&(j.bindBuffer(j.ARRAY_BUFFER,sa.__webglColorBuffer),j.bufferData(j.ARRAY_BUFFER,db,qa))}if(Qc&&qb.hasTangents){D=0;for(U=wa.length;D<U;D++)P=kb[wa[D]],eb=P.vertexTangents,Lb=eb[0],Mb=eb[1],Nb=eb[2],Ia[Ba]=Lb.x,Ia[Ba+1]=Lb.y,Ia[Ba+2]=Lb.z,Ia[Ba+3]=Lb.w,Ia[Ba+4]=Mb.x,Ia[Ba+5]=Mb.y,Ia[Ba+6]=Mb.z,Ia[Ba+7]=Mb.w,Ia[Ba+8]=Nb.x,Ia[Ba+9]=Nb.y,Ia[Ba+10]=Nb.z,Ia[Ba+11]=Nb.w,Ba+=12;D=0;for(U=xa.length;D<U;D++)P=kb[xa[D]],eb=P.vertexTangents,Lb=eb[0],
+Mb=eb[1],Nb=eb[2],wb=eb[3],Ia[Ba]=Lb.x,Ia[Ba+1]=Lb.y,Ia[Ba+2]=Lb.z,Ia[Ba+3]=Lb.w,Ia[Ba+4]=Mb.x,Ia[Ba+5]=Mb.y,Ia[Ba+6]=Mb.z,Ia[Ba+7]=Mb.w,Ia[Ba+8]=Nb.x,Ia[Ba+9]=Nb.y,Ia[Ba+10]=Nb.z,Ia[Ba+11]=Nb.w,Ia[Ba+12]=wb.x,Ia[Ba+13]=wb.y,Ia[Ba+14]=wb.z,Ia[Ba+15]=wb.w,Ba+=16;j.bindBuffer(j.ARRAY_BUFFER,sa.__webglTangentBuffer);j.bufferData(j.ARRAY_BUFFER,Ia,qa)}if(Pc&&Ta){D=0;for(U=wa.length;D<U;D++)if(P=kb[wa[D]],Za=P.vertexNormals,Ua=P.normal,3===Za.length&&ab)for(ya=0;3>ya;ya++)nc=Za[ya],Db[jb]=nc.x,Db[jb+1]=
+nc.y,Db[jb+2]=nc.z,jb+=3;else for(ya=0;3>ya;ya++)Db[jb]=Ua.x,Db[jb+1]=Ua.y,Db[jb+2]=Ua.z,jb+=3;D=0;for(U=xa.length;D<U;D++)if(P=kb[xa[D]],Za=P.vertexNormals,Ua=P.normal,4===Za.length&&ab)for(ya=0;4>ya;ya++)nc=Za[ya],Db[jb]=nc.x,Db[jb+1]=nc.y,Db[jb+2]=nc.z,jb+=3;else for(ya=0;4>ya;ya++)Db[jb]=Ua.x,Db[jb+1]=Ua.y,Db[jb+2]=Ua.z,jb+=3;j.bindBuffer(j.ARRAY_BUFFER,sa.__webglNormalBuffer);j.bufferData(j.ARRAY_BUFFER,Db,qa)}if(Ec&&qd&&$a){D=0;for(U=wa.length;D<U;D++)if(Qa=wa[D],ob=qd[Qa],void 0!==ob)for(ya=
+0;3>ya;ya++)zc=ob[ya],Fc[ic]=zc.x,Fc[ic+1]=zc.y,ic+=2;D=0;for(U=xa.length;D<U;D++)if(Qa=xa[D],ob=qd[Qa],void 0!==ob)for(ya=0;4>ya;ya++)zc=ob[ya],Fc[ic]=zc.x,Fc[ic+1]=zc.y,ic+=2;0<ic&&(j.bindBuffer(j.ARRAY_BUFFER,sa.__webglUVBuffer),j.bufferData(j.ARRAY_BUFFER,Fc,qa))}if(Ec&&rd&&$a){D=0;for(U=wa.length;D<U;D++)if(Qa=wa[D],pb=rd[Qa],void 0!==pb)for(ya=0;3>ya;ya++)Ac=pb[ya],Gc[jc]=Ac.x,Gc[jc+1]=Ac.y,jc+=2;D=0;for(U=xa.length;D<U;D++)if(Qa=xa[D],pb=rd[Qa],void 0!==pb)for(ya=0;4>ya;ya++)Ac=pb[ya],Gc[jc]=
 Ac.x,Gc[jc+1]=Ac.y,jc+=2;0<jc&&(j.bindBuffer(j.ARRAY_BUFFER,sa.__webglUV2Buffer),j.bufferData(j.ARRAY_BUFFER,Gc,qa))}if(Oc){D=0;for(U=wa.length;D<U;D++)$b[Cb]=Oa,$b[Cb+1]=Oa+1,$b[Cb+2]=Oa+2,Cb+=3,vb[mb]=Oa,vb[mb+1]=Oa+1,vb[mb+2]=Oa,vb[mb+3]=Oa+2,vb[mb+4]=Oa+1,vb[mb+5]=Oa+2,mb+=6,Oa+=3;D=0;for(U=xa.length;D<U;D++)$b[Cb]=Oa,$b[Cb+1]=Oa+1,$b[Cb+2]=Oa+3,$b[Cb+3]=Oa+1,$b[Cb+4]=Oa+2,$b[Cb+5]=Oa+3,Cb+=6,vb[mb]=Oa,vb[mb+1]=Oa+1,vb[mb+2]=Oa,vb[mb+3]=Oa+3,vb[mb+4]=Oa+1,vb[mb+5]=Oa+2,vb[mb+6]=Oa+2,vb[mb+7]=
 Oa+3,mb+=8,Oa+=4;j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,sa.__webglFaceBuffer);j.bufferData(j.ELEMENT_ARRAY_BUFFER,$b,qa);j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,sa.__webglLineBuffer);j.bufferData(j.ELEMENT_ARRAY_BUFFER,vb,qa)}if(pd){ya=0;for(ec=pd.length;ya<ec;ya++)if(u=pd[ya],u.__original.needsUpdate){y=0;if(1===u.size)if(void 0===u.boundTo||"vertices"===u.boundTo){D=0;for(U=wa.length;D<U;D++)P=kb[wa[D]],u.array[y]=u.value[P.a],u.array[y+1]=u.value[P.b],u.array[y+2]=u.value[P.c],y+=3;D=0;for(U=xa.length;D<
 U;D++)P=kb[xa[D]],u.array[y]=u.value[P.a],u.array[y+1]=u.value[P.b],u.array[y+2]=u.value[P.c],u.array[y+3]=u.value[P.d],y+=4}else{if("faces"===u.boundTo){D=0;for(U=wa.length;D<U;D++)za=u.value[wa[D]],u.array[y]=za,u.array[y+1]=za,u.array[y+2]=za,y+=3;D=0;for(U=xa.length;D<U;D++)za=u.value[xa[D]],u.array[y]=za,u.array[y+1]=za,u.array[y+2]=za,u.array[y+3]=za,y+=4}}else if(2===u.size)if(void 0===u.boundTo||"vertices"===u.boundTo){D=0;for(U=wa.length;D<U;D++)P=kb[wa[D]],Q=u.value[P.a],R=u.value[P.b],
@@ -456,13 +455,13 @@ R=Q=za=u.value[wa[D]],u.array[y]=Q.x,u.array[y+1]=Q.y,u.array[y+2]=Q.z,u.array[y
 12]=pa.x,u.array[y+13]=pa.y,u.array[y+14]=pa.z,u.array[y+15]=pa.w,y+=16}else if("faceVertices"===u.boundTo){D=0;for(U=wa.length;D<U;D++)za=u.value[wa[D]],Q=za[0],R=za[1],S=za[2],u.array[y]=Q.x,u.array[y+1]=Q.y,u.array[y+2]=Q.z,u.array[y+3]=Q.w,u.array[y+4]=R.x,u.array[y+5]=R.y,u.array[y+6]=R.z,u.array[y+7]=R.w,u.array[y+8]=S.x,u.array[y+9]=S.y,u.array[y+10]=S.z,u.array[y+11]=S.w,y+=12;D=0;for(U=xa.length;D<U;D++)za=u.value[xa[D]],Q=za[0],R=za[1],S=za[2],pa=za[3],u.array[y]=Q.x,u.array[y+1]=Q.y,u.array[y+
 2]=Q.z,u.array[y+3]=Q.w,u.array[y+4]=R.x,u.array[y+5]=R.y,u.array[y+6]=R.z,u.array[y+7]=R.w,u.array[y+8]=S.x,u.array[y+9]=S.y,u.array[y+10]=S.z,u.array[y+11]=S.w,u.array[y+12]=pa.x,u.array[y+13]=pa.y,u.array[y+14]=pa.z,u.array[y+15]=pa.w,y+=16}j.bindBuffer(j.ARRAY_BUFFER,u.buffer);j.bufferData(j.ARRAY_BUFFER,u.array,qa)}}Na&&(delete sa.__inittedArrays,delete sa.__colorArray,delete sa.__normalArray,delete sa.__tangentArray,delete sa.__uvArray,delete sa.__uv2Array,delete sa.__faceArray,delete sa.__vertexArray,
 delete sa.__lineArray,delete sa.__skinIndexArray,delete sa.__skinWeightArray)}}N.verticesNeedUpdate=!1;N.morphTargetsNeedUpdate=!1;N.elementsNeedUpdate=!1;N.uvsNeedUpdate=!1;N.normalsNeedUpdate=!1;N.colorsNeedUpdate=!1;N.tangentsNeedUpdate=!1;N.buffersNeedUpdate=!1;ta.attributes&&x(ta)}else if(ia instanceof THREE.Ribbon){ta=e(ia,N);oa=ta.attributes&&t(ta);if(N.verticesNeedUpdate||N.colorsNeedUpdate||N.normalsNeedUpdate||oa){var Eb=N,Tc=j.DYNAMIC_DRAW,Hc=void 0,Ic=void 0,Jc=void 0,Uc=void 0,Aa=void 0,
-Vc=void 0,Wc=void 0,Xc=void 0,yd=void 0,fb=void 0,Bc=void 0,Fa=void 0,rb=void 0,zd=Eb.vertices,Ad=Eb.colors,Bd=Eb.normals,id=zd.length,jd=Ad.length,kd=Bd.length,Yc=Eb.__vertexArray,Zc=Eb.__colorArray,$c=Eb.__normalArray,ld=Eb.colorsNeedUpdate,md=Eb.normalsNeedUpdate,sd=Eb.__webglCustomAttributesList;if(Eb.verticesNeedUpdate){for(Hc=0;Hc<id;Hc++)Uc=zd[Hc],Aa=3*Hc,Yc[Aa]=Uc.x,Yc[Aa+1]=Uc.y,Yc[Aa+2]=Uc.z;j.bindBuffer(j.ARRAY_BUFFER,Eb.__webglVertexBuffer);j.bufferData(j.ARRAY_BUFFER,Yc,Tc)}if(ld){for(Ic=
-0;Ic<jd;Ic++)Vc=Ad[Ic],Aa=3*Ic,Zc[Aa]=Vc.r,Zc[Aa+1]=Vc.g,Zc[Aa+2]=Vc.b;j.bindBuffer(j.ARRAY_BUFFER,Eb.__webglColorBuffer);j.bufferData(j.ARRAY_BUFFER,Zc,Tc)}if(md){for(Jc=0;Jc<kd;Jc++)Wc=Bd[Jc],Aa=3*Jc,$c[Aa]=Wc.x,$c[Aa+1]=Wc.y,$c[Aa+2]=Wc.z;j.bindBuffer(j.ARRAY_BUFFER,Eb.__webglNormalBuffer);j.bufferData(j.ARRAY_BUFFER,$c,Tc)}if(sd){Xc=0;for(yd=sd.length;Xc<yd;Xc++)if(Fa=sd[Xc],Fa.needsUpdate&&(void 0===Fa.boundTo||"vertices"===Fa.boundTo)){Aa=0;Bc=Fa.value.length;if(1===Fa.size)for(fb=0;fb<Bc;fb++)Fa.array[fb]=
-Fa.value[fb];else if(2===Fa.size)for(fb=0;fb<Bc;fb++)rb=Fa.value[fb],Fa.array[Aa]=rb.x,Fa.array[Aa+1]=rb.y,Aa+=2;else if(3===Fa.size)if("c"===Fa.type)for(fb=0;fb<Bc;fb++)rb=Fa.value[fb],Fa.array[Aa]=rb.r,Fa.array[Aa+1]=rb.g,Fa.array[Aa+2]=rb.b,Aa+=3;else for(fb=0;fb<Bc;fb++)rb=Fa.value[fb],Fa.array[Aa]=rb.x,Fa.array[Aa+1]=rb.y,Fa.array[Aa+2]=rb.z,Aa+=3;else if(4===Fa.size)for(fb=0;fb<Bc;fb++)rb=Fa.value[fb],Fa.array[Aa]=rb.x,Fa.array[Aa+1]=rb.y,Fa.array[Aa+2]=rb.z,Fa.array[Aa+3]=rb.w,Aa+=4;j.bindBuffer(j.ARRAY_BUFFER,
+Vc=void 0,Wc=void 0,Xc=void 0,yd=void 0,gb=void 0,Bc=void 0,Fa=void 0,rb=void 0,zd=Eb.vertices,Ad=Eb.colors,Bd=Eb.normals,id=zd.length,jd=Ad.length,kd=Bd.length,Yc=Eb.__vertexArray,Zc=Eb.__colorArray,$c=Eb.__normalArray,ld=Eb.colorsNeedUpdate,md=Eb.normalsNeedUpdate,sd=Eb.__webglCustomAttributesList;if(Eb.verticesNeedUpdate){for(Hc=0;Hc<id;Hc++)Uc=zd[Hc],Aa=3*Hc,Yc[Aa]=Uc.x,Yc[Aa+1]=Uc.y,Yc[Aa+2]=Uc.z;j.bindBuffer(j.ARRAY_BUFFER,Eb.__webglVertexBuffer);j.bufferData(j.ARRAY_BUFFER,Yc,Tc)}if(ld){for(Ic=
+0;Ic<jd;Ic++)Vc=Ad[Ic],Aa=3*Ic,Zc[Aa]=Vc.r,Zc[Aa+1]=Vc.g,Zc[Aa+2]=Vc.b;j.bindBuffer(j.ARRAY_BUFFER,Eb.__webglColorBuffer);j.bufferData(j.ARRAY_BUFFER,Zc,Tc)}if(md){for(Jc=0;Jc<kd;Jc++)Wc=Bd[Jc],Aa=3*Jc,$c[Aa]=Wc.x,$c[Aa+1]=Wc.y,$c[Aa+2]=Wc.z;j.bindBuffer(j.ARRAY_BUFFER,Eb.__webglNormalBuffer);j.bufferData(j.ARRAY_BUFFER,$c,Tc)}if(sd){Xc=0;for(yd=sd.length;Xc<yd;Xc++)if(Fa=sd[Xc],Fa.needsUpdate&&(void 0===Fa.boundTo||"vertices"===Fa.boundTo)){Aa=0;Bc=Fa.value.length;if(1===Fa.size)for(gb=0;gb<Bc;gb++)Fa.array[gb]=
+Fa.value[gb];else if(2===Fa.size)for(gb=0;gb<Bc;gb++)rb=Fa.value[gb],Fa.array[Aa]=rb.x,Fa.array[Aa+1]=rb.y,Aa+=2;else if(3===Fa.size)if("c"===Fa.type)for(gb=0;gb<Bc;gb++)rb=Fa.value[gb],Fa.array[Aa]=rb.r,Fa.array[Aa+1]=rb.g,Fa.array[Aa+2]=rb.b,Aa+=3;else for(gb=0;gb<Bc;gb++)rb=Fa.value[gb],Fa.array[Aa]=rb.x,Fa.array[Aa+1]=rb.y,Fa.array[Aa+2]=rb.z,Aa+=3;else if(4===Fa.size)for(gb=0;gb<Bc;gb++)rb=Fa.value[gb],Fa.array[Aa]=rb.x,Fa.array[Aa+1]=rb.y,Fa.array[Aa+2]=rb.z,Fa.array[Aa+3]=rb.w,Aa+=4;j.bindBuffer(j.ARRAY_BUFFER,
 Fa.buffer);j.bufferData(j.ARRAY_BUFFER,Fa.array,Tc)}}}N.verticesNeedUpdate=!1;N.colorsNeedUpdate=!1;N.normalsNeedUpdate=!1;ta.attributes&&x(ta)}else if(ia instanceof THREE.Line)if(N instanceof THREE.BufferGeometry)(N.verticesNeedUpdate||N.colorsNeedUpdate)&&i(N,j.DYNAMIC_DRAW,!N.dynamic),N.verticesNeedUpdate=!1,N.colorsNeedUpdate=!1;else{ta=e(ia,N);oa=ta.attributes&&t(ta);if(N.verticesNeedUpdate||N.colorsNeedUpdate||N.lineDistancesNeedUpdate||oa){var Fb=N,ad=j.DYNAMIC_DRAW,Kc=void 0,Lc=void 0,Mc=
-void 0,bd=void 0,La=void 0,cd=void 0,Cd=Fb.vertices,Dd=Fb.colors,Ed=Fb.lineDistances,nd=Cd.length,Kd=Dd.length,Ld=Ed.length,dd=Fb.__vertexArray,ed=Fb.__colorArray,Fd=Fb.__lineDistanceArray,Md=Fb.colorsNeedUpdate,Nd=Fb.lineDistancesNeedUpdate,td=Fb.__webglCustomAttributesList,fd=void 0,Gd=void 0,gb=void 0,Cc=void 0,sb=void 0,Ga=void 0;if(Fb.verticesNeedUpdate){for(Kc=0;Kc<nd;Kc++)bd=Cd[Kc],La=3*Kc,dd[La]=bd.x,dd[La+1]=bd.y,dd[La+2]=bd.z;j.bindBuffer(j.ARRAY_BUFFER,Fb.__webglVertexBuffer);j.bufferData(j.ARRAY_BUFFER,
-dd,ad)}if(Md){for(Lc=0;Lc<Kd;Lc++)cd=Dd[Lc],La=3*Lc,ed[La]=cd.r,ed[La+1]=cd.g,ed[La+2]=cd.b;j.bindBuffer(j.ARRAY_BUFFER,Fb.__webglColorBuffer);j.bufferData(j.ARRAY_BUFFER,ed,ad)}if(Nd){for(Mc=0;Mc<Ld;Mc++)Fd[Mc]=Ed[Mc];j.bindBuffer(j.ARRAY_BUFFER,Fb.__webglLineDistanceBuffer);j.bufferData(j.ARRAY_BUFFER,Fd,ad)}if(td){fd=0;for(Gd=td.length;fd<Gd;fd++)if(Ga=td[fd],Ga.needsUpdate&&(void 0===Ga.boundTo||"vertices"===Ga.boundTo)){La=0;Cc=Ga.value.length;if(1===Ga.size)for(gb=0;gb<Cc;gb++)Ga.array[gb]=
-Ga.value[gb];else if(2===Ga.size)for(gb=0;gb<Cc;gb++)sb=Ga.value[gb],Ga.array[La]=sb.x,Ga.array[La+1]=sb.y,La+=2;else if(3===Ga.size)if("c"===Ga.type)for(gb=0;gb<Cc;gb++)sb=Ga.value[gb],Ga.array[La]=sb.r,Ga.array[La+1]=sb.g,Ga.array[La+2]=sb.b,La+=3;else for(gb=0;gb<Cc;gb++)sb=Ga.value[gb],Ga.array[La]=sb.x,Ga.array[La+1]=sb.y,Ga.array[La+2]=sb.z,La+=3;else if(4===Ga.size)for(gb=0;gb<Cc;gb++)sb=Ga.value[gb],Ga.array[La]=sb.x,Ga.array[La+1]=sb.y,Ga.array[La+2]=sb.z,Ga.array[La+3]=sb.w,La+=4;j.bindBuffer(j.ARRAY_BUFFER,
+void 0,bd=void 0,La=void 0,cd=void 0,Cd=Fb.vertices,Dd=Fb.colors,Ed=Fb.lineDistances,nd=Cd.length,Kd=Dd.length,Ld=Ed.length,dd=Fb.__vertexArray,ed=Fb.__colorArray,Fd=Fb.__lineDistanceArray,Md=Fb.colorsNeedUpdate,Nd=Fb.lineDistancesNeedUpdate,td=Fb.__webglCustomAttributesList,fd=void 0,Gd=void 0,hb=void 0,Cc=void 0,sb=void 0,Ga=void 0;if(Fb.verticesNeedUpdate){for(Kc=0;Kc<nd;Kc++)bd=Cd[Kc],La=3*Kc,dd[La]=bd.x,dd[La+1]=bd.y,dd[La+2]=bd.z;j.bindBuffer(j.ARRAY_BUFFER,Fb.__webglVertexBuffer);j.bufferData(j.ARRAY_BUFFER,
+dd,ad)}if(Md){for(Lc=0;Lc<Kd;Lc++)cd=Dd[Lc],La=3*Lc,ed[La]=cd.r,ed[La+1]=cd.g,ed[La+2]=cd.b;j.bindBuffer(j.ARRAY_BUFFER,Fb.__webglColorBuffer);j.bufferData(j.ARRAY_BUFFER,ed,ad)}if(Nd){for(Mc=0;Mc<Ld;Mc++)Fd[Mc]=Ed[Mc];j.bindBuffer(j.ARRAY_BUFFER,Fb.__webglLineDistanceBuffer);j.bufferData(j.ARRAY_BUFFER,Fd,ad)}if(td){fd=0;for(Gd=td.length;fd<Gd;fd++)if(Ga=td[fd],Ga.needsUpdate&&(void 0===Ga.boundTo||"vertices"===Ga.boundTo)){La=0;Cc=Ga.value.length;if(1===Ga.size)for(hb=0;hb<Cc;hb++)Ga.array[hb]=
+Ga.value[hb];else if(2===Ga.size)for(hb=0;hb<Cc;hb++)sb=Ga.value[hb],Ga.array[La]=sb.x,Ga.array[La+1]=sb.y,La+=2;else if(3===Ga.size)if("c"===Ga.type)for(hb=0;hb<Cc;hb++)sb=Ga.value[hb],Ga.array[La]=sb.r,Ga.array[La+1]=sb.g,Ga.array[La+2]=sb.b,La+=3;else for(hb=0;hb<Cc;hb++)sb=Ga.value[hb],Ga.array[La]=sb.x,Ga.array[La+1]=sb.y,Ga.array[La+2]=sb.z,La+=3;else if(4===Ga.size)for(hb=0;hb<Cc;hb++)sb=Ga.value[hb],Ga.array[La]=sb.x,Ga.array[La+1]=sb.y,Ga.array[La+2]=sb.z,Ga.array[La+3]=sb.w,La+=4;j.bindBuffer(j.ARRAY_BUFFER,
 Ga.buffer);j.bufferData(j.ARRAY_BUFFER,Ga.array,ad)}}}N.verticesNeedUpdate=!1;N.colorsNeedUpdate=!1;N.lineDistancesNeedUpdate=!1;ta.attributes&&x(ta)}else if(ia instanceof THREE.ParticleSystem)if(N instanceof THREE.BufferGeometry)(N.verticesNeedUpdate||N.colorsNeedUpdate)&&i(N,j.DYNAMIC_DRAW,!N.dynamic),N.verticesNeedUpdate=!1,N.colorsNeedUpdate=!1;else{ta=e(ia,N);oa=ta.attributes&&t(ta);if(N.verticesNeedUpdate||N.colorsNeedUpdate||ia.sortParticles||oa){var ac=N,ud=j.DYNAMIC_DRAW,Nc=ia,tb=void 0,
 bc=void 0,cc=void 0,ca=void 0,dc=void 0,rc=void 0,gd=ac.vertices,vd=gd.length,wd=ac.colors,Hd=wd.length,wc=ac.__vertexArray,xc=ac.__colorArray,kc=ac.__sortArray,Id=ac.verticesNeedUpdate,Jd=ac.colorsNeedUpdate,lc=ac.__webglCustomAttributesList,Jb=void 0,Dc=void 0,na=void 0,Kb=void 0,Ca=void 0,ba=void 0;if(Nc.sortParticles){ub.copy(fc);ub.multiply(Nc.matrixWorld);for(tb=0;tb<vd;tb++)cc=gd[tb],gc.copy(cc),gc.applyProjection(ub),kc[tb]=[gc.z,tb];kc.sort(m);for(tb=0;tb<vd;tb++)cc=gd[kc[tb][1]],ca=3*tb,
 wc[ca]=cc.x,wc[ca+1]=cc.y,wc[ca+2]=cc.z;for(bc=0;bc<Hd;bc++)ca=3*bc,rc=wd[kc[bc][1]],xc[ca]=rc.r,xc[ca+1]=rc.g,xc[ca+2]=rc.b;if(lc){Jb=0;for(Dc=lc.length;Jb<Dc;Jb++)if(ba=lc[Jb],void 0===ba.boundTo||"vertices"===ba.boundTo)if(ca=0,Kb=ba.value.length,1===ba.size)for(na=0;na<Kb;na++)dc=kc[na][1],ba.array[na]=ba.value[dc];else if(2===ba.size)for(na=0;na<Kb;na++)dc=kc[na][1],Ca=ba.value[dc],ba.array[ca]=Ca.x,ba.array[ca+1]=Ca.y,ca+=2;else if(3===ba.size)if("c"===ba.type)for(na=0;na<Kb;na++)dc=kc[na][1],
@@ -679,7 +678,7 @@ F.shadowCameraBottom=v.shadowCameraBottom;F.shadowCameraTop=v.shadowCameraTop;F.
 x=x.shadowCascadeFarZ[w];v=v.pointsFrustum;v[0].z=t;v[1].z=t;v[2].z=t;v[3].z=t;v[4].z=x;v[5].z=x;v[6].z=x;v[7].z=x;H[r]=F;r++}else H[r]=q,r++;m=0;for(s=H.length;m<s;m++){q=H[m];q.shadowMap||(p=THREE.LinearFilter,b.shadowMapType===THREE.PCFSoftShadowMap&&(p=THREE.NearestFilter),q.shadowMap=new THREE.WebGLRenderTarget(q.shadowMapWidth,q.shadowMapHeight,{minFilter:p,magFilter:p,format:THREE.RGBAFormat}),q.shadowMapSize=new THREE.Vector2(q.shadowMapWidth,q.shadowMapHeight),q.shadowMatrix=new THREE.Matrix4);
 if(!q.shadowCamera){if(q instanceof THREE.SpotLight)q.shadowCamera=new THREE.PerspectiveCamera(q.shadowCameraFov,q.shadowMapWidth/q.shadowMapHeight,q.shadowCameraNear,q.shadowCameraFar);else if(q instanceof THREE.DirectionalLight)q.shadowCamera=new THREE.OrthographicCamera(q.shadowCameraLeft,q.shadowCameraRight,q.shadowCameraTop,q.shadowCameraBottom,q.shadowCameraNear,q.shadowCameraFar);else{console.error("Unsupported light type for shadow");continue}l.add(q.shadowCamera);b.autoUpdateScene&&l.updateMatrixWorld()}q.shadowCameraVisible&&
 !q.cameraHelper&&(q.cameraHelper=new THREE.CameraHelper(q.shadowCamera),q.shadowCamera.add(q.cameraHelper));if(q.isVirtual&&F.originalCamera==n){p=n;r=q.shadowCamera;t=q.pointsFrustum;v=q.pointsWorld;i.set(Infinity,Infinity,Infinity);k.set(-Infinity,-Infinity,-Infinity);for(x=0;8>x;x++)w=v[x],w.copy(t[x]),THREE.ShadowMapPlugin.__projector.unprojectVector(w,p),w.applyMatrix4(r.matrixWorldInverse),w.x<i.x&&(i.x=w.x),w.x>k.x&&(k.x=w.x),w.y<i.y&&(i.y=w.y),w.y>k.y&&(k.y=w.y),w.z<i.z&&(i.z=w.z),w.z>k.z&&
-(k.z=w.z);r.left=i.x;r.right=k.x;r.top=k.y;r.bottom=i.y;r.updateProjectionMatrix()}r=q.shadowMap;t=q.shadowMatrix;p=q.shadowCamera;p.position.copy(q.matrixWorld.getPosition());p.lookAt(q.target.matrixWorld.getPosition());p.updateMatrixWorld();p.matrixWorldInverse.getInverse(p.matrixWorld);q.cameraHelper&&(q.cameraHelper.visible=q.shadowCameraVisible);q.shadowCameraVisible&&q.cameraHelper.update();t.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);t.multiply(p.projectionMatrix);t.multiply(p.matrixWorldInverse);
+(k.z=w.z);r.left=i.x;r.right=k.x;r.top=k.y;r.bottom=i.y;r.updateProjectionMatrix()}r=q.shadowMap;t=q.shadowMatrix;p=q.shadowCamera;p.position.getPositionFromMatrix(q.matrixWorld);p.lookAt(q.target.matrixWorld.getPosition());p.updateMatrixWorld();p.matrixWorldInverse.getInverse(p.matrixWorld);q.cameraHelper&&(q.cameraHelper.visible=q.shadowCameraVisible);q.shadowCameraVisible&&q.cameraHelper.update();t.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);t.multiply(p.projectionMatrix);t.multiply(p.matrixWorldInverse);
 h.multiplyMatrices(p.projectionMatrix,p.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(r);b.clear();v=l.__webglObjects;q=0;for(r=v.length;q<r;q++)if(x=v[q],t=x.object,x.render=!1,t.visible&&t.castShadow&&(!(t instanceof THREE.Mesh||t instanceof THREE.ParticleSystem)||!t.frustumCulled||g.intersectsObject(t)))t._modelViewMatrix.multiplyMatrices(p.matrixWorldInverse,t.matrixWorld),x.render=!0;q=0;for(r=v.length;q<r;q++)x=v[q],x.render&&(t=x.object,x=x.buffer,A=t.material instanceof THREE.MeshFaceMaterial?
 t.material.materials[0]:t.material,w=0<t.geometry.morphTargets.length&&A.morphTargets,A=t instanceof THREE.SkinnedMesh&&A.skinning,w=t.customDepthMaterial?t.customDepthMaterial:A?w?f:e:w?d:c,x instanceof THREE.BufferGeometry?b.renderBufferDirect(p,l.__lights,null,w,x,t):b.renderBuffer(p,l.__lights,null,w,x,t));v=l.__webglObjectsImmediate;q=0;for(r=v.length;q<r;q++)x=v[q],t=x.object,t.visible&&t.castShadow&&(t._modelViewMatrix.multiplyMatrices(p.matrixWorldInverse,t.matrixWorld),b.renderImmediateObject(p,
 l.__lights,null,c,t))}m=b.getClearColor();s=b.getClearAlpha();a.clearColor(m.r,m.g,m.b,s);a.enable(a.BLEND);b.shadowMapCullFace===THREE.CullFaceFront&&a.cullFace(a.BACK)}};THREE.ShadowMapPlugin.__projector=new THREE.Projector;THREE.SpritePlugin=function(){function a(a,b){return a.z!==b.z?b.z-a.z:b.id-a.id}var b,c,d,e,f,g,h,i,k,l;this.init=function(a){b=a.context;c=a;d=a.getPrecision();e=new Float32Array(16);f=new Uint16Array(6);a=0;e[a++]=-1;e[a++]=-1;e[a++]=0;e[a++]=0;e[a++]=1;e[a++]=-1;e[a++]=1;e[a++]=0;e[a++]=1;e[a++]=1;e[a++]=1;e[a++]=1;e[a++]=-1;e[a++]=1;e[a++]=0;e[a++]=1;a=0;f[a++]=0;f[a++]=1;f[a++]=2;f[a++]=0;f[a++]=2;f[a++]=3;g=b.createBuffer();h=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,g);b.bufferData(b.ARRAY_BUFFER,