mirror of
https://gitee.com/ice-gl/icegl-three-vue-tres.git
synced 2025-04-05 06:22:43 +08:00
2 lines
2.9 KiB
JavaScript
2 lines
2.9 KiB
JavaScript
import{aJ as _,Y as y,aS as x,a3 as g,o as b,c as w,aE as B,j as C,az as A,Z as d,ae as M,s as S,B as U,a as h,a5 as v,I as f}from"./vendor-76c85ed2.js";import{_ as D,l as L,b as P}from"./pagesShow.vue_vue_type_script_setup_true_lang-35f3b154.js";import{C as T}from"./vanilla-307d3a93.esm-959fd761.js";import{h as X}from"./heatmap-d02141de.js";import"./_commonjsHelpers-725317a4.js";const p=(a,t)=>Math.round((Math.random()*(a-t+1)+t)*10)/10,Y=(a,t)=>{if(!t){let e=0;for(t=[];e<2e3;)t.push({x:p(1,a._config.width),y:p(1,a._config.height),value:p(1,6)}),e++}a.setData({max:12,data:t})},E=(a=250,t=250,o=!0)=>{const e=document.createElement("heatmap-canvas");return e.style.position="absolute",o||(e.style.display="none"),e.style.top="0",e.style.left="0",document.body.appendChild(e),X.create({container:e,width:a,height:t,blur:".8",radius:10})},F=a=>{a.computeBoundingBox();const{max:t,min:o}=a.boundingBox;a.deleteAttribute("uv");const e=t.x-o.x,n=t.y-o.y,i=[];for(let r=0;r<a.attributes.position.count;r++)i.push((a.attributes.position.getX(r)-o.x)/e),i.push((a.attributes.position.getY(r)-o.y)/n);const s=new Float32Array(i);a.setAttribute("uv",new _(s,2))},k=(a,t)=>{t.computeBoundingBox(),t.deleteAttribute("uv"),a.computeBoundingBox();const{max:o,min:e}=a.boundingBox,n=o.x-e.x,i=o.y-e.y,s=[];for(let c=0;c<t.attributes.position.count;c++)s.push((t.attributes.position.getX(c)-e.x)/n),s.push((t.attributes.position.getY(c)-e.y)/i);const r=new Float32Array(s);t.setAttribute("uv",new _(r,2))},N=["object"],O=y({__name:"buildingsHeatmap",props:{model:{},opacity:{default:1}},setup(a){const t=a,o=E();Y(o);const e=new x(o._renderer.canvas);e.needsUpdate=!0;const n=(u,l)=>new T({baseMaterial:u,vertexShader:"\n varying vec2 vUv;\n void main() {\n csm_Position = position * vec3(1.0);\n vUv = uv;\n }\n ",fragmentShader:"\n uniform sampler2D heightMap;\n uniform float uOpacity;\n varying vec2 vUv;\n void main() {\n csm_DiffuseColor = vec4(texture2D(heightMap, vUv.xy).rgb, uOpacity);\n }\n ",silent:!0,uniforms:{uOpacity:{value:t.opacity},heightMap:{type:"t",value:l}},depthWrite:!0,depthTest:!0,transparent:!0,side:B}),i=t.model.city,s=t.model.land,r=()=>{const{geometry:u}=s;F(u);const l=n(s.material,e);s.material.dispose(),s.material=l},c=()=>{const u=s.geometry,{geometry:l}=i;k(u,l);const m=n(i.material,e);i.material.dispose(),i.material=m};return r(),c(),g(()=>{t.opacity&&(s.material.uniforms.uOpacity.value=t.opacity)}),(u,l)=>(b(),w("primitive",{object:t.model.model.clone()},null,8,N))}}),R=y({__name:"heatmap2",async setup(a){let t,o;const e=C(!1),n=([t,o]=A(()=>L()),t=await t,o(),t);e.value=!0;const i=d({width:1,color:"#000",opacity:1,show:!0}),s=d({opacity:.9});return new M({title:"参数",expanded:!0}).addBinding(s,"opacity",{label:"透明度",min:0,max:1,step:.1}),(c,u)=>(b(),S(D,{showBuildings:!1},{ability:U(()=>[h(O,v({model:f(n)},s),null,16,["model"]),h(P,v(i,{builds:f(n).city}),null,16,["builds"])]),_:1}))}});export{R as default};
|