cesium-d3kit/examples/libs/Cesium/Workers/createVerticesFromHeightmap.js

2 lines
26 KiB
JavaScript
Raw Normal View History

2021-12-30 16:02:03 +08:00
define(["./when-54c2dc71","./Check-6c0211bc","./Math-fc8cecf5","./Cartesian2-d1adddcb","./Transforms-ea828842","./RuntimeError-2109023a","./WebGLConstants-76bb35d1","./ComponentDatatype-6d99a1ee","./AttributeCompression-4a67d8a6","./IntersectionTests-43aa431f","./Plane-0cab2b36","./WebMercatorProjection-6cf85d4b","./createTaskProcessorWorker","./EllipsoidTangentPlane-6135b6f5","./OrientedBoundingBox-f904645d","./TerrainEncoding-ed56c1d6"],function(Ye,e,We,Xe,Ze,n,t,a,i,r,s,je,l,Ge,qe,Qe){"use strict";var o=Object.freeze({NONE:0,LERC:1}),Je={};Je.DEFAULT_STRUCTURE=Object.freeze({heightScale:1,heightOffset:0,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1});var Ke=new Xe.Cartesian3,$e=new Ze.Matrix4,et=new Xe.Cartesian3,tt=new Xe.Cartesian3;Je.computeVertices=function(e){var t,a,i,r=Math.cos,n=Math.sin,s=Math.sqrt,l=Math.atan,o=Math.exp,f=We.CesiumMath.PI_OVER_TWO,u=We.CesiumMath.toRadians,c=e.heightmap,d=e.width,h=e.height,m=e.skirtHeight,g=Ye.defaultValue(e.isGeographic,!0),p=Ye.defaultValue(e.ellipsoid,Xe.Ellipsoid.WGS84),w=1/p.maximumRadius,x=e.nativeRectangle,k=e.rectangle,y=Ye.defined(k)?(t=k.west,a=k.south,i=k.east,k.north):g?(t=u(x.west),a=u(x.south),i=u(x.east),u(x.north)):(t=x.west*w,a=f-2*l(o(-x.south*w)),i=x.east*w,f-2*l(o(-x.north*w))),I=e.relativeToCenter,b=Ye.defined(I),I=b?I:Xe.Cartesian3.ZERO,U=Ye.defaultValue(e.exaggeration,1),v=Ye.defaultValue(e.includeWebMercatorT,!1),T=Ye.defaultValue(e.structure,Je.DEFAULT_STRUCTURE),M=Ye.defaultValue(T.heightScale,Je.DEFAULT_STRUCTURE.heightScale),V=Ye.defaultValue(T.heightOffset,Je.DEFAULT_STRUCTURE.heightOffset),A=Ye.defaultValue(T.elementsPerHeight,Je.DEFAULT_STRUCTURE.elementsPerHeight),B=Ye.defaultValue(T.stride,Je.DEFAULT_STRUCTURE.stride),D=Ye.defaultValue(T.elementMultiplier,Je.DEFAULT_STRUCTURE.elementMultiplier),S=Ye.defaultValue(T.isBigEndian,Je.DEFAULT_STRUCTURE.isBigEndian),P=Xe.Rectangle.computeWidth(x),E=Xe.Rectangle.computeHeight(x),C=P/(d-1),F=E/(h-1);g||(P*=w,E*=w);var L,O,N=p.radiiSquared,z=N.x,R=N.y,_=N.z,H=65536,Y=-65536,W=Ze.Transforms.eastNorthUpToFixedFrame(I,p),X=Ze.Matrix4.inverseTransformation(W,$e);v&&(L=je.WebMercatorProjection.geodeticLatitudeToMercatorAngle(a),O=1/(je.WebMercatorProjection.geodeticLatitudeToMercatorAngle(y)-L));var Z=et;Z.x=Number.POSITIVE_INFINITY,Z.y=Number.POSITIVE_INFINITY,Z.z=Number.POSITIVE_INFINITY;var j=tt;j.x=Number.NEGATIVE_INFINITY,j.y=Number.NEGATIVE_INFINITY,j.z=Number.NEGATIVE_INFINITY;var G=Number.POSITIVE_INFINITY,q=d*h,Q=q+(0<m?2*d+2*h:0),J=new Array(Q),K=new Array(Q),$=new Array(Q),ee=v?new Array(Q):[],te=0,ae=h,ie=0,re=d;0<m&&(--te,++ae,--ie,++re);for(var ne=te;ne<ae;++ne){var se=ne;se<0&&(se=0),h<=se&&(se=h-1);var le=x.north-F*se,oe=((le=g?u(le):f-2*l(o(-le*w)))-a)/(y-a),oe=We.CesiumMath.clamp(oe,0,1),fe=ne===te,ue=ne===ae-1;0<m&&(fe?le+=1e-5*E:ue&&(le-=1e-5*E));var ce,de=r(le),he=n(le),me=_*he;v&&(ce=(je.WebMercatorProjection.geodeticLatitudeToMercatorAngle(le)-L)*O);for(var ge=ie;ge<re;++ge){var pe=ge;pe<0&&(pe=0),d<=pe&&(pe=d-1);var we=se*(d*B)+pe*B;if(1===A)ke=c[we];else{var xe,ke=0;if(S)for(xe=0;xe<A;++xe)ke=ke*D+c[we+xe];else for(xe=A-1;0<=xe;--xe)ke=ke*D+c[we+xe]}ke=(ke*M+V)*U,Y=Math.max(Y,ke),H=Math.min(H,ke);var ye=x.west+C*pe;g?ye=u(ye):ye*=w;var Ie=(ye-t)/(i-t),Ie=We.CesiumMath.clamp(Ie,0,1),be=se*d+pe;if(0<m){var Ue=ge===ie,ve=ge===re-1,Te=fe||ue||Ue||ve;if((fe||ue)&&(Ue||ve))continue;Te&&(ke-=m,Ue?(be=h-se-1+q,ye-=1e-5*P):ue?be=q+h+(d-pe-1):ve?(be=q+h+d+se,ye+=1e-5*P):fe&&(be=q+h+d+h+pe))}var Me=de*r(ye),Ve=de*n(ye),Ae=z*Me,Be=R*Ve,De=1/s(Ae*Me+Be*Ve+me*he),Se=Ae*De,Pe=Be*De,Ee=me*De,Ce=new Xe.Cartesian3;Ce.x=Se+Me*ke,Ce.y=Pe+Ve*ke,Ce.z=Ee+he*ke,J[be]=Ce,K[be]=ke,$[be]=new Xe.Cartesian2(Ie,oe),v&&(ee[be]=ce),Ze.Matrix4.multiplyByPoint(X,Ce,Ke),Xe.Cartesian3.minimumByComponent(Ke,Z,Z),Xe.Cartesian3.maximumByComponent(Ke,j,j),G=Math.min(G,ke)}}var Fe,Le,Oe=Ze.BoundingSphere.fromPoints(J);Ye.defined(k)&&(Fe=qe.OrientedBoundingBox.fromRectangle(k,H,Y,p)),b&&(Le=new Qe.EllipsoidalOccluder(p).computeHorizonCullingPointPossiblyUnderEllipsoid(I,J,H));for(var Ne=new Ge.AxisAlig