一:3dtiles模型如何实现贴地
let layer = new mars3d.layer.TilesetLayer({
name: '地下管网',
url:'',
clampToGroud: true // true的时候自动进行贴地计算,但是此属性只是适合标准的与地形数据相匹配的模型,并不精确,建议通过模型编辑界面,调试给出具体的高度值
})
ps:在实际的管网运用中,我们更多的是用到的position属性,调整模型高度
let layer = new mars3d.layer.TilesetLayer({
name: '地下管网',
url: '',
position: {
alt: 0 // 根据模型编辑界面,给出合适的值,一般是0,经纬度不要动,纠偏的时候用得到
}
})
二: 3dtiles模型如何实现旋转
let layer = new mars3d.layer.TilesetLayer({
name: '地下管网',
url: '',
rotation: {
x: Number, // x方向 角度值0-360
y: Number, // y方向 角度值0-360
z: Number // z方向 角度值0-360
}
})
三: 模型坐标系纠偏(一般用不到)
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:写在之前的话,实景模型一般要和底图相结合,模型编辑前,尽量匹配好底图