【CesiumJS-4】加载其他格式3D模型文件(glb、gltf等)

entities方式引入3D模型

  const entity = viewer.value.entities.add({
    name: "car",
    position: Cesium.Cartesian3.fromDegrees(120.13699186126235, 30.320240186854843, 0),
    orientation: Cesium.Transforms.headingPitchRollQuaternion(
      Cesium.Cartesian3.fromDegrees(120.13699186126235, 30.320240186854843, 0),
      new Cesium.HeadingPitchRoll(
        Cesium.Math.toRadians(90), // 设置这个属性即可(顺时针旋转的角度值)
        Cesium.Math.toRadians(0),
        Cesium.Math.toRadians(0)
      )
    ),
    model: {
      uri: "/model/car.glb", // /model/build.gltf
      scale: 10,
      runAnimations: true, // 是否显示动画
      clampAnimations: true, // 是否保持最后一针的动画
      // roll: 90, // 旋转
      // minimumPixelSize: 128, // 最小的模型像素
      // maximumScale: 20000, // 最大的模型像素
      // color: Cesium.Color.RED, // 模型加颜色
      // show: true,
      // color: this.getColor('Red', 1.0), //> 模型颜色与透明度
      // colorBlendMode: this.getColorBlendMode('Highlight'), //> 模型颜色模式
      // colorBlendAmount: parseFloat(0.5), //> 模型混合度
      // silhouetteColor: this.getColor('Red', 1.0), //> 模型轮廓颜色
      // silhouetteSize: parseFloat(2), //> 模型轮廓大小
    }
  })
  // 让摄像机视口快速定位到模型位置
  viewer.value.trackedEntity = entity;

CZML方式引入3D模型

  const czml = [
    {
      id: "document",
      name: "CZML Model",
      version: "1.0",
    },
    {
      id: "aircraft model",
      name: "Cesium Air",
      position: {
        cartographicDegrees: [120.13699186126235, 30.320240186854843, 10000], // 生成位置
      },
      model: {
        gltf: "/model/build.gltf", // 文件路径
        scale: 2.0,
        minimumPixelSize: 128,
      },
    },
  ];
  const dataSourcePromise = viewer.value.dataSources.add(
    Cesium.CzmlDataSource.load(czml)
  );
  dataSourcePromise
    .then(function (dataSource) {
      viewer.value.trackedEntity = dataSource.entities.getById(
        "aircraft model"
      );
    })
    .catch(function (error) {
      window.alert(error);
    });

完整代码

<template>
  <div id="cesiumContainer"></div>
</template>

<script setup>
import { onMounted, ref } from "vue";
const viewer = ref(null);

const initCesium = async () => {
  // 1.引入token
  Cesium.Ion.defaultAccessToken = "xxxxxxxxxxx";
  // 2.三维地球初始化
  viewer.value = new Cesium.Viewer("cesiumContainer", {
    animation: true, //是否创建动画小器件,左下角仪表
    shouldAnimate: true,
    fullscreenButton: false, //是否显示全屏按钮
    geocoder: false, //是否显示geocoder小器件,右上角查询按钮
    homeButton: false, //是否显示Home按钮
    infoBox: false, //是否显示信息框
    sceneModePicker: false, //是否显示3D/2D选择器
    scene3DOnly: false, //如果设置为true,则所有几何图形以3D模式绘制以节约GPU资源
    selectionIndicator: false, // 是否显示选取指示器组件
    timeline: false, // 是否显示时间轴
    navigationHelpButton: false,// 是否显示右上角的帮助按钮
    baselLayerPicker: false, // 将图层选择的控件关掉,才能添加其他影像数据
    shadows: false, // 是否显示背影
    baseLayerPicker: false, // 是否显示图层选择器
    orderIndependentTranslucency: false, //去掉大气层黑圈
  });

  // 加载3D模型
  // 1.entities方式
  // const entity = viewer.value.entities.add({
  //   name: "car",
  //   position: Cesium.Cartesian3.fromDegrees(120.13699186126235, 30.320240186854843, 0),
  //   orientation: Cesium.Transforms.headingPitchRollQuaternion(
  //     Cesium.Cartesian3.fromDegrees(120.13699186126235, 30.320240186854843, 0),
  //     new Cesium.HeadingPitchRoll(
  //       Cesium.Math.toRadians(90), // 设置这个属性即可(顺时针旋转的角度值)
  //       Cesium.Math.toRadians(0),
  //       Cesium.Math.toRadians(0)
  //     )
  //   ),
  //   model: {
  //     uri: "/model/car.glb",
  //     scale: 10,
  //     runAnimations: true, // 是否显示动画
  //     clampAnimations: true, // 是否保持最后一针的动画
  //     // roll: 90, // 旋转
  //     // minimumPixelSize: 128, // 最小的模型像素
  //     // maximumScale: 20000, // 最大的模型像素
  //     // color: Cesium.Color.RED, // 模型加颜色
  //     // show: true,
  //     // color: this.getColor('Red', 1.0), //> 模型颜色与透明度
  //     // colorBlendMode: this.getColorBlendMode('Highlight'), //> 模型颜色模式
  //     // colorBlendAmount: parseFloat(0.5), //> 模型混合度
  //     // silhouetteColor: this.getColor('Red', 1.0), //> 模型轮廓颜色
  //     // silhouetteSize: parseFloat(2), //> 模型轮廓大小
  //   }
  // })
  // // 让摄像机视口快速定位到模型位置
  // viewer.value.trackedEntity = entity;

  // 2. CZML方式
  const czml = [
    {
      id: "document",
      name: "CZML Model",
      version: "1.0",
    },
    {
      id: "aircraft model",
      name: "Cesium Air",
      position: {
        cartographicDegrees: [120.13699186126235, 30.320240186854843, 0],
      },
      model: {
        gltf: "/model/build.gltf",
        scale: 2.0,
        minimumPixelSize: 128,
      },
    },
  ];
  const dataSourcePromise = viewer.value.dataSources.add(
    Cesium.CzmlDataSource.load(czml)
  );
  dataSourcePromise
    .then(function (dataSource) {
      viewer.value.trackedEntity = dataSource.entities.getById(
        "aircraft model"
      );
    })
    .catch(function (error) {
      window.alert(error);
    });

  //缩放
  viewer.value.scene.screenSpaceCameraController.zoomEventTypes = [
    Cesium.CameraEventType.WHEEL,
    Cesium.CameraEventType.PINCH,
  ];
  //视图视角切换
  viewer.value.scene.screenSpaceCameraController.tiltEventTypes = [
    Cesium.CameraEventType.PINCH,
    Cesium.CameraEventType.RIGHT_DRAG,
  ];

}

onMounted(() => {
  initCesium();
})
</script>

<style scoped>
#cesiumContainer {
  position: relative;
  width: 100vw;
  height: 100vh;
}
</style>

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值