提交 5479fb39 编写于 作者: M Mr.doob

More Ray clean up.

上级 b17defa8
......@@ -2695,7 +2695,8 @@ THREE.Frustum.__v1 = new THREE.Vector3();
/**
* @author mrdoob / http://mrdoob.com/
*/
(function(THREE){
( function ( THREE ) {
THREE.Ray = function ( origin, direction, near, far ) {
......@@ -2784,7 +2785,7 @@ THREE.Frustum.__v1 = new THREE.Vector3();
if ( distance > object.scale.x ) {
return [];
return intersects;
}
......@@ -2803,14 +2804,13 @@ THREE.Frustum.__v1 = new THREE.Vector3();
// Checking boundingSphere
//var scale = THREE.Frustum.__v1.set( object.matrixWorld.getColumnX().length(), object.matrixWorld.getColumnY().length(), object.matrixWorld.getColumnZ().length() );
var scaledRadius = object.geometry.boundingSphere.radius * object.matrixWorld.getMaxScaleOnAxis();
// Checking distance to ray
distance = distanceFromIntersection( this.origin, this.direction, object.matrixWorld.getPosition() );
if ( distance > scaledRadius) {
if ( distance > scaledRadius ) {
return intersects;
......@@ -2836,13 +2836,13 @@ THREE.Frustum.__v1 = new THREE.Vector3();
//directionCopy.copy( this.direction );
objMatrix = object.matrixWorld;
inverseMatrix.getInverse(objMatrix);
inverseMatrix.getInverse( objMatrix );
localOriginCopy.copy(originCopy);
inverseMatrix.multiplyVector3(localOriginCopy);
localOriginCopy.copy( originCopy );
inverseMatrix.multiplyVector3( localOriginCopy );
localDirectionCopy.copy(this.direction);
inverseMatrix.rotateAxis(localDirectionCopy).normalize();
localDirectionCopy.copy( this.direction );
inverseMatrix.rotateAxis( localDirectionCopy ).normalize();
for ( f = 0, fl = geometry.faces.length; f < fl; f ++ ) {
......@@ -2880,11 +2880,10 @@ THREE.Frustum.__v1 = new THREE.Vector3();
if ( pointInFace3( intersectPoint, a, b, c ) ) {
point = object.matrixWorld.multiplyVector3(intersectPoint.clone());
distance = originCopy.distanceTo( point);
point = object.matrixWorld.multiplyVector3( intersectPoint.clone() );
distance = originCopy.distanceTo( point );
if ( distance < this.near ) continue;
if ( distance > this.far ) continue;
if ( distance < this.near || distance > this.far ) continue;
intersect = {
......@@ -2909,11 +2908,10 @@ THREE.Frustum.__v1 = new THREE.Vector3();
if ( pointInFace3( intersectPoint, a, b, d ) || pointInFace3( intersectPoint, b, c, d ) ) {
point = object.matrixWorld.multiplyVector3(intersectPoint.clone());
distance = originCopy.distanceTo( point);
point = object.matrixWorld.multiplyVector3( intersectPoint.clone() );
distance = originCopy.distanceTo( point );
if ( distance < this.near ) continue;
if ( distance > this.far ) continue;
if ( distance < this.near || distance > this.far ) continue;
intersect = {
......@@ -2959,7 +2957,7 @@ THREE.Frustum.__v1 = new THREE.Vector3();
};
}(THREE));
}( THREE ) );
/**
* @author mrdoob / http://mrdoob.com/
*/
......@@ -3606,7 +3604,7 @@ THREE.Projector = function() {
};
function projectGraph( root, sort ) {
var projectGraph = function ( root, sort ) {
_objectCount = 0;
......
......@@ -58,10 +58,10 @@ THREE.EventTarget=function(){var a={};this.addEventListener=function(b,c){a[b]==
THREE.Frustum.prototype.setFromMatrix=function(a){var b=this.planes,c=a.elements,a=c[0],d=c[1],f=c[2],e=c[3],g=c[4],h=c[5],i=c[6],j=c[7],l=c[8],m=c[9],n=c[10],q=c[11],o=c[12],p=c[13],s=c[14],c=c[15];b[0].set(e-a,j-g,q-l,c-o);b[1].set(e+a,j+g,q+l,c+o);b[2].set(e+d,j+h,q+m,c+p);b[3].set(e-d,j-h,q-m,c-p);b[4].set(e-f,j-i,q-n,c-s);b[5].set(e+f,j+i,q+n,c+s);for(d=0;d<6;d++){a=b[d];a.divideScalar(Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z))}};
THREE.Frustum.prototype.contains=function(a){for(var b=0,c=this.planes,b=a.matrixWorld,d=b.elements,a=-a.geometry.boundingSphere.radius*b.getMaxScaleOnAxis(),f=0;f<6;f++){b=c[f].x*d[12]+c[f].y*d[13]+c[f].z*d[14]+c[f].w;if(b<=a)return false}return true};THREE.Frustum.__v1=new THREE.Vector3;
(function(a){a.Ray=function(b,c,d,f){this.origin=b||new a.Vector3;this.direction=c||new a.Vector3;this.near=d||0;this.far=f||Infinity};var b=new a.Vector3,c=new a.Vector3,d=new a.Vector3,f=new a.Vector3,e=new a.Vector3,g=new a.Vector3,h=new a.Matrix4,i=function(a,b){return a.distance-b.distance},j=new a.Vector3,l=new a.Vector3,m=new a.Vector3,n=function(a,b,c){j.sub(c,a);var d=j.dot(b),a=l.add(a,m.copy(b).multiplyScalar(d));return c.distanceTo(a)},q=function(a,b,c,d){j.sub(d,b);l.sub(c,b);m.sub(a,
b);var a=j.dot(j),b=j.dot(l),c=j.dot(m),f=l.dot(l),d=l.dot(m),e=1/(a*f-b*b),f=(f*c-b*d)*e,a=(a*d-b*c)*e;return f>=0&&a>=0&&f+a<1};a.Ray.prototype.precision=1E-4;a.Ray.prototype.intersectObject=function(l,j){var m,r=[],t;if(j===true)for(var v=0,u=l.children.length;v<u;v++)Array.prototype.push.apply(r,this.intersectObject(l.children[v],j));if(l instanceof a.Particle){t=n(this.origin,this.direction,l.matrixWorld.getPosition());if(t>l.scale.x)return[];m={distance:t,point:l.position,face:null,object:l};
b);var a=j.dot(j),b=j.dot(l),c=j.dot(m),f=l.dot(l),d=l.dot(m),e=1/(a*f-b*b),f=(f*c-b*d)*e,a=(a*d-b*c)*e;return f>=0&&a>=0&&f+a<1};a.Ray.prototype.precision=1E-4;a.Ray.prototype.intersectObject=function(l,j){var m,r=[],t;if(j===true)for(var v=0,u=l.children.length;v<u;v++)Array.prototype.push.apply(r,this.intersectObject(l.children[v],j));if(l instanceof a.Particle){t=n(this.origin,this.direction,l.matrixWorld.getPosition());if(t>l.scale.x)return r;m={distance:t,point:l.position,face:null,object:l};
r.push(m)}else if(l instanceof a.Mesh){v=l.geometry.boundingSphere.radius*l.matrixWorld.getMaxScaleOnAxis();t=n(this.origin,this.direction,l.matrixWorld.getPosition());if(t>v)return r;var A,y=l.geometry,B=y.vertices,F,x,E;F=l.geometry.materials;x=l.material instanceof a.MeshFaceMaterial;var G,O=this.precision;l.matrixRotationWorld.extractRotation(l.matrixWorld);b.copy(this.origin);h.getInverse(l.matrixWorld);c.copy(b);h.multiplyVector3(c);d.copy(this.direction);h.rotateAxis(d).normalize();v=0;for(u=
y.faces.length;v<u;v++){m=y.faces[v];t=x===true?F[m.materialIndex]:l.material;if(t!==void 0){E=t.side;f.sub(m.centroid,c);e=m.normal;t=d.dot(e);if(!(Math.abs(t)<O)){A=e.dot(f)/t;if(!(A<0)&&(E===a.DoubleSide||(E===a.FrontSide?t<0:t>0))){g.add(c,d.multiplyScalar(A));if(m instanceof a.Face3){t=B[m.a];A=B[m.b];E=B[m.c];if(q(g,t,A,E)){A=l.matrixWorld.multiplyVector3(g.clone());t=b.distanceTo(A);if(!(t<this.near)&&!(t>this.far)){m={distance:t,point:A,face:m,faceIndex:v,object:l};r.push(m)}}}else if(m instanceof
a.Face4){t=B[m.a];A=B[m.b];E=B[m.c];G=B[m.d];if(q(g,t,A,G)||q(g,A,E,G)){A=l.matrixWorld.multiplyVector3(g.clone());t=b.distanceTo(A);if(!(t<this.near)&&!(t>this.far)){m={distance:t,point:A,face:m,faceIndex:v,object:l};r.push(m)}}}}}}}}r.sort(i);return r};a.Ray.prototype.intersectObjects=function(a,b){for(var c=[],d=0,f=a.length;d<f;d++)Array.prototype.push.apply(c,this.intersectObject(a[d],b));c.sort(i);return c}})(THREE);
y.faces.length;v<u;v++){m=y.faces[v];t=x===true?F[m.materialIndex]:l.material;if(t!==void 0){E=t.side;f.sub(m.centroid,c);e=m.normal;t=d.dot(e);if(!(Math.abs(t)<O)){A=e.dot(f)/t;if(!(A<0)&&(E===a.DoubleSide||(E===a.FrontSide?t<0:t>0))){g.add(c,d.multiplyScalar(A));if(m instanceof a.Face3){t=B[m.a];A=B[m.b];E=B[m.c];if(q(g,t,A,E)){A=l.matrixWorld.multiplyVector3(g.clone());t=b.distanceTo(A);if(!(t<this.near||t>this.far)){m={distance:t,point:A,face:m,faceIndex:v,object:l};r.push(m)}}}else if(m instanceof
a.Face4){t=B[m.a];A=B[m.b];E=B[m.c];G=B[m.d];if(q(g,t,A,G)||q(g,A,E,G)){A=l.matrixWorld.multiplyVector3(g.clone());t=b.distanceTo(A);if(!(t<this.near||t>this.far)){m={distance:t,point:A,face:m,faceIndex:v,object:l};r.push(m)}}}}}}}}r.sort(i);return r};a.Ray.prototype.intersectObjects=function(a,b){for(var c=[],d=0,f=a.length;d<f;d++)Array.prototype.push.apply(c,this.intersectObject(a[d],b));c.sort(i);return c}})(THREE);
THREE.Rectangle=function(){function a(){e=d-b;g=f-c}var b=0,c=0,d=0,f=0,e=0,g=0,h=true;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return e};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return f};this.set=function(e,g,l,m){h=false;b=e;c=g;d=l;f=m;a()};this.addPoint=function(e,g){if(h===true){h=false;b=e;c=g;d=e;f=g}else{b=b<e?b:e;c=c<g?c:
g;d=d>e?d:e;f=f>g?f:g}a()};this.add3Points=function(e,g,l,m,n,q){if(h===true){h=false;b=e<l?e<n?e:n:l<n?l:n;c=g<m?g<q?g:q:m<q?m:q;d=e>l?e>n?e:n:l>n?l:n;f=g>m?g>q?g:q:m>q?m:q}else{b=e<l?e<n?e<b?e:b:n<b?n:b:l<n?l<b?l:b:n<b?n:b;c=g<m?g<q?g<c?g:c:q<c?q:c:m<q?m<c?m:c:q<c?q:c;d=e>l?e>n?e>d?e:d:n>d?n:d:l>n?l>d?l:d:n>d?n:d;f=g>m?g>q?g>f?g:f:q>f?q:f:m>q?m>f?m:f:q>f?q:f}a()};this.addRectangle=function(e){if(h===true){h=false;b=e.getLeft();c=e.getTop();d=e.getRight();f=e.getBottom()}else{b=b<e.getLeft()?b:e.getLeft();
c=c<e.getTop()?c:e.getTop();d=d>e.getRight()?d:e.getRight();f=f>e.getBottom()?f:e.getBottom()}a()};this.inflate=function(e){b=b-e;c=c-e;d=d+e;f=f+e;a()};this.minSelf=function(e){b=b>e.getLeft()?b:e.getLeft();c=c>e.getTop()?c:e.getTop();d=d<e.getRight()?d:e.getRight();f=f<e.getBottom()?f:e.getBottom();a()};this.intersects=function(a){return d<a.getLeft()||b>a.getRight()||f<a.getTop()||c>a.getBottom()?false:true};this.empty=function(){h=true;f=d=c=b=0;a()};this.isEmpty=function(){return h}};
......@@ -335,10 +335,10 @@ a.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,n,b)}if(q){i=0;for(j=q.length;
b=-1}else{k=0;b=a.length;l=1}for(var n=k;n!==b;n=n+l){i=a[n];if(i.render){k=i.object;j=i.buffer;if(h)i=h;else{i=i[c];if(!i)continue;g&&H.setBlending(i.blending,i.blendEquation,i.blendSrc,i.blendDst);H.setDepthTest(i.depthTest);H.setDepthWrite(i.depthWrite);t(i.polygonOffset,i.polygonOffsetFactor,i.polygonOffsetUnits)}H.setMaterialFaces(i);j instanceof THREE.BufferGeometry?H.renderBufferDirect(d,f,e,i,j,k):H.renderBuffer(d,f,e,i,j,k)}}}function l(a,b,c,d,f,e,g){for(var h,i,k=0,j=a.length;k<j;k++){h=
a[k];i=h.object;if(i.visible){if(g)h=g;else{h=h[b];if(!h)continue;e&&H.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);H.setDepthTest(h.depthTest);H.setDepthWrite(h.depthWrite);t(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}H.renderImmediateObject(c,d,f,h,i)}}}function m(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}function n(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return true;return false}function q(a){for(var b in a.attributes)a.attributes[b].needsUpdate=
false}function o(a,b){for(var c=a.length-1;c>=0;c--)a[c].object===b&&a.splice(c,1)}function p(a,b){for(var c=a.length-1;c>=0;c--)a[c]===b&&a.splice(c,1)}function s(a,b,c,d,f){if(d.needsUpdate){d.program&&H.deallocateMaterial(d);H.initMaterial(d,b,c,f);d.needsUpdate=false}if(d.morphTargets&&!f.__webglMorphTargetInfluences)f.__webglMorphTargetInfluences=new Float32Array(H.maxMorphTargets);var e=false,g=d.program,h=g.uniforms,i=d.uniforms;if(g!==L){k.useProgram(g);L=g;e=true}if(d.id!==qa){qa=d.id;e=
true}if(e||a!==na){k.uniformMatrix4fv(h.projectionMatrix,false,a._projectionMatrixArray);a!==na&&(na=a)}if(e){if(c&&d.fog){i.fogColor.value=c.color;if(c instanceof THREE.Fog){i.fogNear.value=c.near;i.fogFar.value=c.far}else if(c instanceof THREE.FogExp2)i.fogDensity.value=c.density}if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(ua){for(var j,l=0,n=0,m=0,o,p,q,u=fb,r=u.directional.colors,s=u.directional.positions,t=u.point.colors,v=u.point.positions,y=
u.point.distances,B=u.spot.colors,C=u.spot.positions,G=u.spot.distances,E=u.spot.directions,I=u.spot.angles,J=u.spot.exponents,M=0,P=0,O=0,K=q=0,c=K=0,e=b.length;c<e;c++){j=b[c];if(!j.onlyShadow&&j.visible){o=j.color;p=j.intensity;q=j.distance;if(j instanceof THREE.AmbientLight)if(H.gammaInput){l=l+o.r*o.r;n=n+o.g*o.g;m=m+o.b*o.b}else{l=l+o.r;n=n+o.g;m=m+o.b}else if(j instanceof THREE.DirectionalLight){q=M*3;if(H.gammaInput){r[q]=o.r*o.r*p*p;r[q+1]=o.g*o.g*p*p;r[q+2]=o.b*o.b*p*p}else{r[q]=o.r*p;r[q+
1]=o.g*p;r[q+2]=o.b*p}Ha.copy(j.matrixWorld.getPosition());Ha.subSelf(j.target.matrixWorld.getPosition());Ha.normalize();s[q]=Ha.x;s[q+1]=Ha.y;s[q+2]=Ha.z;M=M+1}else if(j instanceof THREE.PointLight){K=P*3;if(H.gammaInput){t[K]=o.r*o.r*p*p;t[K+1]=o.g*o.g*p*p;t[K+2]=o.b*o.b*p*p}else{t[K]=o.r*p;t[K+1]=o.g*p;t[K+2]=o.b*p}o=j.matrixWorld.getPosition();v[K]=o.x;v[K+1]=o.y;v[K+2]=o.z;y[P]=q;P=P+1}else if(j instanceof THREE.SpotLight){K=O*3;if(H.gammaInput){B[K]=o.r*o.r*p*p;B[K+1]=o.g*o.g*p*p;B[K+2]=o.b*
o.b*p*p}else{B[K]=o.r*p;B[K+1]=o.g*p;B[K+2]=o.b*p}o=j.matrixWorld.getPosition();C[K]=o.x;C[K+1]=o.y;C[K+2]=o.z;G[O]=q;Ha.copy(o);Ha.subSelf(j.target.matrixWorld.getPosition());Ha.normalize();E[K]=Ha.x;E[K+1]=Ha.y;E[K+2]=Ha.z;I[O]=Math.cos(j.angle);J[O]=j.exponent;O=O+1}}}c=M*3;for(e=r.length;c<e;c++)r[c]=0;c=P*3;for(e=t.length;c<e;c++)t[c]=0;c=O*3;for(e=B.length;c<e;c++)B[c]=0;u.directional.length=M;u.point.length=P;u.spot.length=O;u.ambient[0]=l;u.ambient[1]=n;u.ambient[2]=m;ua=false}c=fb;i.ambientLightColor.value=
true}if(e||a!==na){k.uniformMatrix4fv(h.projectionMatrix,false,a._projectionMatrixArray);a!==na&&(na=a)}if(e){if(c&&d.fog){i.fogColor.value=c.color;if(c instanceof THREE.Fog){i.fogNear.value=c.near;i.fogFar.value=c.far}else if(c instanceof THREE.FogExp2)i.fogDensity.value=c.density}if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(ua){for(var j,l=0,n=0,m=0,o,p,q,r=fb,u=r.directional.colors,s=r.directional.positions,t=r.point.colors,v=r.point.positions,y=
r.point.distances,B=r.spot.colors,C=r.spot.positions,G=r.spot.distances,E=r.spot.directions,I=r.spot.angles,J=r.spot.exponents,M=0,P=0,O=0,K=q=0,c=K=0,e=b.length;c<e;c++){j=b[c];if(!j.onlyShadow&&j.visible){o=j.color;p=j.intensity;q=j.distance;if(j instanceof THREE.AmbientLight)if(H.gammaInput){l=l+o.r*o.r;n=n+o.g*o.g;m=m+o.b*o.b}else{l=l+o.r;n=n+o.g;m=m+o.b}else if(j instanceof THREE.DirectionalLight){q=M*3;if(H.gammaInput){u[q]=o.r*o.r*p*p;u[q+1]=o.g*o.g*p*p;u[q+2]=o.b*o.b*p*p}else{u[q]=o.r*p;u[q+
1]=o.g*p;u[q+2]=o.b*p}Ha.copy(j.matrixWorld.getPosition());Ha.subSelf(j.target.matrixWorld.getPosition());Ha.normalize();s[q]=Ha.x;s[q+1]=Ha.y;s[q+2]=Ha.z;M=M+1}else if(j instanceof THREE.PointLight){K=P*3;if(H.gammaInput){t[K]=o.r*o.r*p*p;t[K+1]=o.g*o.g*p*p;t[K+2]=o.b*o.b*p*p}else{t[K]=o.r*p;t[K+1]=o.g*p;t[K+2]=o.b*p}o=j.matrixWorld.getPosition();v[K]=o.x;v[K+1]=o.y;v[K+2]=o.z;y[P]=q;P=P+1}else if(j instanceof THREE.SpotLight){K=O*3;if(H.gammaInput){B[K]=o.r*o.r*p*p;B[K+1]=o.g*o.g*p*p;B[K+2]=o.b*
o.b*p*p}else{B[K]=o.r*p;B[K+1]=o.g*p;B[K+2]=o.b*p}o=j.matrixWorld.getPosition();C[K]=o.x;C[K+1]=o.y;C[K+2]=o.z;G[O]=q;Ha.copy(o);Ha.subSelf(j.target.matrixWorld.getPosition());Ha.normalize();E[K]=Ha.x;E[K+1]=Ha.y;E[K+2]=Ha.z;I[O]=Math.cos(j.angle);J[O]=j.exponent;O=O+1}}}c=M*3;for(e=u.length;c<e;c++)u[c]=0;c=P*3;for(e=t.length;c<e;c++)t[c]=0;c=O*3;for(e=B.length;c<e;c++)B[c]=0;r.directional.length=M;r.point.length=P;r.spot.length=O;r.ambient[0]=l;r.ambient[1]=n;r.ambient[2]=m;ua=false}c=fb;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.spotLightAngle.value=c.spot.angles;i.spotLightExponent.value=c.spot.exponents}if(d instanceof
THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial){i.opacity.value=d.opacity;H.gammaInput?i.diffuse.value.copyGammaToLinear(d.color):i.diffuse.value=d.color;i.map.texture=d.map;i.lightMap.texture=d.lightMap;i.specularMap.texture=d.specularMap;if(d.bumpMap){i.bumpMap.texture=d.bumpMap;i.bumpScale.value=d.bumpScale}var N;if(d.map)N=d.map;else if(d.specularMap)N=d.specularMap;else if(d.bumpMap)N=d.bumpMap;if(N!==void 0){c=N.offset;N=N.repeat;i.offsetRepeat.value.set(c.x,
c.y,N.x,N.y)}i.envMap.texture=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}if(d instanceof THREE.LineBasicMaterial){i.diffuse.value=d.color;i.opacity.value=d.opacity}else if(d instanceof THREE.ParticleBasicMaterial){i.psColor.value=d.color;i.opacity.value=d.opacity;i.size.value=
......@@ -348,7 +348,7 @@ i.emissive.value.copyGammaToLinear(d.emissive)}else{i.ambient.value=d.ambient;i.
e.z,e.w);else if(l==="c")k.uniform3f(j,e.r,e.g,e.b);else if(l==="iv1")k.uniform1iv(j,e);else if(l==="iv")k.uniform3iv(j,e);else if(l==="fv1")k.uniform1fv(j,e);else if(l==="fv")k.uniform3fv(j,e);else if(l==="v2v"){if(c._array===void 0)c._array=new Float32Array(2*e.length);l=0;for(n=e.length;l<n;l++){m=l*2;c._array[m]=e[l].x;c._array[m+1]=e[l].y}k.uniform2fv(j,c._array)}else if(l==="v3v"){if(c._array===void 0)c._array=new Float32Array(3*e.length);l=0;for(n=e.length;l<n;l++){m=l*3;c._array[m]=e[l].x;
c._array[m+1]=e[l].y;c._array[m+2]=e[l].z}k.uniform3fv(j,c._array)}else if(l==="v4v"){if(c._array===void 0)c._array=new Float32Array(4*e.length);l=0;for(n=e.length;l<n;l++){m=l*4;c._array[m]=e[l].x;c._array[m+1]=e[l].y;c._array[m+2]=e[l].z;c._array[m+3]=e[l].w}k.uniform4fv(j,c._array)}else if(l==="m4"){if(c._array===void 0)c._array=new Float32Array(16);e.flattenToArray(c._array);k.uniformMatrix4fv(j,false,c._array)}else if(l==="m4v"){if(c._array===void 0)c._array=new Float32Array(16*e.length);l=0;
for(n=e.length;l<n;l++)e[l].flattenToArrayOffset(c._array,l*16);k.uniformMatrix4fv(j,false,c._array)}else if(l==="t"){k.uniform1i(j,e);if(j=c.texture)if(j.image instanceof Array&&j.image.length===6){c=j;if(c.image.length===6)if(c.needsUpdate){if(!c.image.__webglTextureCube)c.image.__webglTextureCube=k.createTexture();k.activeTexture(k.TEXTURE0+e);k.bindTexture(k.TEXTURE_CUBE_MAP,c.image.__webglTextureCube);k.pixelStorei(k.UNPACK_FLIP_Y_WEBGL,c.flipY);e=[];for(j=0;j<6;j++)if(H.autoScaleCubemaps){l=
e;n=j;m=c.image[j];r=hb;if(!(m.width<=r&&m.height<=r)){s=Math.max(m.width,m.height);u=Math.floor(m.width*r/s);r=Math.floor(m.height*r/s);s=document.createElement("canvas");s.width=u;s.height=r;s.getContext("2d").drawImage(m,0,0,m.width,m.height,0,0,u,r);m=s}l[n]=m}else e[j]=c.image[j];j=e[0];l=(j.width&j.width-1)===0&&(j.height&j.height-1)===0;n=F(c.format);m=F(c.type);A(k.TEXTURE_CUBE_MAP,c,l);for(j=0;j<6;j++)k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+j,0,n,n,m,e[j]);c.generateMipmaps&&l&&k.generateMipmap(k.TEXTURE_CUBE_MAP);
e;n=j;m=c.image[j];u=hb;if(!(m.width<=u&&m.height<=u)){s=Math.max(m.width,m.height);r=Math.floor(m.width*u/s);u=Math.floor(m.height*u/s);s=document.createElement("canvas");s.width=r;s.height=u;s.getContext("2d").drawImage(m,0,0,m.width,m.height,0,0,r,u);m=s}l[n]=m}else e[j]=c.image[j];j=e[0];l=(j.width&j.width-1)===0&&(j.height&j.height-1)===0;n=F(c.format);m=F(c.type);A(k.TEXTURE_CUBE_MAP,c,l);for(j=0;j<6;j++)k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+j,0,n,n,m,e[j]);c.generateMipmaps&&l&&k.generateMipmap(k.TEXTURE_CUBE_MAP);
c.needsUpdate=false;if(c.onUpdate)c.onUpdate()}else{k.activeTexture(k.TEXTURE0+e);k.bindTexture(k.TEXTURE_CUBE_MAP,c.image.__webglTextureCube)}}else if(j instanceof THREE.WebGLRenderTargetCube){c=j;k.activeTexture(k.TEXTURE0+e);k.bindTexture(k.TEXTURE_CUBE_MAP,c.__webglTexture)}else H.setTexture(j,e)}else if(l==="tv"){if(c._array===void 0){c._array=[];l=0;for(n=c.texture.length;l<n;l++)c._array[l]=e+l}k.uniform1iv(j,c._array);l=0;for(n=c.texture.length;l<n;l++)(j=c.texture[l])&&H.setTexture(j,c._array[l])}}if((d instanceof
THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&h.cameraPosition!==null){b=a.matrixWorld.getPosition();k.uniform3f(h.cameraPosition,b.x,b.y,b.z)}(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&h.viewMatrix!==null&&k.uniformMatrix4fv(h.viewMatrix,false,a._viewMatrixArray)}if(d.skinning)if(cc&&f.useVertexTexture){if(h.boneTexture!==null){k.uniform1i(h.boneTexture,12);H.setTexture(f.boneTexture,12)}}else h.boneGlobalMatrices!==
null&&k.uniformMatrix4fv(h.boneGlobalMatrices,false,f.boneMatrices);k.uniformMatrix4fv(h.modelViewMatrix,false,f._modelViewMatrix.elements);h.normalMatrix&&k.uniformMatrix3fv(h.normalMatrix,false,f._normalMatrix.elements);h.modelMatrix!==null&&k.uniformMatrix4fv(h.modelMatrix,false,f.matrixWorld.elements);return g}function r(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function t(a,b,c){if(Ja!==a){a?
......@@ -392,9 +392,9 @@ s;p.opaque=null}else{p.opaque=s;p.transparent=null}}}else if(s)if(s.transparent)
null}}}if(a.overrideMaterial){d=a.overrideMaterial;this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst);this.setDepthTest(d.depthTest);this.setDepthWrite(d.depthWrite);t(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits);j(a.__webglObjects,false,"",b,n,o,true,d);l(a.__webglObjectsImmediate,"",b,n,o,false,d)}else{this.setBlending(THREE.NormalBlending);j(a.__webglObjects,true,"opaque",b,n,o,false);l(a.__webglObjectsImmediate,"opaque",b,n,o,false);j(a.__webglObjects,false,"transparent",
b,n,o,true);l(a.__webglObjectsImmediate,"transparent",b,n,o,true)}i(this.renderPluginsPost,a,b);if(c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter)if(c instanceof THREE.WebGLRenderTargetCube){k.bindTexture(k.TEXTURE_CUBE_MAP,c.__webglTexture);k.generateMipmap(k.TEXTURE_CUBE_MAP);k.bindTexture(k.TEXTURE_CUBE_MAP,null)}else{k.bindTexture(k.TEXTURE_2D,c.__webglTexture);k.generateMipmap(k.TEXTURE_2D);k.bindTexture(k.TEXTURE_2D,null)}this.setDepthTest(true);this.setDepthWrite(true)}};
this.renderImmediateObject=function(a,b,c,d,e){var f=s(a,b,c,d,e);ha=-1;H.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,k,Ca):e.render(function(a){H.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){if(!a.__webglObjects){a.__webglObjects=[];a.__webglObjectsImmediate=[];a.__webglSprites=[];a.__webglFlares=[]}for(;a.__objectsAdded.length;){var g=a.__objectsAdded[0],h=a,i=void 0,j=void 0,l=void 0;if(!g.__webglInit){g.__webglInit=true;g._modelViewMatrix=new THREE.Matrix4;
g._normalMatrix=new THREE.Matrix3;if(g instanceof THREE.Mesh){j=g.geometry;if(j instanceof THREE.Geometry){if(j.geometryGroups===void 0){var u=j,s=void 0,r=void 0,t=void 0,v=void 0,x=void 0,y=void 0,A=void 0,B={},F=u.morphTargets.length,C=u.morphNormals.length;u.geometryGroups={};s=0;for(r=u.faces.length;s<r;s++){t=u.faces[s];v=t.materialIndex;y=v!==void 0?v:-1;B[y]===void 0&&(B[y]={hash:y,counter:0});A=B[y].hash+"_"+B[y].counter;u.geometryGroups[A]===void 0&&(u.geometryGroups[A]={faces3:[],faces4:[],
materialIndex:v,vertices:0,numMorphTargets:F,numMorphNormals:C});x=t instanceof THREE.Face3?3:4;if(u.geometryGroups[A].vertices+x>65535){B[y].counter=B[y].counter+1;A=B[y].hash+"_"+B[y].counter;u.geometryGroups[A]===void 0&&(u.geometryGroups[A]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:F,numMorphNormals:C})}t instanceof THREE.Face3?u.geometryGroups[A].faces3.push(s):u.geometryGroups[A].faces4.push(s);u.geometryGroups[A].vertices=u.geometryGroups[A].vertices+x}u.geometryGroupsList=
[];var G=void 0;for(G in u.geometryGroups){u.geometryGroups[G].id=ba++;u.geometryGroupsList.push(u.geometryGroups[G])}}for(i in j.geometryGroups){l=j.geometryGroups[i];if(!l.__webglVertexBuffer){var E=l;E.__webglVertexBuffer=k.createBuffer();E.__webglNormalBuffer=k.createBuffer();E.__webglTangentBuffer=k.createBuffer();E.__webglColorBuffer=k.createBuffer();E.__webglUVBuffer=k.createBuffer();E.__webglUV2Buffer=k.createBuffer();E.__webglSkinIndicesBuffer=k.createBuffer();E.__webglSkinWeightsBuffer=
g._normalMatrix=new THREE.Matrix3;if(g instanceof THREE.Mesh){j=g.geometry;if(j instanceof THREE.Geometry){if(j.geometryGroups===void 0){var r=j,u=void 0,s=void 0,t=void 0,v=void 0,x=void 0,y=void 0,A=void 0,B={},F=r.morphTargets.length,C=r.morphNormals.length;r.geometryGroups={};u=0;for(s=r.faces.length;u<s;u++){t=r.faces[u];v=t.materialIndex;y=v!==void 0?v:-1;B[y]===void 0&&(B[y]={hash:y,counter:0});A=B[y].hash+"_"+B[y].counter;r.geometryGroups[A]===void 0&&(r.geometryGroups[A]={faces3:[],faces4:[],
materialIndex:v,vertices:0,numMorphTargets:F,numMorphNormals:C});x=t instanceof THREE.Face3?3:4;if(r.geometryGroups[A].vertices+x>65535){B[y].counter=B[y].counter+1;A=B[y].hash+"_"+B[y].counter;r.geometryGroups[A]===void 0&&(r.geometryGroups[A]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:F,numMorphNormals:C})}t instanceof THREE.Face3?r.geometryGroups[A].faces3.push(u):r.geometryGroups[A].faces4.push(u);r.geometryGroups[A].vertices=r.geometryGroups[A].vertices+x}r.geometryGroupsList=
[];var G=void 0;for(G in r.geometryGroups){r.geometryGroups[G].id=ba++;r.geometryGroupsList.push(r.geometryGroups[G])}}for(i in j.geometryGroups){l=j.geometryGroups[i];if(!l.__webglVertexBuffer){var E=l;E.__webglVertexBuffer=k.createBuffer();E.__webglNormalBuffer=k.createBuffer();E.__webglTangentBuffer=k.createBuffer();E.__webglColorBuffer=k.createBuffer();E.__webglUVBuffer=k.createBuffer();E.__webglUV2Buffer=k.createBuffer();E.__webglSkinIndicesBuffer=k.createBuffer();E.__webglSkinWeightsBuffer=
k.createBuffer();E.__webglFaceBuffer=k.createBuffer();E.__webglLineBuffer=k.createBuffer();var I=void 0,J=void 0;if(E.numMorphTargets){E.__webglMorphTargetsBuffers=[];I=0;for(J=E.numMorphTargets;I<J;I++)E.__webglMorphTargetsBuffers.push(k.createBuffer())}if(E.numMorphNormals){E.__webglMorphNormalsBuffers=[];I=0;for(J=E.numMorphNormals;I<J;I++)E.__webglMorphNormalsBuffers.push(k.createBuffer())}H.info.memory.geometries++;var M=l,K=g,L=K.geometry,N=M.faces3,O=M.faces4,P=N.length*3+O.length*4,Q=N.length*
1+O.length*2,Y=N.length*3+O.length*4,aa=c(K,M),X=f(aa),ga=d(aa),ea=aa.vertexColors?aa.vertexColors:false;M.__vertexArray=new Float32Array(P*3);if(ga)M.__normalArray=new Float32Array(P*3);if(L.hasTangents)M.__tangentArray=new Float32Array(P*4);if(ea)M.__colorArray=new Float32Array(P*3);if(X){if(L.faceUvs.length>0||L.faceVertexUvs.length>0)M.__uvArray=new Float32Array(P*2);if(L.faceUvs.length>1||L.faceVertexUvs.length>1)M.__uv2Array=new Float32Array(P*2)}if(K.geometry.skinWeights.length&&K.geometry.skinIndices.length){M.__skinIndexArray=
new Float32Array(P*4);M.__skinWeightArray=new Float32Array(P*4)}M.__faceArray=new Uint16Array(Q*3);M.__lineArray=new Uint16Array(Y*2);var oa=void 0,ra=void 0;if(M.numMorphTargets){M.__morphTargetsArrays=[];oa=0;for(ra=M.numMorphTargets;oa<ra;oa++)M.__morphTargetsArrays.push(new Float32Array(P*3))}if(M.numMorphNormals){M.__morphNormalsArrays=[];oa=0;for(ra=M.numMorphNormals;oa<ra;oa++)M.__morphNormalsArrays.push(new Float32Array(P*3))}M.__webglFaceCount=Q*3;M.__webglLineCount=Y*2;if(aa.attributes){if(M.__webglCustomAttributesList===
......@@ -444,16 +444,16 @@ THREE.ParticleSystem){$a=c(ub,fb);hb=$a.attributes&&n($a);(ca.verticesNeedUpdate
m="phong":a instanceof THREE.LineBasicMaterial?m="basic":a instanceof THREE.ParticleBasicMaterial&&(m="particle_basic");if(m){var n=THREE.ShaderLib[m];a.uniforms=THREE.UniformsUtils.clone(n.uniforms);a.vertexShader=n.vertexShader;a.fragmentShader=n.fragmentShader}var o,p;o=g=e=n=0;for(f=b.length;o<f;o++){p=b[o];if(!p.onlyShadow){p instanceof THREE.DirectionalLight&&g++;p instanceof THREE.PointLight&&e++;p instanceof THREE.SpotLight&&n++}}if(e+n+g<=K){o=g;f=e}else{o=Math.ceil(K*g/(e+g));n=f=K-o}e=
o;g=n;n=l=0;for(o=b.length;n<o;n++){p=b[n];if(p.castShadow){p instanceof THREE.SpotLight&&l++;p instanceof THREE.DirectionalLight&&!p.shadowCascade&&l++}}if(cc&&d&&d.useVertexTexture)j=1024;else{b=k.getParameter(k.MAX_VERTEX_UNIFORM_VECTORS);b=Math.floor((b-20)/4);if(d!==void 0&&d instanceof THREE.SkinnedMesh){b=Math.min(d.bones.length,b);b<d.bones.length&&console.warn("WebGLRenderer: too many bones - "+d.bones.length+", this GPU supports just "+b+" (try OpenGL instead of ANGLE)")}j=b}var q;a:{p=
a.fragmentShader;o=a.vertexShader;var n=a.uniforms,b=a.attributes,c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,bumpMap:!!a.bumpMap,specularMap:!!a.specularMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,maxBones:j,useVertexTexture:cc&&d&&d.useVertexTexture,boneTextureWidth:d&&d.boneTextureWidth,boneTextureHeight:d&&d.boneTextureHeight,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,
maxDirLights:e,maxPointLights:f,maxSpotLights:g,maxShadows:l,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel,wrapAround:a.wrapAround,doubleSided:a.side===THREE.DoubleSide},s,d=[];if(m)d.push(m);else{d.push(p);d.push(o)}for(s in c){d.push(s);d.push(c[s])}m=d.join();s=0;for(d=X.length;s<d;s++){e=X[s];if(e.code===m){e.usedTimes++;q=
e.program;break a}}s=k.createProgram();d=["precision "+E+" float;",rc?"#define VERTEX_TEXTURES":"",H.gammaInput?"#define GAMMA_INPUT":"",H.gammaOutput?"#define GAMMA_OUTPUT":"",H.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?
maxDirLights:e,maxPointLights:f,maxSpotLights:g,maxShadows:l,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel,wrapAround:a.wrapAround,doubleSided:a.side===THREE.DoubleSide},r,d=[];if(m)d.push(m);else{d.push(p);d.push(o)}for(r in c){d.push(r);d.push(c[r])}m=d.join();r=0;for(d=X.length;r<d;r++){e=X[r];if(e.code===m){e.usedTimes++;q=
e.program;break a}}r=k.createProgram();d=["precision "+E+" float;",rc?"#define VERTEX_TEXTURES":"",H.gammaInput?"#define GAMMA_INPUT":"",H.gammaOutput?"#define GAMMA_OUTPUT":"",H.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?
"#define USE_LIGHTMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.specularMap?"#define USE_SPECULARMAP":"",c.vertexColors?"#define USE_COLOR":"",c.skinning?"#define USE_SKINNING":"",c.useVertexTexture?"#define BONE_TEXTURE":"",c.boneTextureWidth?"#define N_BONE_PIXEL_X "+c.boneTextureWidth.toFixed(1):"",c.boneTextureHeight?"#define N_BONE_PIXEL_Y "+c.boneTextureHeight.toFixed(1):"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.morphNormals?"#define USE_MORPHNORMALS":"",c.perPixel?"#define PHONG_PER_PIXEL":
"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\n#ifdef USE_MORPHNORMALS\nattribute vec3 morphNormal0;\nattribute vec3 morphNormal1;\nattribute vec3 morphNormal2;\nattribute vec3 morphNormal3;\n#else\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
e=["precision "+E+" float;",c.bumpMap?"#extension GL_OES_standard_derivatives : enable":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",H.gammaInput?"#define GAMMA_INPUT":"",H.gammaOutput?"#define GAMMA_OUTPUT":"",H.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"",c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fog instanceof
THREE.FogExp2?"#define FOG_EXP2":"",c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.specularMap?"#define USE_SPECULARMAP":"",c.vertexColors?"#define USE_COLOR":"",c.metal?"#define METAL":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?
"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");e=u("fragment",e+p);d=u("vertex",d+o);k.attachShader(s,d);k.attachShader(s,e);k.linkProgram(s);k.getProgramParameter(s,k.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+k.getProgramParameter(s,k.VALIDATE_STATUS)+", gl error ["+k.getError()+"]");k.deleteShader(e);k.deleteShader(d);s.uniforms={};s.attributes={};var r,d=["viewMatrix",
"modelViewMatrix","projectionMatrix","normalMatrix","modelMatrix","cameraPosition","morphTargetInfluences"];c.useVertexTexture?d.push("boneTexture"):d.push("boneGlobalMatrices");for(r in n)d.push(r);r=d;d=0;for(n=r.length;d<n;d++){e=r[d];s.uniforms[e]=k.getUniformLocation(s,e)}d=["position","normal","uv","uv2","tangent","color","skinIndex","skinWeight"];for(r=0;r<c.maxMorphTargets;r++)d.push("morphTarget"+r);for(r=0;r<c.maxMorphNormals;r++)d.push("morphNormal"+r);for(q in b)d.push(q);q=d;r=0;for(c=
q.length;r<c;r++){d=q[r];s.attributes[d]=k.getAttribLocation(s,d)}s.id=P++;X.push({program:s,code:m,usedTimes:1});H.info.memory.programs=X.length;q=s}a.program=q;q=a.program.attributes;q.position>=0&&k.enableVertexAttribArray(q.position);q.color>=0&&k.enableVertexAttribArray(q.color);q.normal>=0&&k.enableVertexAttribArray(q.normal);q.tangent>=0&&k.enableVertexAttribArray(q.tangent);if(a.skinning&&q.skinIndex>=0&&q.skinWeight>=0){k.enableVertexAttribArray(q.skinIndex);k.enableVertexAttribArray(q.skinWeight)}if(a.attributes)for(i in a.attributes)q[i]!==
void 0&&q[i]>=0&&k.enableVertexAttribArray(q[i]);if(a.morphTargets){a.numSupportedMorphTargets=0;s="morphTarget";for(i=0;i<this.maxMorphTargets;i++){r=s+i;if(q[r]>=0){k.enableVertexAttribArray(q[r]);a.numSupportedMorphTargets++}}}if(a.morphNormals){a.numSupportedMorphNormals=0;s="morphNormal";for(i=0;i<this.maxMorphNormals;i++){r=s+i;if(q[r]>=0){k.enableVertexAttribArray(q[r]);a.numSupportedMorphNormals++}}}a.uniformsList=[];for(h in a.uniforms)a.uniformsList.push([a.uniforms[h],h])};this.setFaceCulling=
"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");e=u("fragment",e+p);d=u("vertex",d+o);k.attachShader(r,d);k.attachShader(r,e);k.linkProgram(r);k.getProgramParameter(r,k.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+k.getProgramParameter(r,k.VALIDATE_STATUS)+", gl error ["+k.getError()+"]");k.deleteShader(e);k.deleteShader(d);r.uniforms={};r.attributes={};var s,d=["viewMatrix",
"modelViewMatrix","projectionMatrix","normalMatrix","modelMatrix","cameraPosition","morphTargetInfluences"];c.useVertexTexture?d.push("boneTexture"):d.push("boneGlobalMatrices");for(s in n)d.push(s);s=d;d=0;for(n=s.length;d<n;d++){e=s[d];r.uniforms[e]=k.getUniformLocation(r,e)}d=["position","normal","uv","uv2","tangent","color","skinIndex","skinWeight"];for(s=0;s<c.maxMorphTargets;s++)d.push("morphTarget"+s);for(s=0;s<c.maxMorphNormals;s++)d.push("morphNormal"+s);for(q in b)d.push(q);q=d;s=0;for(c=
q.length;s<c;s++){d=q[s];r.attributes[d]=k.getAttribLocation(r,d)}r.id=P++;X.push({program:r,code:m,usedTimes:1});H.info.memory.programs=X.length;q=r}a.program=q;q=a.program.attributes;q.position>=0&&k.enableVertexAttribArray(q.position);q.color>=0&&k.enableVertexAttribArray(q.color);q.normal>=0&&k.enableVertexAttribArray(q.normal);q.tangent>=0&&k.enableVertexAttribArray(q.tangent);if(a.skinning&&q.skinIndex>=0&&q.skinWeight>=0){k.enableVertexAttribArray(q.skinIndex);k.enableVertexAttribArray(q.skinWeight)}if(a.attributes)for(i in a.attributes)q[i]!==
void 0&&q[i]>=0&&k.enableVertexAttribArray(q[i]);if(a.morphTargets){a.numSupportedMorphTargets=0;r="morphTarget";for(i=0;i<this.maxMorphTargets;i++){s=r+i;if(q[s]>=0){k.enableVertexAttribArray(q[s]);a.numSupportedMorphTargets++}}}if(a.morphNormals){a.numSupportedMorphNormals=0;r="morphNormal";for(i=0;i<this.maxMorphNormals;i++){s=r+i;if(q[s]>=0){k.enableVertexAttribArray(q[s]);a.numSupportedMorphNormals++}}}a.uniformsList=[];for(h in a.uniforms)a.uniformsList.push([a.uniforms[h],h])};this.setFaceCulling=
function(a,b){if(a){!b||b==="ccw"?k.frontFace(k.CCW):k.frontFace(k.CW);a==="back"?k.cullFace(k.BACK):a==="front"?k.cullFace(k.FRONT):k.cullFace(k.FRONT_AND_BACK);k.enable(k.CULL_FACE)}else k.disable(k.CULL_FACE)};this.setMaterialFaces=function(a){var b=a.side===THREE.DoubleSide,a=a.side===THREE.BackSide;if(aa!==b){b?k.disable(k.CULL_FACE):k.enable(k.CULL_FACE);aa=b}if(M!==a){a?k.frontFace(k.CW):k.frontFace(k.CCW);M=a}};this.setDepthTest=function(a){if(ta!==a){a?k.enable(k.DEPTH_TEST):k.disable(k.DEPTH_TEST);
ta=a}};this.setDepthWrite=function(a){if(Da!==a){k.depthMask(a);Da=a}};this.setBlending=function(a,b,c,d){if(a!==Y){if(a===THREE.NoBlending)k.disable(k.BLEND);else if(a===THREE.AdditiveBlending){k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE)}else if(a===THREE.SubtractiveBlending){k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.ZERO,k.ONE_MINUS_SRC_COLOR)}else if(a===THREE.MultiplyBlending){k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.ZERO,k.SRC_COLOR)}else if(a===
THREE.CustomBlending)k.enable(k.BLEND);else{k.enable(k.BLEND);k.blendEquationSeparate(k.FUNC_ADD,k.FUNC_ADD);k.blendFuncSeparate(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA,k.ONE,k.ONE_MINUS_SRC_ALPHA)}Y=a}if(a===THREE.CustomBlending){if(b!==ga){k.blendEquation(F(b));ga=b}if(c!==ra||d!==oa){k.blendFunc(F(c),F(d));ra=c;oa=d}}else oa=ra=ga=null};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit){a.__webglInit=true;a.__webglTexture=k.createTexture();H.info.memory.textures++}k.activeTexture(k.TEXTURE0+
......
......@@ -68,7 +68,7 @@ THREE.Projector = function() {
};
function projectGraph( root, sort ) {
var projectGraph = function ( root, sort ) {
_objectCount = 0;
......
/**
* @author mrdoob / http://mrdoob.com/
*/
(function(THREE){
( function ( THREE ) {
THREE.Ray = function ( origin, direction, near, far ) {
......@@ -90,7 +91,7 @@
if ( distance > object.scale.x ) {
return [];
return intersects;
}
......@@ -109,14 +110,13 @@
// Checking boundingSphere
//var scale = THREE.Frustum.__v1.set( object.matrixWorld.getColumnX().length(), object.matrixWorld.getColumnY().length(), object.matrixWorld.getColumnZ().length() );
var scaledRadius = object.geometry.boundingSphere.radius * object.matrixWorld.getMaxScaleOnAxis();
// Checking distance to ray
distance = distanceFromIntersection( this.origin, this.direction, object.matrixWorld.getPosition() );
if ( distance > scaledRadius) {
if ( distance > scaledRadius ) {
return intersects;
......@@ -142,13 +142,13 @@
//directionCopy.copy( this.direction );
objMatrix = object.matrixWorld;
inverseMatrix.getInverse(objMatrix);
inverseMatrix.getInverse( objMatrix );
localOriginCopy.copy(originCopy);
inverseMatrix.multiplyVector3(localOriginCopy);
localOriginCopy.copy( originCopy );
inverseMatrix.multiplyVector3( localOriginCopy );
localDirectionCopy.copy(this.direction);
inverseMatrix.rotateAxis(localDirectionCopy).normalize();
localDirectionCopy.copy( this.direction );
inverseMatrix.rotateAxis( localDirectionCopy ).normalize();
for ( f = 0, fl = geometry.faces.length; f < fl; f ++ ) {
......@@ -186,11 +186,10 @@
if ( pointInFace3( intersectPoint, a, b, c ) ) {
point = object.matrixWorld.multiplyVector3(intersectPoint.clone());
distance = originCopy.distanceTo( point);
point = object.matrixWorld.multiplyVector3( intersectPoint.clone() );
distance = originCopy.distanceTo( point );
if ( distance < this.near ) continue;
if ( distance > this.far ) continue;
if ( distance < this.near || distance > this.far ) continue;
intersect = {
......@@ -215,11 +214,10 @@
if ( pointInFace3( intersectPoint, a, b, d ) || pointInFace3( intersectPoint, b, c, d ) ) {
point = object.matrixWorld.multiplyVector3(intersectPoint.clone());
distance = originCopy.distanceTo( point);
point = object.matrixWorld.multiplyVector3( intersectPoint.clone() );
distance = originCopy.distanceTo( point );
if ( distance < this.near ) continue;
if ( distance > this.far ) continue;
if ( distance < this.near || distance > this.far ) continue;
intersect = {
......@@ -265,4 +263,4 @@
};
}(THREE));
}( THREE ) );
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册