You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2 lines
5.2 KiB
JavaScript

define(["./AttributeCompression-f02ec82f","./Cartesian2-8417ca3d","./IndexDatatype-d47ad6f6","./Math-4e53b694","./createTaskProcessorWorker","./Check-d18af7c4","./when-208fe5b0","./WebGLConstants-76bb35d1"],function(B,R,U,T,a,e,t,r){"use strict";var V=32767,i=Math.cos(T.CesiumMath.toRadians(150)),W=new R.Cartographic,q=new R.Cartesian3;var z=new R.Cartographic,L=new R.Cartographic;function _(a){var e=8*a,t=3*e,r=4*e;this.startEllipsoidNormals=new Float32Array(t),this.endEllipsoidNormals=new Float32Array(t),this.startPositionAndHeights=new Float32Array(r),this.startFaceNormalAndVertexCornerIds=new Float32Array(r),this.endPositionAndHeights=new Float32Array(r),this.endFaceNormalAndHalfWidths=new Float32Array(r),this.vertexBatchIds=new Uint16Array(e),this.indices=U.IndexDatatype.createTypedArray(e,36*a),this.vec3Offset=0,this.vec4Offset=0,this.batchIdOffset=0,this.indexOffset=0,this.volumeStartIndex=0}var o=new R.Cartesian3,d=new R.Cartesian3;function H(a,e,t,r,s){var n=R.Cartesian3.subtract(t,e,d),t=R.Cartesian3.subtract(e,a,o);return R.Cartesian3.normalize(n,n),R.Cartesian3.normalize(t,t),R.Cartesian3.dot(n,t)<i&&(t=R.Cartesian3.multiplyByScalar(t,-1,o)),R.Cartesian3.add(n,t,s),R.Cartesian3.equals(s,R.Cartesian3.ZERO)&&(s=R.Cartesian3.subtract(a,e)),R.Cartesian3.cross(s,r,s),R.Cartesian3.cross(r,s,s),R.Cartesian3.normalize(s,s),s}var O=[0,2,6,0,6,4,0,1,3,0,3,2,0,4,5,0,5,1,5,3,1,5,7,3,7,5,4,7,4,6,7,6,2,7,2,3],P=O.length,S=new R.Cartesian3,D=new R.Cartesian3,M=new R.Cartesian3,G=new R.Cartesian3,Z=new R.Cartesian3;_.prototype.addVolume=function(a,e,t,r,s,n,i,o,d,l){for(var c=R.Cartesian3.add(e,d,S),h=l.geodeticSurfaceNormal(c,D),c=R.Cartesian3.add(t,d,S),f=l.geodeticSurfaceNormal(c,G),u=H(a,e,t,h,M),C=H(r,t,e,f,Z),p=this.startEllipsoidNormals,m=this.endEllipsoidNormals,A=this.startPositionAndHeights,b=this.startFaceNormalAndVertexCornerIds,v=this.endPositionAndHeights,w=this.endFaceNormalAndHalfWidths,g=this.vertexBatchIds,N=this.batchIdOffset,y=this.vec3Offset,k=this.vec4Offset,I=0;I<8;I++)R.Cartesian3.pack(h,p,y),R.Cartesian3.pack(f,m,y),R.Cartesian3.pack(e,A,k),A[k+3]=s,R.Cartesian3.pack(t,v,k),v[k+3]=n,R.Cartesian3.pack(u,b,k),b[k+3]=I,R.Cartesian3.pack(C,w,k),w[k+3]=i,g[N++]=o,y+=3,k+=4;this.batchIdOffset=N,this.vec3Offset=y,this.vec4Offset=k;var x=this.indices,E=this.volumeStartIndex,F=this.indexOffset;for(I=0;I<P;I++)x[F+I]=O[I]+E;this.volumeStartIndex+=8,this.indexOffset+=P};var Y=new R.Rectangle,j=new R.Ellipsoid,J=new R.Cartesian3,K=new R.Cartesian3,Q=new R.Cartesian3,X=new R.Cartesian3,$=new R.Cartesian3;return a(function(a,e){var t=new Uint16Array(a.positions),r=new Uint16Array(a.widths),s=new Uint32Array(a.counts),n=new Uint16Array(a.batchIds),i=Y,o=j,d=J,l=new Float64Array(a.packedBuffer),c=0,h=l[c++],f=l[c++];R.Rectangle.unpack(l,2,i),c+=R.Rectangle.packedLength,R.Ellipsoid.unpack(l,c,o),c+=R.Ellipsoid.packedLength,R.Cartesian3.unpack(l,c,d);var a=t.length/3,l=t.subarray(0,a),c=t.subarray(a,2*a),u=t.subarray(2*a,3*a);B.AttributeCompression.zigZagDeltaDecode(l,c,u),function(a,e,t,r){for(var s=r.length,n=a.length,i=new Uint8Array(n),o=z,d=L,l=0,c=0;c<s;c++){for(var h=r[c],f=h,u=1;u<h;u++){var C=l+u,p=C-1;d.longitude=a[C],d.latitude=e[C],o.longitude=a[p],o.latitude=e[p],R.Cartographic.equals(d,o)&&(f--,i[p]=1)}r[c]=f,l+=h}for(var m=0,A=0;A<n;A++)1!==i[A]&&(a[m]=a[A],e[m]=e[A],t[m]=t[A],m++)}(l,c,u,s);for(var C=s.length,p=0,m=0;m<C;m++)p+=s[m]-1;var A=new _(p),b=function(a,e,t,r,s,n,i,o){for(var d=a.length,l=new Float32Array(3*d),c=0;c<d;++c){var h=a[c],f=e[c],u=t[c],h=T.CesiumMath.lerp(r.west,r.east,h/V),f=T.CesiumMath.lerp(r.south,r.north,f/V),u=T.CesiumMath.lerp(s,n,u/V),u=R.Cartographic.fromRadians(h,f,u,W),u=i.cartographicToCartesian(u,q),u=R.Cartesian3.subtract(u,o,q);R.Cartesian3.pack(u,l,3*c)}return l}(l,c,u,i,h,f,o,d),v=0,w=0;for(m=0;m<C;m++){for(var g=s[m]-1,N=.5*r[m],y=n[m],k=v,I=0;I<g;I++){var x=R.Cartesian3.unpack(b,v,Q),E=R.Cartesian3.unpack(b,v+3,X),F=u[w],H=u[w+1],F=T.CesiumMath.lerp(h,f,F/V),H=T.CesiumMath.lerp(h,f,H/V);w++;var O,P,S,D=K,M=$;0===I?(P=R.Cartesian3.unpack(b,O=k+3*g,K),R.Cartesian3.equals(P,x)?R.Cartesian3.unpack(b,O-3,D):(S=R.Cartesian3.subtract(x,E,K),D=R.Cartesian3.add(S,x,K))):R.Cartesian3.unpack(b,v-3,D),I===g-1?(S=R.Cartesian3.unpack(b,k,$),R.Cartesian3.equals(S,E)?R.Cartesian3.unpack(b,k+3,M):(S=R.Cartesian3.subtract(E,x,$),M=R.Cartesian3.add(S,E,$))):R.Cartesian3.unpack(b,v+6,M),A.addVolume(D,x,E,M,F,H,N,y,d,o),v+=3}v+=3,w++}return i=A.indices,e.push(A.startEllipsoidNormals.buffer),e.push(A.endEllipsoidNormals.buffer),e.push(A.startPositionAndHeights.buffer),e.push(A.startFaceNormalAndVertexCornerIds.buffer),e.push(A.endPositionAndHeights.buffer),e.push(A.endFaceNormalAndHalfWidths.buffer),e.push(A.vertexBatchIds.buffer),e.push(i.buffer),{indexDatatype:2===i.BYTES_PER_ELEMENT?U.IndexDatatype.UNSIGNED_SHORT:U.IndexDatatype.UNSIGNED_INT,startEllipsoidNormals:A.startEllipsoidNormals.buffer,endEllipsoidNormals:A.endEllipsoidNormals.buffer,startPositionAndHeights:A.startPositionAndHeights.buffer,startFaceNormalAndVertexCornerIds:A.startFaceNormalAndVertexCornerIds.buffer,endPositionAndHeights:A.endPositionAndHeights.buffer,endFaceNormalAndHalfWidths:A.endFaceNormalAndHalfWidths.buffer,vertexBatchIds:A.vertexBatchIds.buffer,indices:i.buffer}})});