cesium 图层构建的那些事 (十八)

2022-08-02  本文已影响0人  haibalai

我门封装倾斜摄影图层

首先看定义

export interface PTile3dLayer{

}

export interface PMaxtrix {

position?:{

x:number, //模型中心X轴坐标(经度,单位:十进制度)

y:number, //模型中心Y轴坐标(纬度,单位:十进制度)

z:number//模型中心Z轴坐标(高程,单位:米)

},

rotate?:{

x:number,//X轴(经度)方向旋转角度(单位:度)

y:number,//Y轴(纬度)方向旋转角度(单位:度)

z:number//Z轴(高程)方向旋转角度(单位:度)

},

scale? :{

x:number,//X轴

y:number,//Y轴

z:number//Z轴

}

}

主类

```javascript

import { Layer } from "../Layer";

import { PMaxtrix } from "./PTile3dLayer";

export class Tile3dLayer extends Layer {

private _tileVisibleCallback: any = null;

private _customShader: any = null;

constructor(option: any) {

super(option.name);

new Cesium.Cesium3DTileset(option).readyPromise.then((tileset: any) => {

this.cesiumObj = tileset;

this.callLoadEndCesiumObj();

});

}

protected _addToMap(map: any) {

map.scene.primitives.add(this.cesiumObj);

}

public autoToGround() {

}

protected _removeByMap(destroy: boolean = true) {

if (this.cesiumObj) {

this.map.scene.primitives.remove(this.cesiumObj);

this.cesiumObj = null;

}

}

private _bindVisibleEvent() {

this._tileVisibleCallback && this._tileVisibleCallback()

this._tileVisibleCallback = this.cesiumObj.tileVisible.addEventListener(

this._updateTile,

this

)

}

private _updateTile(tile: any) {

let content = tile.content

for (let i = 0; i < content.featuresLength; i++) {

let feature = content.getFeature(i)

let model = feature.content._model

if (this._customShader && model && model._sourcePrograms && model._rendererResources) {

Object.keys(model._sourcePrograms).forEach(key => {

let program = model._sourcePrograms[key]

model._rendererResources.sourceShaders[program.fragmentShader] = this._customShader

})

model._shouldRegenerateShaders = true

}

}

}

setPosition(x: number, y: number, z: number) {

const position = Cesium.Cartesian3.fromDegrees(x, y, z);

const modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);

this.cesiumObj._root.transform = modelMatrix;

 更多参考 https://xiaozhuanlan.com/topic/8329645170

上一篇下一篇

猜你喜欢

热点阅读