-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdeckglLoader.js
75 lines (71 loc) · 1.93 KB
/
deckglLoader.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/**
* class deck_loader
* 使用Deck.gl加载3dTiles
*/
import { AmbientLight, LightingEffect } from '@deck.gl/core'
import { DeckRenderer } from '@deck.gl/arcgis'
import { Tile3DLayer } from '@deck.gl/geo-layers'
import { Tiles3DLoader } from '@loaders.gl/3d-tiles'
import * as externalRenderers from '@arcgis/core/views/3d/externalRenderers'
export default class DeckLoader {
constructor (sceneView) {
this.view = sceneView// esri map sceneview
this.renderer = new DeckRenderer(sceneView, {}) // Deckgl Renderer
this.renderer.deck.layers = []// 初始化layers
// 渲染到sceneView
externalRenderers.add(this.view, this.renderer)
}
/**
* @description: 加载3dtiles图层
* @param {参数} array layerOptions 图层选项 id:服务id,url:服务地址
*/
add3DtilesLayer (layerOptions) {
const layers = this.renderer.deck.layers
// 新增3dtiles图层到layer
layerOptions.forEach(layerOption => {
layers.push(
new Tile3DLayer({
id: layerOption.id,
data: layerOption.url,
loader: Tiles3DLoader,
loadOptions: {
'3d-tiles': {
isTileset: true
}
}
})
)
})
this.renderer.deck.set({
layers: layers
// pickingRadius: 5
})
}
/**
* @description: 调整场景光照颜色亮度
* @param {参数} Object options {color: [255, 255, 255],intensity: 1}
*/
changeLayerLight (options) {
// 调整图层亮度
const ambientLight = new AmbientLight({
color: options.color,
intensity: options.intensity
})
this.renderer.deck.effects = [new LightingEffect([ambientLight])]
}
/**
* @description: 移除所有图层
*/
removeAll () {
this.renderer.deck.set({
layers: []
})
}
/**
* @description: 销毁释放
*/
destroy(){
externalRenderers.remove(this.view, this.renderer)
this.renderer.dispose();
}
}