基于cesium 动态墙

<template>
  <div id="app" class="app">
    <div id="cesiumContainer" />
  </div>
</template>
<script>
import dreawprimitiv from "@/assets/DreawPrimitive";
let viewer = null;
export default {
  name: "App",
  components: {},
  data() {
    return {};
  },
  computed: {},
  mounted() {
    Cesium.Ion.defaultAccessToken =
      "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlYTQ2ZjdjNS1jM2E0LTQ1M2EtOWM0My1mODMzNzY3YjYzY2YiLCJpZCI6MjkzMjcsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1OTE5NDIzNjB9.RzKlVTVDTQ9r7cqCo-PDydgUh8Frgw0Erul_BVxiS9c";
    viewer = new Cesium.Viewer("cesiumContainer", {
      baseLayerPicker: false, // 是否显示图层选择控件
      geocoder: false, // 是否显示地名查找控件
      sceneModePicker: false, // 是否显示投影方式控件
      navigationHelpButton: false, // 是否显示帮助信息控件
      shouldAnimate: true,
      selectionIndicator: false,
      homeButton: false,
      timeline: false,
      animation: false,
      fullscreenButton: false,
      showRenderLoopErrors: false,
      scene3DOnly: true, // 如果设置为true,则所有几何图形以3D模式绘制以节约GPU资源
      infoBox: false // 是否显示点击要素之后显示的信息
    });
    this.getprimtive();
  },
  methods: {
    getprimtive() {
      var wallInstance = new Cesium.GeometryInstance({
        geometry: Cesium.WallGeometry.fromConstantHeights({
          positions: Cesium.Cartesian3.fromDegreesArrayHeights([
            -107.0,
            43.0,
            100000.0,
            -97.0,
            43.0,
            100000.0,
            -97.0,
            40.0,
            100000.0,
            -107.0,
            40.0,
            100000.0,
            -107.0,
            43.0,
            100000.0
          ]),
          maximumHeight: 100000.0,
          vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT
        })
      });

      let image =
        "https://img-blog.csdnimg.cn/img_convert/e14ce92acfdbd8fa7deda63e4a780400.png"; //选择自己的动态材质图片
      let color = new Cesium.Color.fromCssColorString("rgba(0, 255, 255, 1)");
      let speed = 1.5;
      //头是内置方法头 默认状况下,材质的默认值会被返回:
      let source = `czm_material czm_getMaterial(czm_materialInput materialInput)\n\
{\n\
   //头是内置方 定义一个mater对象
    czm_material material = czm_getDefaultMaterial(materialInput);\n\
    //二维坐标
    vec2 st = materialInput.st;\n\
    //配置问2D纹理(抽取纹素颜色,纹理单元编号(从纹理坐标获取像素颜色),纹理坐标)
    vec4 colorImage = texture2D(image, vec2(fract((st.t - speed*czm_frameNumber*0.005)), st.t));\n\
    vec4 fragColor;\n\
    fragColor.rgb = color.rgb / 1.0;\n\
    //没有使用别的材质作为输入时,需要自己处理伽马矫正
    fragColor = czm_gammaCorrect(fragColor);\n\
    material.alpha = colorImage.a * color.a;\n\
    material.diffuse = (colorImage.rgb+color.rgb)/2.0;\n\
    material.emission =  fragColor.rgb;\n\
    return material;\n\
}`;
      let material = new Cesium.Material({
        fabric: {
          type: "PolylineOutline",
          uniforms: {
            color: color,
            image: image,
            speed: speed
          },

          source: source
        },
        translucent: function() {
          return true;
        }
      });

      viewer.scene.primitives.add(
        new Cesium.Primitive({
          geometryInstances: [wallInstance],
          appearance: new Cesium.MaterialAppearance({
            material: material
          })
        })
      );
    }
  }
};
</script>

<style>
* {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}

body,
html,
#cesiumContainer {
  width: 100%;
  height: 100%;
  overflow: hidden;
  margin: 0;
  padding: 0;
  position: absolute;
}

.app {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  min-height: 100%;
  height: 100%;
  overflow: hidden;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学过的代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值