upsampleQuantizedTerrainMesh.js 8.1 KB

1
  1. define(["./AttributeCompression-9711314b","./Transforms-73e77b72","./Cartesian2-b4b7b0b3","./when-208fe5b0","./TerrainEncoding-e1b1da20","./IndexDatatype-3bc916b1","./Check-5e798bbf","./Math-8386669c","./OrientedBoundingBox-2e9d8f93","./createTaskProcessorWorker","./RuntimeError-7f634f5d","./ComponentDatatype-2da3a966","./WebGLConstants-5e2a49ab","./EllipsoidTangentPlane-69cc10ff","./AxisAlignedBoundingBox-122de82b","./IntersectionTests-40db2afa","./Plane-b91bfb59"],function(s,ue,oe,c,ae,pe,e,de,fe,t,i,n,r,h,u,o,a){"use strict";var le={clipTriangleAtAxisAlignedThreshold:function(e,t,i,n,s,r){var h,u;c.defined(r)?r.length=0:r=[];var o,a,p,d,f,l,g=t?(h=i<e,u=n<e,s<e):(h=e<i,u=e<n,e<s),t=h+u+g;return 1===t?h?(o=(e-i)/(n-i),a=(e-i)/(s-i),r.push(1),r.push(2),1!==a&&(r.push(-1),r.push(0),r.push(2),r.push(a)),1!==o&&(r.push(-1),r.push(0),r.push(1),r.push(o))):u?(p=(e-n)/(s-n),d=(e-n)/(i-n),r.push(2),r.push(0),1!==d&&(r.push(-1),r.push(1),r.push(0),r.push(d)),1!==p&&(r.push(-1),r.push(1),r.push(2),r.push(p))):g&&(f=(e-s)/(i-s),l=(e-s)/(n-s),r.push(0),r.push(1),1!==l&&(r.push(-1),r.push(2),r.push(1),r.push(l)),1!==f&&(r.push(-1),r.push(2),r.push(0),r.push(f))):2===t?h||i===e?u||n===e?g||s===e||(a=(e-i)/(s-i),p=(e-n)/(s-n),r.push(2),r.push(-1),r.push(0),r.push(2),r.push(a),r.push(-1),r.push(1),r.push(2),r.push(p)):(l=(e-s)/(n-s),o=(e-i)/(n-i),r.push(1),r.push(-1),r.push(2),r.push(1),r.push(l),r.push(-1),r.push(0),r.push(1),r.push(o)):(d=(e-n)/(i-n),f=(e-s)/(i-s),r.push(0),r.push(-1),r.push(1),r.push(0),r.push(d),r.push(-1),r.push(2),r.push(0),r.push(f)):3!==t&&(r.push(0),r.push(1),r.push(2)),r},computeBarycentricCoordinates:function(e,t,i,n,s,r,h,u,o){var a=i-h,i=h-s,s=r-u,r=n-u,n=1/(s*a+i*r),u=t-u,h=e-h,i=(s*h+i*u)*n,u=(-r*h+a*u)*n,n=1-i-u;return c.defined(o)?(o.x=i,o.y=u,o.z=n,o):new oe.Cartesian3(i,u,n)},computeLineSegmentLineSegmentIntersection:function(e,t,i,n,s,r,h,u,o){var a=(h-s)*(t-r)-(u-r)*(e-s),p=(i-e)*(t-r)-(n-t)*(e-s),s=(u-r)*(i-e)-(h-s)*(n-t);if(0!=s){a=a/s,s=p/s;return 0<=a&&a<=1&&0<=s&&s<=1?((o=!c.defined(o)?new oe.Cartesian2:o).x=e+a*(i-e),o.y=t+a*(n-t),o):void 0}}},ge=32767,ce=16383,me=[],xe=[],we=[],Ce=new oe.Cartographic,ve=new oe.Cartesian3,Be=[],be=[],ye=[],Ie=[],Ae=[],Te=new oe.Cartesian3,ze=new ue.BoundingSphere,Me=new fe.OrientedBoundingBox,Ne=new oe.Cartesian2,Ve=new oe.Cartesian3;function Ee(){this.vertexBuffer=void 0,this.index=void 0,this.first=void 0,this.second=void 0,this.ratio=void 0}Ee.prototype.clone=function(e){return(e=!c.defined(e)?new Ee:e).uBuffer=this.uBuffer,e.vBuffer=this.vBuffer,e.heightBuffer=this.heightBuffer,e.normalBuffer=this.normalBuffer,e.index=this.index,e.first=this.first,e.second=this.second,e.ratio=this.ratio,e},Ee.prototype.initializeIndexed=function(e,t,i,n,s){this.uBuffer=e,this.vBuffer=t,this.heightBuffer=i,this.normalBuffer=n,this.index=s,this.first=void 0,this.second=void 0,this.ratio=void 0},Ee.prototype.initializeFromClipResult=function(e,t,i){var n=t+1;return-1!==e[t]?i[e[t]].clone(this):(this.vertexBuffer=void 0,this.index=void 0,this.first=i[e[n]],this.second=i[e[++n]],this.ratio=e[++n],++n),n},Ee.prototype.getKey=function(){return this.isIndexed()?this.index:JSON.stringify({first:this.first.getKey(),second:this.second.getKey(),ratio:this.ratio})},Ee.prototype.isIndexed=function(){return c.defined(this.index)},Ee.prototype.getH=function(){return c.defined(this.index)?this.heightBuffer[this.index]:de.CesiumMath.lerp(this.first.getH(),this.second.getH(),this.ratio)},Ee.prototype.getU=function(){return c.defined(this.index)?this.uBuffer[this.index]:de.CesiumMath.lerp(this.first.getU(),this.second.getU(),this.ratio)},Ee.prototype.getV=function(){return c.defined(this.index)?this.vBuffer[this.index]:de.CesiumMath.lerp(this.first.getV(),this.second.getV(),this.ratio)};var p=new oe.Cartesian2,d=-1,f=[new oe.Cartesian3,new oe.Cartesian3],l=[new oe.Cartesian3,new oe.Cartesian3];function g(e,t){var i=f[++d],n=l[d],i=s.AttributeCompression.octDecode(e.first.getNormalX(),e.first.getNormalY(),i),n=s.AttributeCompression.octDecode(e.second.getNormalX(),e.second.getNormalY(),n);return ve=oe.Cartesian3.lerp(i,n,e.ratio,ve),oe.Cartesian3.normalize(ve,ve),s.AttributeCompression.octEncode(ve,t),--d,t}Ee.prototype.getNormalX=function(){return c.defined(this.index)?this.normalBuffer[2*this.index]:(p=g(this,p)).x},Ee.prototype.getNormalY=function(){return c.defined(this.index)?this.normalBuffer[2*this.index+1]:(p=g(this,p)).y};var m=[];function Re(e,t,i,n,s,r,h,u,o){if(0!==h.length){for(var a=0,p=0;p<h.length;)p=m[a++].initializeFromClipResult(h,p,u);for(var d=0;d<a;++d){var f,l,g=m[d];g.isIndexed()?(g.newIndex=r[g.index],g.uBuffer=e,g.vBuffer=t,g.heightBuffer=i,o&&(g.normalBuffer=n)):(f=g.getKey(),c.defined(r[f])?g.newIndex=r[f]:(l=e.length,e.push(g.getU()),t.push(g.getV()),i.push(g.getH()),o&&(n.push(g.getNormalX()),n.push(g.getNormalY())),g.newIndex=l,r[f]=l))}3===a?(s.push(m[0].newIndex),s.push(m[1].newIndex),s.push(m[2].newIndex)):4===a&&(s.push(m[0].newIndex),s.push(m[1].newIndex),s.push(m[2].newIndex),s.push(m[0].newIndex),s.push(m[2].newIndex),s.push(m[3].newIndex))}}return m.push(new Ee),m.push(new Ee),m.push(new Ee),m.push(new Ee),t(function(e,t){var i=e.isEastChild,n=e.isNorthChild,s=i?ce:0,r=i?ge:ce,h=n?ce:0,u=n?ge:ce,o=Be,a=be,p=ye,d=Ae;o.length=0,a.length=0,p.length=0,d.length=0;var f=Ie;f.length=0;for(var l={},g=e.vertices,c=(c=e.indices).subarray(0,e.indexCountWithoutSkirts),m=ae.TerrainEncoding.clone(e.encoding),x=m.hasVertexNormals,w=0,C=e.vertexCountWithoutSkirts,v=e.minimumHeight,B=e.maximumHeight,b=new Array(C),y=new Array(C),I=new Array(C),A=x?new Array(2*C):void 0,T=0,z=0;T<C;++T,z+=2){var M=m.decodeTextureCoordinates(g,T,Ne),N=m.decodeHeight(g,T),V=de.CesiumMath.clamp(M.x*ge|0,0,ge),E=de.CesiumMath.clamp(M.y*ge|0,0,ge);I[T]=de.CesiumMath.clamp((N-v)/(B-v)*ge|0,0,ge),ge-(V=V<20?0:V)<20&&(V=ge),ge-(E=E<20?0:E)<20&&(E=ge),b[T]=V,y[T]=E,x&&(M=m.getOctEncodedNormal(g,T,Ve),A[z]=M.x,A[z+1]=M.y),(i&&ce<=V||!i&&V<=ce)&&(n&&ce<=E||!n&&E<=ce)&&(l[T]=w,o.push(V),a.push(E),p.push(I[T]),x&&(d.push(A[z]),d.push(A[z+1])),++w)}var R=[];R.push(new Ee),R.push(new Ee),R.push(new Ee);var H=[];for(H.push(new Ee),H.push(new Ee),H.push(new Ee),T=0;T<c.length;T+=3){var O=c[T],S=c[T+1],U=c[T+2],F=b[O],P=b[S],k=b[U];R[0].initializeIndexed(b,y,I,A,O),R[1].initializeIndexed(b,y,I,A,S),R[2].initializeIndexed(b,y,I,A,U);P=le.clipTriangleAtAxisAlignedThreshold(ce,i,F,P,k,me);P.length<=0||(k=H[0].initializeFromClipResult(P,0,R))>=P.length||(k=H[1].initializeFromClipResult(P,k,R))>=P.length||(k=H[2].initializeFromClipResult(P,k,R),Re(o,a,p,d,f,l,le.clipTriangleAtAxisAlignedThreshold(ce,n,H[0].getV(),H[1].getV(),H[2].getV(),xe),H,x),k<P.length&&(H[2].clone(H[1]),H[2].initializeFromClipResult(P,k,R),Re(o,a,p,d,f,l,le.clipTriangleAtAxisAlignedThreshold(ce,n,H[0].getV(),H[1].getV(),H[2].getV(),xe),H,x)))}var D=i?-ge:0,W=n?-ge:0,X=[],K=[],L=[],Y=[],_=Number.MAX_VALUE,G=-_,J=we;J.length=0;var Z=oe.Ellipsoid.clone(e.ellipsoid),j=(he=oe.Rectangle.clone(e.childRectangle)).north,q=he.south,Q=he.east,$=he.west;for(Q<$&&(Q+=de.CesiumMath.TWO_PI),T=0;T<o.length;++T)V=(V=Math.round(o[T]))<=s?(X.push(T),0):r<=V?(L.push(T),ge):2*V+D,o[T]=V,E=(E=Math.round(a[T]))<=h?(K.push(T),0):u<=E?(Y.push(T),ge):2*E+W,a[T]=E,(N=de.CesiumMath.lerp(v,B,p[T]/ge))<_&&(_=N),G<N&&(G=N),p[T]=N,Ce.longitude=de.CesiumMath.lerp($,Q,V/ge),Ce.latitude=de.CesiumMath.lerp(q,j,E/ge),Ce.height=N,Z.cartographicToCartesian(Ce,ve),J.push(ve.x),J.push(ve.y),J.push(ve.z);var ee=ue.BoundingSphere.fromVertices(J,oe.Cartesian3.ZERO,3,ze),te=fe.OrientedBoundingBox.fromRectangle(he,_,G,Z,Me),e=new ae.EllipsoidalOccluder(Z).computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid(ee.center,J,3,ee.center,_,Te),ie=G-_,ne=new Uint16Array(o.length+a.length+p.length);for(T=0;T<o.length;++T)ne[T]=o[T];var se=o.length;for(T=0;T<a.length;++T)ne[se+T]=a[T];for(se+=a.length,T=0;T<p.length;++T)ne[se+T]=ge*(p[T]-_)/ie;var re,he=pe.IndexDatatype.createTypedArray(o.length,f);return x?(re=new Uint8Array(d),t.push(ne.buffer,he.buffer,re.buffer),re=re.buffer):t.push(ne.buffer,he.buffer),{vertices:ne.buffer,encodedNormals:re,indices:he.buffer,minimumHeight:_,maximumHeight:G,westIndices:X,southIndices:K,eastIndices:L,northIndices:Y,boundingSphere:ee,orientedBoundingBox:te,horizonOcclusionPoint:e}})});