|
@@ -85,17 +85,18 @@ THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.
|
|
|
THREE.Ray.prototype={constructor:THREE.Ray,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).addSelf(this.origin)},recastSelf:function(a){this.origin.copy(this.at(a,THREE.Ray.__v1));return this},closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.sub(a,this.origin);var d=c.dot(this.direction);
|
|
|
return c.copy(this.direction).multiplyScalar(d).addSelf(this.origin)},distanceToPoint:function(a){var b=THREE.Ray.__v1.sub(a,this.origin).dot(this.direction);THREE.Ray.__v1.copy(this.direction).multiplyScalar(b).addSelf(this.origin);return THREE.Ray.__v1.distanceTo(a)},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.addSelf(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.subSelf(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.Ray.__v1=new THREE.Vector3;THREE.Ray.__v2=new THREE.Vector3;THREE.Frustum=function(){this.planes=[new THREE.Plane,new THREE.Plane,new THREE.Plane,new THREE.Plane,new THREE.Plane,new THREE.Plane]};
|
|
|
-THREE.Frustum.prototype.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],m=c[8],n=c[9],l=c[10],s=c[11],q=c[12],p=c[13],r=c[14],c=c[15];b[0].setComponents(f-a,k-g,s-m,c-q);b[1].setComponents(f+a,k+g,s+m,c+q);b[2].setComponents(f+d,k+h,s+n,c+p);b[3].setComponents(f-d,k-h,s-n,c-p);b[4].setComponents(f-e,k-i,s-l,c-r);b[5].setComponents(f+e,k+i,s+l,c+r);for(a=0;6>a;a++)b[a].normalize()};
|
|
|
-THREE.Frustum.prototype.contains=function(a){for(var b=this.planes,c=a.matrixWorld,d=c.getPosition(),a=-a.geometry.boundingSphere.radius*c.getMaxScaleOnAxis(),e=c=0;6>e;e++)if(c=b[e].distanceToPoint(d),c<=a)return!1;return!0};THREE.Frustum.__v1=new THREE.Vector3;THREE.Plane=function(a,b){this.normal=void 0!==a?a.clone():new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0};
|
|
|
-THREE.Plane.prototype={constructor:THREE.Plane,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).normalize();this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(a,b,c){b=THREE.Plane.__v1.sub(c,b).crossSelf(THREE.Plane.__v2.sub(a,b)).normalize();this.setFromNormalAndCoplanarPoint(b,a);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},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).subSelf(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(a,b,c){var c=c||new THREE.Vector3,b=THREE.Plane.__v1.sub(b,a),d=this.normal.dot(b);if(0==d){if(0==this.distanceToPoint(a))return c.copy(a)}else return d=-(a.dot(this.normal)+this.constant)/d,0>d||1<d?void 0:c.copy(b).multiplyScalar(d).addSelf(a)},coplanarPoint:function(a){return(a||new THREE.Vector3).copy(this.normal).multiplyScalar(-this.constant)},transform:function(a,b){var c=THREE.Plane.__v1,
|
|
|
-d=THREE.Plane.__v2,b=b||(new THREE.Matrix3).getInverse(a).transpose();c.copy(this.normal).applyMatrix3(b);d=this.coplanarPoint(d);d.applyMatrix4(a);this.setFromNormalAndCoplanarPoint(c,d);return this},translate:function(a){this.constant-=a.dot(this.normal);return this},equals:function(a){return a.normal.equals(this.normal)&&a.constant==this.constant},clone:function(){return(new THREE.Plane).copy(this)}};THREE.Plane.__vZero=new THREE.Vector3(0,0,0);THREE.Plane.__v1=new THREE.Vector3;
|
|
|
-THREE.Plane.__v2=new THREE.Vector3;THREE.Sphere=function(a,b){this.center=void 0===a?new THREE.Vector3:a.clone();this.radius=void 0===b?0:b};
|
|
|
+THREE.Ray.__v1=new THREE.Vector3;THREE.Ray.__v2=new THREE.Vector3;THREE.Sphere=function(a,b){this.center=void 0===a?new THREE.Vector3:a.clone();this.radius=void 0===b?0:b};
|
|
|
THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromCenterAndPoints:function(a,b){for(var c=0,d=0,e=b.length;d<e;d++)var f=a.distanceToSquared(b[d]),c=Math.max(c,f);this.center=a;this.radius=Math.sqrt(c);return this},copy:function(a){this.center.copy(a.center);this.radius=a.radius;return this},empty:function(){return 0>=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-
|
|
|
-this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.subSelf(this.center).normalize(),d.multiplyScalar(this.radius).addSelf(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.addSelf(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.Math={clamp:function(a,b,c){return a<b?b:a>c?c:a},clampBottom:function(a,b){return a<b?b:a},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},random16:function(){return(65280*Math.random()+255*Math.random())/65535},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(0.5-Math.random())},sign:function(a){return 0>a?-1:0<a?1:0},degToRad:function(a){return a*THREE.Math.__d2r},radToDeg:function(a){return a*
|
|
|
+this.radius},isIntersectionSphere: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.subSelf(this.center).normalize(),d.multiplyScalar(this.radius).addSelf(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.addSelf(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.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],m=c[8],n=c[9],l=c[10],s=c[11],q=c[12],p=c[13],r=c[14],c=c[15];b[0].setComponents(f-a,k-g,s-m,c-q).normalize();b[1].setComponents(f+a,k+g,s+m,
|
|
|
+c+q).normalize();b[2].setComponents(f+d,k+h,s+n,c+p).normalize();b[3].setComponents(f-d,k-h,s-n,c-p).normalize();b[4].setComponents(f-e,k-i,s-l,c-r).normalize();b[5].setComponents(f+e,k+i,s+l,c+r).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(){var a=this.planes;return new THREE.Frustum(a[0],a[1],a[2],a[3],a[4],a[5])}};THREE.Plane=function(a,b){this.normal=void 0!==a?a.clone():new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0};
|
|
|
+THREE.Plane.prototype={constructor:THREE.Plane,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).normalize();this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(a,b,c){b=THREE.Plane.__v1.sub(c,b).crossSelf(THREE.Plane.__v2.sub(a,b)).normalize();this.setFromNormalAndCoplanarPoint(b,a);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).subSelf(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(a,b,c){var c=c||new THREE.Vector3,b=THREE.Plane.__v1.sub(b,a),d=this.normal.dot(b);if(0==d){if(0==this.distanceToPoint(a))return c.copy(a)}else return d=-(a.dot(this.normal)+this.constant)/d,0>d||1<d?void 0:c.copy(b).multiplyScalar(d).addSelf(a)},coplanarPoint:function(a){return(a||new THREE.Vector3).copy(this.normal).multiplyScalar(-this.constant)},
|
|
|
+transform:function(a,b){var b=b||(new THREE.Matrix3).getInverse(a).transpose(),c=THREE.Plane.__v1.copy(this.normal).applyMatrix3(b),d=this.coplanarPoint(THREE.Plane.__v2);d.applyMatrix4(a);this.setFromNormalAndCoplanarPoint(c,d);return this},translate:function(a){this.constant-=a.dot(this.normal);return this},equals:function(a){return a.normal.equals(this.normal)&&a.constant==this.constant},clone:function(){return(new THREE.Plane).copy(this)}};THREE.Plane.__vZero=new THREE.Vector3(0,0,0);
|
|
|
+THREE.Plane.__v1=new THREE.Vector3;THREE.Plane.__v2=new THREE.Vector3;THREE.Math={clamp:function(a,b,c){return a<b?b:a>c?c:a},clampBottom:function(a,b){return a<b?b:a},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},random16:function(){return(65280*Math.random()+255*Math.random())/65535},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(0.5-Math.random())},sign:function(a){return 0>a?-1:0<a?1:0},degToRad:function(a){return a*THREE.Math.__d2r},radToDeg:function(a){return a*
|
|
|
THREE.Math.__r2d}};THREE.Math.__d2r=Math.PI/180;THREE.Math.__r2d=180/Math.PI;THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};
|
|
|
THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a,b){var c=Math.cos(a.x/2),d=Math.cos(a.y/2),e=Math.cos(a.z/2),f=Math.sin(a.x/2),g=Math.sin(a.y/2),h=Math.sin(a.z/2);void 0===b||"XYZ"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e-f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e-f*g*h):"YXZ"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e-f*d*h,this.z=c*d*
|
|
|
h-f*g*e,this.w=c*d*e+f*g*h):"ZXY"===b?(this.x=f*d*e-c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e-f*g*h):"ZYX"===b?(this.x=f*d*e-c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h-f*g*e,this.w=c*d*e+f*g*h):"YZX"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h-f*g*e,this.w=c*d*e-f*g*h):"XZY"===b&&(this.x=f*d*e-c*g*h,this.y=c*g*e-f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e+f*g*h);return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);
|
|
@@ -111,11 +112,11 @@ THREE.Triangle.containsPoint=function(a,b,c,d){a=THREE.Triangle.barycoordFromPoi
|
|
|
THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){THREE.Triangle.__v0.sub(this.c,this.b);THREE.Triangle.__v1.sub(this.a,this.b);return 0.5*THREE.Triangle.__v0.crossSelf(THREE.Triangle.__v1).length()},midpoint:function(a){return(a||
|
|
|
new THREE.Vector3).add(this.a,this.b).addSelf(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)},
|
|
|
clone:function(){return(new THREE.Triangle).copy(this)}};THREE.Triangle.__v0=new THREE.Vector3;THREE.Triangle.__v1=new THREE.Vector3;THREE.Triangle.__v2=new THREE.Vector3;THREE.Triangle.__v3=new THREE.Vector3;THREE.Vertex=function(a){console.warn("THREE.Vertex has been DEPRECATED. Use THREE.Vector3 instead.");return a};THREE.UV=function(a,b){console.warn("THREE.UV has been DEPRECATED. Use THREE.Vector2 instead.");return new THREE.Vector2(a,b)};THREE.Clock=function(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1};THREE.Clock.prototype.start=function(){this.oldTime=this.startTime=Date.now();this.running=!0};THREE.Clock.prototype.stop=function(){this.getElapsedTime();this.running=!1};THREE.Clock.prototype.getElapsedTime=function(){this.getDelta();return this.elapsedTime};
|
|
|
-THREE.Clock.prototype.getDelta=function(){var a=0;this.autoStart&&!this.running&&this.start();if(this.running){var b=Date.now(),a=0.001*(b-this.oldTime);this.oldTime=b;this.elapsedTime+=a}return a};THREE.EventDispatcher=function(){var a={};this.addEventListener=function(b,c){void 0===a[b]&&(a[b]=[]);-1===a[b].indexOf(c)&&a[b].push(c)};this.removeEventListener=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)};this.dispatchEvent=function(b){var c=a[b.type];if(void 0!==c){b.target=this;for(var d=0,e=c.length;d<e;d++)c[d].call(this,b)}}};(function(a){a.Raycaster=function(b,c,d,e){this.ray=new a.Ray(b,c);0<this.ray.direction.length()&&this.ray.direction.normalize();this.near=d||0;this.far=e||Infinity};var b=new a.Sphere,c=new a.Ray,d=new a.Plane,e=new a.Vector3,f=new a.Matrix4,g=function(a,b){return a.distance-b.distance};new a.Vector3;new a.Vector3;new a.Vector3;var h=function(g,h,i){if(g instanceof a.Particle){h=h.ray.distanceToPoint(g.matrixWorld.getPosition());if(h>g.scale.x)return i;i.push({distance:h,point:g.position,face:null,
|
|
|
-object:g})}else if(g instanceof a.Mesh){b.set(g.matrixWorld.getPosition(),g.geometry.boundingSphere.radius*g.matrixWorld.getMaxScaleOnAxis());if(!h.ray.isIntersectionSphere(b))return i;var l=g.geometry,s=l.vertices,q=g.material instanceof a.MeshFaceMaterial,p=!0===q?g.material.materials:null,r=g.material.side,v,x,w,t=h.precision;g.matrixRotationWorld.extractRotation(g.matrixWorld);f.getInverse(g.matrixWorld);c.copy(h.ray).transform(f);for(var J=0,E=l.faces.length;J<E;J++){var C=l.faces[J],r=!0===
|
|
|
-q?p[C.materialIndex]:g.material;if(void 0!==r){d.setFromNormalAndCoplanarPoint(C.normal,s[C.a]);var z=c.distanceToPlane(d);if(!(Math.abs(z)<t)&&!(0>z)){r=r.side;if(r!==a.DoubleSide&&(v=c.direction.dot(d.normal),!(r===a.FrontSide?0>v:0<v)))continue;if(!(z<h.near||z>h.far)){e=c.at(z,e);if(C instanceof a.Face3){if(r=s[C.a],v=s[C.b],x=s[C.c],!a.Triangle.containsPoint(e,r,v,x))continue}else if(C instanceof a.Face4){if(r=s[C.a],v=s[C.b],x=s[C.c],w=s[C.d],!a.Triangle.containsPoint(e,r,v,w)&&!a.Triangle.containsPoint(e,
|
|
|
-v,x,w))continue}else throw Error("face type not supported");i.push({distance:z,point:h.ray.at(z),face:C,faceIndex:J,object:g})}}}}}},i=function(a,b,c){for(var a=a.getDescendants(),d=0,e=a.length;d<e;d++)h(a[d],b,c)};a.Raycaster.prototype.precision=1E-4;a.Raycaster.prototype.set=function(a,b){this.ray.set(a,b);0<this.ray.direction.length()&&this.ray.direction.normalize()};a.Raycaster.prototype.intersectObject=function(a,b){var c=[];!0===b&&i(a,this,c);h(a,this,c);c.sort(g);return c};a.Raycaster.prototype.intersectObjects=
|
|
|
-function(a,b){for(var c=[],d=0,e=a.length;d<e;d++)h(a[d],this,c),!0===b&&i(a[d],this,c);c.sort(g);return c}})(THREE);THREE.Object3D=function(){this.id=THREE.Object3DIdCount++;this.name="";this.properties={};this.parent=void 0;this.children=[];this.up=new THREE.Vector3(0,1,0);this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.eulerOrder=THREE.Object3D.defaultEulerOrder;this.scale=new THREE.Vector3(1,1,1);this.renderDepth=null;this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixWorldNeedsUpdate=this.matrixAutoUpdate=
|
|
|
+THREE.Clock.prototype.getDelta=function(){var a=0;this.autoStart&&!this.running&&this.start();if(this.running){var b=Date.now(),a=0.001*(b-this.oldTime);this.oldTime=b;this.elapsedTime+=a}return a};THREE.EventDispatcher=function(){var a={};this.addEventListener=function(b,c){void 0===a[b]&&(a[b]=[]);-1===a[b].indexOf(c)&&a[b].push(c)};this.removeEventListener=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)};this.dispatchEvent=function(b){var c=a[b.type];if(void 0!==c){b.target=this;for(var d=0,e=c.length;d<e;d++)c[d].call(this,b)}}};(function(a){a.Raycaster=function(b,c,d,e){this.ray=new a.Ray(b,c);0<this.ray.direction.length()&&this.ray.direction.normalize();this.near=d||0;this.far=e||Infinity};var b=new a.Sphere,c=new a.Ray,d=new a.Plane,e=new a.Vector3,f=new a.Matrix4,g=function(a,b){return a.distance-b.distance},h=function(g,h,i){if(g instanceof a.Particle){h=h.ray.distanceToPoint(g.matrixWorld.getPosition());if(h>g.scale.x)return i;i.push({distance:h,point:g.position,face:null,object:g})}else if(g instanceof a.Mesh){b.set(g.matrixWorld.getPosition(),
|
|
|
+g.geometry.boundingSphere.radius*g.matrixWorld.getMaxScaleOnAxis());if(!h.ray.isIntersectionSphere(b))return i;var l=g.geometry,s=l.vertices,q=g.material instanceof a.MeshFaceMaterial,p=!0===q?g.material.materials:null,r=g.material.side,v,x,w,t=h.precision;g.matrixRotationWorld.extractRotation(g.matrixWorld);f.getInverse(g.matrixWorld);c.copy(h.ray).transform(f);for(var J=0,E=l.faces.length;J<E;J++){var C=l.faces[J],r=!0===q?p[C.materialIndex]:g.material;if(void 0!==r){d.setFromNormalAndCoplanarPoint(C.normal,
|
|
|
+s[C.a]);var z=c.distanceToPlane(d);if(!(Math.abs(z)<t)&&!(0>z)){r=r.side;if(r!==a.DoubleSide&&(v=c.direction.dot(d.normal),!(r===a.FrontSide?0>v:0<v)))continue;if(!(z<h.near||z>h.far)){e=c.at(z,e);if(C instanceof a.Face3){if(r=s[C.a],v=s[C.b],x=s[C.c],!a.Triangle.containsPoint(e,r,v,x))continue}else if(C instanceof a.Face4){if(r=s[C.a],v=s[C.b],x=s[C.c],w=s[C.d],!a.Triangle.containsPoint(e,r,v,w)&&!a.Triangle.containsPoint(e,v,x,w))continue}else throw Error("face type not supported");i.push({distance:z,
|
|
|
+point:h.ray.at(z),face:C,faceIndex:J,object:g})}}}}}},i=function(a,b,c){for(var a=a.getDescendants(),d=0,e=a.length;d<e;d++)h(a[d],b,c)};a.Raycaster.prototype.precision=1E-4;a.Raycaster.prototype.set=function(a,b){this.ray.set(a,b);0<this.ray.direction.length()&&this.ray.direction.normalize()};a.Raycaster.prototype.intersectObject=function(a,b){var c=[];!0===b&&i(a,this,c);h(a,this,c);c.sort(g);return c};a.Raycaster.prototype.intersectObjects=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++)h(a[d],
|
|
|
+this,c),!0===b&&i(a[d],this,c);c.sort(g);return c}})(THREE);THREE.Object3D=function(){this.id=THREE.Object3DIdCount++;this.name="";this.properties={};this.parent=void 0;this.children=[];this.up=new THREE.Vector3(0,1,0);this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.eulerOrder=THREE.Object3D.defaultEulerOrder;this.scale=new THREE.Vector3(1,1,1);this.renderDepth=null;this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixWorldNeedsUpdate=this.matrixAutoUpdate=
|
|
|
!0;this.quaternion=new THREE.Quaternion;this.useQuaternion=!1;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this._vector=new THREE.Vector3};
|
|
|
THREE.Object3D.prototype={constructor:THREE.Object3D,applyMatrix:function(a){this.matrix.multiply(a,this.matrix);this.scale.getScaleFromMatrix(this.matrix);a=(new THREE.Matrix4).extractRotation(this.matrix);this.rotation.setEulerFromRotationMatrix(a,this.eulerOrder);this.position.getPositionFromMatrix(this.matrix)},translate:function(a,b){this.matrix.rotateAxis(b);this.position.addSelf(b.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a,
|
|
|
this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},localToWorld:function(a){return a.applyMatrix4(this.matrixWorld)},worldToLocal:function(a){return a.applyMatrix4(THREE.Object3D.__m1.getInverse(this.matrixWorld))},lookAt:function(a){this.matrix.lookAt(a,this.position,this.up);this.rotationAutoUpdate&&(!1===this.useQuaternion?this.rotation.setEulerFromRotationMatrix(this.matrix,this.eulerOrder):this.quaternion.copy(this.matrix.decompose()[1]))},add:function(a){if(a===
|
|
@@ -127,15 +128,15 @@ a.matrixAutoUpdate=this.matrixAutoUpdate;a.matrixWorldNeedsUpdate=this.matrixWor
|
|
|
c)return!1;a.lerpSelf(b,c);b.lerpSelf(a,1-d);return!0}var e,f,g=[],h=0,i,k,m=[],n=0,l,s,q=[],p=0,r,v=[],x=0,w,t,J=[],E=0,C,z,G=[],F=0,I={objects:[],sprites:[],lights:[],elements:[]},$=new THREE.Vector3,B=new THREE.Vector4,R=new THREE.Matrix4,A=new THREE.Matrix4,H,K=new THREE.Matrix4,M=new THREE.Matrix3,P=new THREE.Matrix3,ga=new THREE.Vector3,ra=new THREE.Frustum,L=new THREE.Vector4,oa=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);A.multiply(b.projectionMatrix,
|
|
|
b.matrixWorldInverse);return a.applyMatrix4(A)};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);A.multiply(b.matrixWorld,b.projectionMatrixInverse);return a.applyMatrix4(A)};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.subSelf(a).normalize();return new THREE.Raycaster(a,c)};this.projectScene=function(g,h,n,W){var ja=h.near,fa=h.far,aa=!1,ma,Q,ka,va,Ea,na,wa,qa,$a,rb,La,db,pb;
|
|
|
z=t=r=s=0;I.elements.length=0;g.updateMatrixWorld();void 0===h.parent&&h.updateMatrixWorld();R.copy(h.matrixWorldInverse.getInverse(h.matrixWorld));A.multiply(h.projectionMatrix,R);P.getInverse(R);P.transpose();ra.setFromMatrix(A);f=0;I.objects.length=0;I.sprites.length=0;I.lights.length=0;var Nb=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)I.lights.push(f);else if(f instanceof THREE.Mesh||f instanceof THREE.Line){if(!1===
|
|
|
-f.frustumCulled||!0===ra.contains(f))e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:($.copy(f.matrixWorld.getPosition()),$.applyMatrix4(A),e.z=$.z),I.objects.push(e)}else f instanceof THREE.Sprite||f instanceof THREE.Particle?(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:($.copy(f.matrixWorld.getPosition()),$.applyMatrix4(A),e.z=$.z),I.sprites.push(e)):(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:($.copy(f.matrixWorld.getPosition()),$.applyMatrix4(A),e.z=$.z),I.objects.push(e));
|
|
|
-Nb(f)}}};Nb(g);!0===n&&I.objects.sort(c);g=0;for(n=I.objects.length;g<n;g++)if(qa=I.objects[g].object,H=qa.matrixWorld,k=0,qa instanceof THREE.Mesh){$a=qa.geometry;ka=$a.vertices;rb=$a.faces;$a=$a.faceVertexUvs;M.getInverse(H);M.transpose();db=qa.material instanceof THREE.MeshFaceMaterial;pb=!0===db?qa.material:null;ma=0;for(Q=ka.length;ma<Q;ma++)i=b(),i.positionWorld.copy(ka[ma]),i.positionWorld.applyMatrix4(H),i.positionScreen.copy(i.positionWorld),i.positionScreen.applyMatrix4(A),i.positionScreen.x/=
|
|
|
-i.positionScreen.w,i.positionScreen.y/=i.positionScreen.w,i.visible=i.positionScreen.z>ja&&i.positionScreen.z<fa;ka=0;for(ma=rb.length;ka<ma;ka++){Q=rb[ka];var yb=!0===db?pb.materials[Q.materialIndex]:qa.material;if(void 0!==yb){na=yb.side;if(Q instanceof THREE.Face3)if(va=m[Q.a],Ea=m[Q.b],wa=m[Q.c],!0===va.visible&&!0===Ea.visible&&!0===wa.visible)if(aa=0>(wa.positionScreen.x-va.positionScreen.x)*(Ea.positionScreen.y-va.positionScreen.y)-(wa.positionScreen.y-va.positionScreen.y)*(Ea.positionScreen.x-
|
|
|
-va.positionScreen.x),na===THREE.DoubleSide||aa===(na===THREE.FrontSide))s===p?(La=new THREE.RenderableFace3,q.push(La),p++,s++,l=La):l=q[s++],l.v1.copy(va),l.v2.copy(Ea),l.v3.copy(wa);else continue;else continue;else if(Q instanceof THREE.Face4)if(va=m[Q.a],Ea=m[Q.b],wa=m[Q.c],La=m[Q.d],!0===va.visible&&!0===Ea.visible&&!0===wa.visible&&!0===La.visible)if(aa=0>(La.positionScreen.x-va.positionScreen.x)*(Ea.positionScreen.y-va.positionScreen.y)-(La.positionScreen.y-va.positionScreen.y)*(Ea.positionScreen.x-
|
|
|
-va.positionScreen.x)||0>(Ea.positionScreen.x-wa.positionScreen.x)*(La.positionScreen.y-wa.positionScreen.y)-(Ea.positionScreen.y-wa.positionScreen.y)*(La.positionScreen.x-wa.positionScreen.x),na===THREE.DoubleSide||aa===(na===THREE.FrontSide)){if(r===x){var Ra=new THREE.RenderableFace4;v.push(Ra);x++;r++;l=Ra}else l=v[r++];l.v1.copy(va);l.v2.copy(Ea);l.v3.copy(wa);l.v4.copy(La)}else continue;else continue;l.normalModel.copy(Q.normal);!1===aa&&(na===THREE.BackSide||na===THREE.DoubleSide)&&l.normalModel.negate();
|
|
|
-l.normalModel.applyMatrix3(M);l.normalModel.normalize();l.normalModelView.copy(l.normalModel);l.normalModelView.applyMatrix3(P);l.centroidModel.copy(Q.centroid);l.centroidModel.applyMatrix4(H);wa=Q.vertexNormals;va=0;for(Ea=wa.length;va<Ea;va++)La=l.vertexNormalsModel[va],La.copy(wa[va]),!1===aa&&(na===THREE.BackSide||na===THREE.DoubleSide)&&La.negate(),La.applyMatrix3(M),La.normalize(),Ra=l.vertexNormalsModelView[va],Ra.copy(La),Ra.applyMatrix3(P);l.vertexNormalsLength=wa.length;na=0;for(va=$a.length;na<
|
|
|
-va;na++)if(La=$a[na][ka],void 0!==La){Ea=0;for(wa=La.length;Ea<wa;Ea++)l.uvs[na][Ea]=La[Ea]}l.color=Q.color;l.material=yb;ga.copy(l.centroidModel);ga.applyMatrix4(A);l.z=ga.z;I.elements.push(l)}}}else if(qa instanceof THREE.Line){K.multiply(A,H);ka=qa.geometry.vertices;va=b();va.positionScreen.copy(ka[0]);va.positionScreen.applyMatrix4(K);rb=qa.type===THREE.LinePieces?2:1;ma=1;for(Q=ka.length;ma<Q;ma++)va=b(),va.positionScreen.copy(ka[ma]),va.positionScreen.applyMatrix4(K),0<(ma+1)%rb||(Ea=m[k-2],
|
|
|
-L.copy(va.positionScreen),oa.copy(Ea.positionScreen),!0===d(L,oa)&&(L.multiplyScalar(1/L.w),oa.multiplyScalar(1/oa.w),t===E?($a=new THREE.RenderableLine,J.push($a),E++,t++,w=$a):w=J[t++],w.v1.positionScreen.copy(L),w.v2.positionScreen.copy(oa),w.z=Math.max(L.z,oa.z),w.material=qa.material,I.elements.push(w)))}g=0;for(n=I.sprites.length;g<n;g++)qa=I.sprites[g].object,H=qa.matrixWorld,qa instanceof THREE.Particle&&(B.set(H.elements[12],H.elements[13],H.elements[14],1),B.applyMatrix4(A),B.z/=B.w,0<B.z&&
|
|
|
-1>B.z&&(z===F?(ja=new THREE.RenderableParticle,G.push(ja),F++,z++,C=ja):C=G[z++],C.object=qa,C.x=B.x/B.w,C.y=B.y/B.w,C.z=B.z,C.rotation=qa.rotation.z,C.scale.x=qa.scale.x*Math.abs(C.x-(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])),C.scale.y=qa.scale.y*Math.abs(C.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),C.material=qa.material,I.elements.push(C)));!0===W&&I.elements.sort(c);return I}};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};
|
|
|
+f.frustumCulled||!0===ra.intersectsObject(f))e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:($.copy(f.matrixWorld.getPosition()),$.applyMatrix4(A),e.z=$.z),I.objects.push(e)}else f instanceof THREE.Sprite||f instanceof THREE.Particle?(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:($.copy(f.matrixWorld.getPosition()),$.applyMatrix4(A),e.z=$.z),I.sprites.push(e)):(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:($.copy(f.matrixWorld.getPosition()),$.applyMatrix4(A),e.z=$.z),
|
|
|
+I.objects.push(e));Nb(f)}}};Nb(g);!0===n&&I.objects.sort(c);g=0;for(n=I.objects.length;g<n;g++)if(qa=I.objects[g].object,H=qa.matrixWorld,k=0,qa instanceof THREE.Mesh){$a=qa.geometry;ka=$a.vertices;rb=$a.faces;$a=$a.faceVertexUvs;M.getInverse(H);M.transpose();db=qa.material instanceof THREE.MeshFaceMaterial;pb=!0===db?qa.material:null;ma=0;for(Q=ka.length;ma<Q;ma++)i=b(),i.positionWorld.copy(ka[ma]),i.positionWorld.applyMatrix4(H),i.positionScreen.copy(i.positionWorld),i.positionScreen.applyMatrix4(A),
|
|
|
+i.positionScreen.x/=i.positionScreen.w,i.positionScreen.y/=i.positionScreen.w,i.visible=i.positionScreen.z>ja&&i.positionScreen.z<fa;ka=0;for(ma=rb.length;ka<ma;ka++){Q=rb[ka];var yb=!0===db?pb.materials[Q.materialIndex]:qa.material;if(void 0!==yb){na=yb.side;if(Q instanceof THREE.Face3)if(va=m[Q.a],Ea=m[Q.b],wa=m[Q.c],!0===va.visible&&!0===Ea.visible&&!0===wa.visible)if(aa=0>(wa.positionScreen.x-va.positionScreen.x)*(Ea.positionScreen.y-va.positionScreen.y)-(wa.positionScreen.y-va.positionScreen.y)*
|
|
|
+(Ea.positionScreen.x-va.positionScreen.x),na===THREE.DoubleSide||aa===(na===THREE.FrontSide))s===p?(La=new THREE.RenderableFace3,q.push(La),p++,s++,l=La):l=q[s++],l.v1.copy(va),l.v2.copy(Ea),l.v3.copy(wa);else continue;else continue;else if(Q instanceof THREE.Face4)if(va=m[Q.a],Ea=m[Q.b],wa=m[Q.c],La=m[Q.d],!0===va.visible&&!0===Ea.visible&&!0===wa.visible&&!0===La.visible)if(aa=0>(La.positionScreen.x-va.positionScreen.x)*(Ea.positionScreen.y-va.positionScreen.y)-(La.positionScreen.y-va.positionScreen.y)*
|
|
|
+(Ea.positionScreen.x-va.positionScreen.x)||0>(Ea.positionScreen.x-wa.positionScreen.x)*(La.positionScreen.y-wa.positionScreen.y)-(Ea.positionScreen.y-wa.positionScreen.y)*(La.positionScreen.x-wa.positionScreen.x),na===THREE.DoubleSide||aa===(na===THREE.FrontSide)){if(r===x){var Ra=new THREE.RenderableFace4;v.push(Ra);x++;r++;l=Ra}else l=v[r++];l.v1.copy(va);l.v2.copy(Ea);l.v3.copy(wa);l.v4.copy(La)}else continue;else continue;l.normalModel.copy(Q.normal);!1===aa&&(na===THREE.BackSide||na===THREE.DoubleSide)&&
|
|
|
+l.normalModel.negate();l.normalModel.applyMatrix3(M);l.normalModel.normalize();l.normalModelView.copy(l.normalModel);l.normalModelView.applyMatrix3(P);l.centroidModel.copy(Q.centroid);l.centroidModel.applyMatrix4(H);wa=Q.vertexNormals;va=0;for(Ea=wa.length;va<Ea;va++)La=l.vertexNormalsModel[va],La.copy(wa[va]),!1===aa&&(na===THREE.BackSide||na===THREE.DoubleSide)&&La.negate(),La.applyMatrix3(M),La.normalize(),Ra=l.vertexNormalsModelView[va],Ra.copy(La),Ra.applyMatrix3(P);l.vertexNormalsLength=wa.length;
|
|
|
+na=0;for(va=$a.length;na<va;na++)if(La=$a[na][ka],void 0!==La){Ea=0;for(wa=La.length;Ea<wa;Ea++)l.uvs[na][Ea]=La[Ea]}l.color=Q.color;l.material=yb;ga.copy(l.centroidModel);ga.applyMatrix4(A);l.z=ga.z;I.elements.push(l)}}}else if(qa instanceof THREE.Line){K.multiply(A,H);ka=qa.geometry.vertices;va=b();va.positionScreen.copy(ka[0]);va.positionScreen.applyMatrix4(K);rb=qa.type===THREE.LinePieces?2:1;ma=1;for(Q=ka.length;ma<Q;ma++)va=b(),va.positionScreen.copy(ka[ma]),va.positionScreen.applyMatrix4(K),
|
|
|
+0<(ma+1)%rb||(Ea=m[k-2],L.copy(va.positionScreen),oa.copy(Ea.positionScreen),!0===d(L,oa)&&(L.multiplyScalar(1/L.w),oa.multiplyScalar(1/oa.w),t===E?($a=new THREE.RenderableLine,J.push($a),E++,t++,w=$a):w=J[t++],w.v1.positionScreen.copy(L),w.v2.positionScreen.copy(oa),w.z=Math.max(L.z,oa.z),w.material=qa.material,I.elements.push(w)))}g=0;for(n=I.sprites.length;g<n;g++)qa=I.sprites[g].object,H=qa.matrixWorld,qa instanceof THREE.Particle&&(B.set(H.elements[12],H.elements[13],H.elements[14],1),B.applyMatrix4(A),
|
|
|
+B.z/=B.w,0<B.z&&1>B.z&&(z===F?(ja=new THREE.RenderableParticle,G.push(ja),F++,z++,C=ja):C=G[z++],C.object=qa,C.x=B.x/B.w,C.y=B.y/B.w,C.z=B.z,C.rotation=qa.rotation.z,C.scale.x=qa.scale.x*Math.abs(C.x-(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])),C.scale.y=qa.scale.y*Math.abs(C.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),C.material=qa.material,I.elements.push(C)));!0===W&&I.elements.sort(c);return I}};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();
|
|
|
return a}};THREE.Face4=function(a,b,c,d,e,f,g){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=void 0!==g?g:0;this.centroid=new THREE.Vector3};
|
|
|
THREE.Face4.prototype={constructor:THREE.Face4,clone:function(){var a=new THREE.Face4(this.a,this.b,this.c,this.d);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();
|
|
@@ -406,7 +407,7 @@ c.buffer),k(b[c.buffer.belongsToAttribute]),j.vertexAttribPointer(b[c.buffer.bel
|
|
|
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!==Ia&&(j.lineWidth(d),Ia=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)),O.info.render.calls++,O.info.render.vertices+=e.__webglFaceCount,O.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?j.LINE_STRIP:j.LINES,d=d.linewidth,d!==Ia&&(j.lineWidth(d),Ia=d),j.drawArrays(f,0,e.__webglLineCount),O.info.render.calls++):f instanceof THREE.ParticleSystem?(j.drawArrays(j.POINTS,0,e.__webglParticleCount),O.info.render.calls++,O.info.render.points+=e.__webglParticleCount):f instanceof THREE.Ribbon&&(j.drawArrays(j.TRIANGLE_STRIP,0,e.__webglVertexCount),
|
|
|
O.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,h,i=a.__lights,k=a.fog;ma=-1;Va=!0;this.autoUpdateScene&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);jc.multiply(b.projectionMatrix,b.matrixWorldInverse);zb.setFromMatrix(jc);this.autoUpdateObjects&&this.initWebGLObjects(a);s(this.renderPluginsPre,
|
|
|
-a,b);O.info.render.calls=0;O.info.render.vertices=0;O.info.render.faces=0;O.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);h=a.__webglObjects;d=0;for(e=h.length;d<e;d++)if(f=h[d],g=f.object,f.render=!1,g.visible&&(!(g instanceof THREE.Mesh||g instanceof THREE.ParticleSystem)||!g.frustumCulled||zb.contains(g))){C(g,b);var l=f,m=l.buffer,r=void 0,t=r=void 0,t=l.object.material;if(t instanceof THREE.MeshFaceMaterial)r=
|
|
|
+a,b);O.info.render.calls=0;O.info.render.vertices=0;O.info.render.faces=0;O.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);h=a.__webglObjects;d=0;for(e=h.length;d<e;d++)if(f=h[d],g=f.object,f.render=!1,g.visible&&(!(g instanceof THREE.Mesh||g instanceof THREE.ParticleSystem)||!g.frustumCulled||zb.intersectsObject(g))){C(g,b);var l=f,m=l.buffer,r=void 0,t=r=void 0,t=l.object.material;if(t instanceof THREE.MeshFaceMaterial)r=
|
|
|
m.materialIndex,r=t.materials[r],r.transparent?(l.transparent=r,l.opaque=null):(l.opaque=r,l.transparent=null);else if(r=t)r.transparent?(l.transparent=r,l.opaque=null):(l.opaque=r,l.transparent=null);f.render=!0;!0===this.sortObjects&&(null!==g.renderDepth?f.z=g.renderDepth:(Kb.copy(g.matrixWorld.getPosition()),Kb.applyMatrix4(jc),f.z=Kb.z),f.id=g.id)}this.sortObjects&&h.sort(n);h=a.__webglObjectsImmediate;d=0;for(e=h.length;d<e;d++)f=h[d],g=f.object,g.visible&&(C(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),F(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),q(a.__webglObjects,!1,"",b,i,k,!0,d),p(a.__webglObjectsImmediate,"",b,i,k,!1,d)):(d=null,this.setBlending(THREE.NoBlending),q(a.__webglObjects,!0,"opaque",b,i,k,!1,d),p(a.__webglObjectsImmediate,"opaque",
|
|
|
b,i,k,!1,d),q(a.__webglObjects,!1,"transparent",b,i,k,!0,d),p(a.__webglObjectsImmediate,"transparent",b,i,k,!0,d));s(this.renderPluginsPost,a,b);c&&(c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter)&&(c instanceof THREE.WebGLRenderTargetCube?(j.bindTexture(j.TEXTURE_CUBE_MAP,c.__webglTexture),j.generateMipmap(j.TEXTURE_CUBE_MAP),j.bindTexture(j.TEXTURE_CUBE_MAP,null)):(j.bindTexture(j.TEXTURE_2D,c.__webglTexture),j.generateMipmap(j.TEXTURE_2D),j.bindTexture(j.TEXTURE_2D,
|
|
@@ -696,9 +697,9 @@ x=x.shadowCascadeFarZ[w];t=t.pointsFrustum;t[0].z=v;t[1].z=v;t[2].z=v;t[3].z=v;t
|
|
|
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}m.add(q.shadowCamera);b.autoUpdateScene&&m.updateMatrixWorld()}q.shadowCameraVisible&&
|
|
|
!q.cameraHelper&&(q.cameraHelper=new THREE.CameraHelper(q.shadowCamera),q.shadowCamera.add(q.cameraHelper));if(q.isVirtual&&E.originalCamera==n){r=n;p=q.shadowCamera;v=q.pointsFrustum;t=q.pointsWorld;i.set(Infinity,Infinity,Infinity);k.set(-Infinity,-Infinity,-Infinity);for(x=0;8>x;x++)w=t[x],w.copy(v[x]),THREE.ShadowMapPlugin.__projector.unprojectVector(w,r),w.applyMatrix4(p.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);p.left=i.x;p.right=k.x;p.top=k.y;p.bottom=i.y;p.updateProjectionMatrix()}p=q.shadowMap;v=q.shadowMatrix;r=q.shadowCamera;r.position.copy(q.matrixWorld.getPosition());r.lookAt(q.target.matrixWorld.getPosition());r.updateMatrixWorld();r.matrixWorldInverse.getInverse(r.matrixWorld);q.cameraHelper&&(q.cameraHelper.visible=q.shadowCameraVisible);q.shadowCameraVisible&&q.cameraHelper.update();v.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);v.multiplySelf(r.projectionMatrix);v.multiplySelf(r.matrixWorldInverse);
|
|
|
-h.multiply(r.projectionMatrix,r.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(p);b.clear();t=m.__webglObjects;q=0;for(p=t.length;q<p;q++)if(x=t[q],v=x.object,x.render=!1,v.visible&&v.castShadow&&(!(v instanceof THREE.Mesh||v instanceof THREE.ParticleSystem)||!v.frustumCulled||g.contains(v)))v._modelViewMatrix.multiply(r.matrixWorldInverse,v.matrixWorld),x.render=!0;q=0;for(p=t.length;q<p;q++)x=t[q],x.render&&(v=x.object,x=x.buffer,C=v.material instanceof THREE.MeshFaceMaterial?v.material.materials[0]:
|
|
|
-v.material,w=0<v.geometry.morphTargets.length&&C.morphTargets,C=v instanceof THREE.SkinnedMesh&&C.skinning,w=v.customDepthMaterial?v.customDepthMaterial:C?w?f:e:w?d:c,x instanceof THREE.BufferGeometry?b.renderBufferDirect(r,m.__lights,null,w,x,v):b.renderBuffer(r,m.__lights,null,w,x,v));t=m.__webglObjectsImmediate;q=0;for(p=t.length;q<p;q++)x=t[q],v=x.object,v.visible&&v.castShadow&&(v._modelViewMatrix.multiply(r.matrixWorldInverse,v.matrixWorld),b.renderImmediateObject(r,m.__lights,null,c,v))}l=
|
|
|
-b.getClearColor();s=b.getClearAlpha();a.clearColor(l.r,l.g,l.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,m;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,
|
|
|
+h.multiply(r.projectionMatrix,r.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(p);b.clear();t=m.__webglObjects;q=0;for(p=t.length;q<p;q++)if(x=t[q],v=x.object,x.render=!1,v.visible&&v.castShadow&&(!(v instanceof THREE.Mesh||v instanceof THREE.ParticleSystem)||!v.frustumCulled||g.intersectsObject(v)))v._modelViewMatrix.multiply(r.matrixWorldInverse,v.matrixWorld),x.render=!0;q=0;for(p=t.length;q<p;q++)x=t[q],x.render&&(v=x.object,x=x.buffer,C=v.material instanceof THREE.MeshFaceMaterial?
|
|
|
+v.material.materials[0]:v.material,w=0<v.geometry.morphTargets.length&&C.morphTargets,C=v instanceof THREE.SkinnedMesh&&C.skinning,w=v.customDepthMaterial?v.customDepthMaterial:C?w?f:e:w?d:c,x instanceof THREE.BufferGeometry?b.renderBufferDirect(r,m.__lights,null,w,x,v):b.renderBuffer(r,m.__lights,null,w,x,v));t=m.__webglObjectsImmediate;q=0;for(p=t.length;q<p;q++)x=t[q],v=x.object,v.visible&&v.castShadow&&(v._modelViewMatrix.multiply(r.matrixWorldInverse,v.matrixWorld),b.renderImmediateObject(r,
|
|
|
+m.__lights,null,c,v))}l=b.getClearColor();s=b.getClearAlpha();a.clearColor(l.r,l.g,l.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,m;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,
|
|
|
e,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.bufferData(b.ELEMENT_ARRAY_BUFFER,f,b.STATIC_DRAW);var a=THREE.ShaderSprite.sprite,l=b.createProgram(),s=b.createShader(b.FRAGMENT_SHADER),q=b.createShader(b.VERTEX_SHADER),p="precision "+d+" float;\n";b.shaderSource(s,p+a.fragmentShader);b.shaderSource(q,p+a.vertexShader);b.compileShader(s);b.compileShader(q);b.attachShader(l,s);b.attachShader(l,q);b.linkProgram(l);i=l;k={};m={};k.position=b.getAttribLocation(i,"position");k.uv=b.getAttribLocation(i,
|
|
|
"uv");m.uvOffset=b.getUniformLocation(i,"uvOffset");m.uvScale=b.getUniformLocation(i,"uvScale");m.rotation=b.getUniformLocation(i,"rotation");m.scale=b.getUniformLocation(i,"scale");m.alignment=b.getUniformLocation(i,"alignment");m.color=b.getUniformLocation(i,"color");m.map=b.getUniformLocation(i,"map");m.opacity=b.getUniformLocation(i,"opacity");m.useScreenCoordinates=b.getUniformLocation(i,"useScreenCoordinates");m.sizeAttenuation=b.getUniformLocation(i,"sizeAttenuation");m.screenPosition=b.getUniformLocation(i,
|
|
|
"screenPosition");m.modelViewMatrix=b.getUniformLocation(i,"modelViewMatrix");m.projectionMatrix=b.getUniformLocation(i,"projectionMatrix");m.fogType=b.getUniformLocation(i,"fogType");m.fogDensity=b.getUniformLocation(i,"fogDensity");m.fogNear=b.getUniformLocation(i,"fogNear");m.fogFar=b.getUniformLocation(i,"fogFar");m.fogColor=b.getUniformLocation(i,"fogColor");m.alphaTest=b.getUniformLocation(i,"alphaTest")};this.render=function(d,e,f,q){var p=d.__webglSprites,r=p.length;if(r){var v=k,x=m,w=q/
|
|
@@ -708,7 +709,7 @@ C.material,C.visible&&0!==z.opacity&&(z.map&&z.map.image&&z.map.image.width)&&(b
|
|
|
!1,C._modelViewMatrix.elements),G[0]=1,G[1]=1),e=d.fog&&z.fog?J:0,v!==e&&(b.uniform1i(x.fogType,e),v=e),e=1/(z.scaleByViewport?q:1),G[0]*=e*w*C.scale.x,G[1]*=e*C.scale.y,b.uniform2f(x.uvScale,z.uvScale.x,z.uvScale.y),b.uniform2f(x.uvOffset,z.uvOffset.x,z.uvOffset.y),b.uniform2f(x.alignment,z.alignment.x,z.alignment.y),b.uniform1f(x.opacity,z.opacity),b.uniform3f(x.color,z.color.r,z.color.g,z.color.b),b.uniform1f(x.rotation,C.rotation),b.uniform2fv(x.scale,G),c.setBlending(z.blending,z.blendEquation,
|
|
|
z.blendSrc,z.blendDst),c.setDepthTest(z.depthTest),c.setDepthWrite(z.depthWrite),c.setTexture(z.map,0),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0));b.enable(b.CULL_FACE)}}};THREE.DepthPassPlugin=function(){this.enabled=!1;this.renderTarget=null;var a,b,c,d,e,f,g=new THREE.Frustum,h=new THREE.Matrix4;this.init=function(g){a=g.context;b=g;var g=THREE.ShaderLib.depthRGBA,h=THREE.UniformsUtils.clone(g.uniforms);c=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h});d=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:!0});e=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,
|
|
|
vertexShader:g.vertexShader,uniforms:h,skinning:!0});f=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:!0,skinning:!0});c._shadowPass=!0;d._shadowPass=!0;e._shadowPass=!0;f._shadowPass=!0};this.render=function(a,b){this.enabled&&this.update(a,b)};this.update=function(i,k){var m,n,l,s,q,p;a.clearColor(1,1,1,1);a.disable(a.BLEND);b.setDepthTest(!0);b.autoUpdateScene&&i.updateMatrixWorld();k.matrixWorldInverse.getInverse(k.matrixWorld);h.multiply(k.projectionMatrix,
|
|
|
-k.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(this.renderTarget);b.clear();p=i.__webglObjects;m=0;for(n=p.length;m<n;m++)if(l=p[m],q=l.object,l.render=!1,q.visible&&(!(q instanceof THREE.Mesh||q instanceof THREE.ParticleSystem)||!q.frustumCulled||g.contains(q)))q._modelViewMatrix.multiply(k.matrixWorldInverse,q.matrixWorld),l.render=!0;var r;m=0;for(n=p.length;m<n;m++)if(l=p[m],l.render&&(q=l.object,l=l.buffer,!(q instanceof THREE.ParticleSystem)||q.customDepthMaterial))(r=q.material instanceof
|
|
|
+k.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(this.renderTarget);b.clear();p=i.__webglObjects;m=0;for(n=p.length;m<n;m++)if(l=p[m],q=l.object,l.render=!1,q.visible&&(!(q instanceof THREE.Mesh||q instanceof THREE.ParticleSystem)||!q.frustumCulled||g.intersectsObject(q)))q._modelViewMatrix.multiply(k.matrixWorldInverse,q.matrixWorld),l.render=!0;var r;m=0;for(n=p.length;m<n;m++)if(l=p[m],l.render&&(q=l.object,l=l.buffer,!(q instanceof THREE.ParticleSystem)||q.customDepthMaterial))(r=q.material instanceof
|
|
|
THREE.MeshFaceMaterial?q.material.materials[0]:q.material)&&b.setMaterialFaces(q.material),s=0<q.geometry.morphTargets.length&&r.morphTargets,r=q instanceof THREE.SkinnedMesh&&r.skinning,s=q.customDepthMaterial?q.customDepthMaterial:r?s?f:e:s?d:c,l instanceof THREE.BufferGeometry?b.renderBufferDirect(k,i.__lights,null,s,l,q):b.renderBuffer(k,i.__lights,null,s,l,q);p=i.__webglObjectsImmediate;m=0;for(n=p.length;m<n;m++)l=p[m],q=l.object,q.visible&&(q._modelViewMatrix.multiply(k.matrixWorldInverse,
|
|
|
q.matrixWorld),b.renderImmediateObject(k,i.__lights,null,c,q));m=b.getClearColor();n=b.getClearAlpha();a.clearColor(m.r,m.g,m.b,n);a.enable(a.BLEND)}};THREE.ShaderFlares={lensFlareVertexTexture:{vertexShader:"uniform lowp int renderType;\nuniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform sampler2D occlusionMap;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif( renderType == 2 ) {\nvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.1, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.1, 0.5 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.5 ) );\nvVisibility = ( visibility.r / 9.0 ) *\n( 1.0 - visibility.g / 9.0 ) *\n( visibility.b / 9.0 ) *\n( 1.0 - visibility.a / 9.0 );\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}",
|
|
|
fragmentShader:"uniform lowp int renderType;\nuniform sampler2D map;\nuniform float opacity;\nuniform vec3 color;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nif( renderType == 0 ) {\ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\n} else if( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * vVisibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"},lensFlare:{vertexShader:"uniform lowp int renderType;\nuniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif( renderType == 2 ) {\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}",
|