一:3dtiles模型如何实现贴地

  1. let layer = new mars3d.layer.TilesetLayer({
  2. name: '地下管网',
  3. url:'',
  4. clampToGroud: true // true的时候自动进行贴地计算,但是此属性只是适合标准的与地形数据相匹配的模型,并不精确,建议通过模型编辑界面,调试给出具体的高度值
  5. })

ps:在实际的管网运用中,我们更多的是用到的position属性,调整模型高度

  1. let layer = new mars3d.layer.TilesetLayer({
  2. name: '地下管网',
  3. url: '',
  4. position: {
  5. alt: 0 // 根据模型编辑界面,给出合适的值,一般是0,经纬度不要动,纠偏的时候用得到
  6. }
  7. })

二: 3dtiles模型如何实现旋转

  1. let layer = new mars3d.layer.TilesetLayer({
  2. name: '地下管网',
  3. url: '',
  4. rotation: {
  5. x: Number, // x方向 角度值0-360
  6. y: Number, // y方向 角度值0-360
  7. z: Number // z方向 角度值0-360
  8. }
  9. })

三: 模型坐标系纠偏(一般用不到)

let layer = new mars3d.layer.TilesetLayer({
  name: '地下管网',
  url: '',
  modelMatrix: Cesium.Matrix4, // 模型的矩阵位置,内部无坐标位置的模型使用,此时position和rotation等参数均无效
  updateMatrix: function, // 外部自定义修复模型矩阵位置
  chinaCRS: ChinaCRS // 标识模型的国内坐标系(用于自动纠偏或加偏)
})

四: 模型贴材质

以建筑物为例子,实现材质贴合

// 自定义特效Shader
 var fragmentShader = `
          // 注意shader中写浮点数是,一定要带小数点,否则会报错,比如0需要写成0.0,1要写成1.0
          float _baseHeight = 0.0; // 物体的基础高度,需要修改成一个合适的建筑基础高度
          float _heightRange = 80.0; // 高亮的范围(_baseHeight ~ _baseHeight + _heightRange)
          float _glowRange = 100.0; // 光环的移动范围(高度)

          // 建筑基础色
          float mars_height = marsJzwHeight - _baseHeight;
          float mars_a11 = fract(czm_frameNumber / 120.0) * 3.14159265 * 2.0;
          float mars_a12 = mars_height / _heightRange + sin(mars_a11) * 0.1;
          gl_FragColor *= vec4(vec3(mars_a12), 1.0);// 渐变

          // 动态光环
          float time = fract(czm_frameNumber / 360.0);
          time = abs(time - 0.5) * 2.0;
          float mars_h = clamp(mars_height / _glowRange, 0.0, 1.0);
          float mars_diff = step(0.005, abs(mars_h - time));
          gl_FragColor.rgb += gl_FragColor.rgb * (1.0 - mars_diff);
       `;

let tiles3dLayer = new mars3d.layer.TilesetLayer({
    type: '3dtiles',
  name: '合肥市建筑物',
     url: "//data.mars3d.cn/3dtiles/jzw-hefei/tileset.json",
  maximumScreenSpaceError: 1,
  maximumMemoryUsage: 1024,
  marsJzwStyle: fragmentShader
})
map.addLayer(tiles3dLayer)

五:拖拽修改模型原点

ps:写在之前的话,实景模型一般要和底图相结合,模型编辑前,尽量匹配好底图

第一步:打开模型编辑界面点我,点我

image.png

第二步:填写模型URL,加载模型

image.png

第三步:选中鼠标拖拽编辑

image.png

第四步:保存参数

image.png