三维模型高度调整
export const osgbData = async (viewer: Cesium.Viewer) => {
let tileSet = viewer.scene.primitives.add(
await Cesium.Cesium3DTileset.fromUrl(
"../../../src/assets/data/osgb/tileset.json",
{}
)
);
heightChange(tileSet, -45);
viewer.flyTo(tileSet);
};
export const heightChange = (
tileset: Cesium.Cesium3DTileset,
height: number
) => {
const cartographic = Cesium.Cartographic.fromCartesian(
tileset.boundingSphere.center
);
const surface = Cesium.Cartesian3.fromRadians(
cartographic.longitude,
cartographic.latitude
);
const offset = Cesium.Cartesian3.fromRadians(
cartographic.longitude,
cartographic.latitude,
height
);
const translation = Cesium.Cartesian3.subtract(
offset,
surface,
new Cesium.Cartesian3()
);
console.log("tileset", tileset, surface, offset, "translation", translation);
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
};
三维模型平移与旋转
export const osgbData = async (viewer: Cesium.Viewer) => {
let tileSet: any;
try {
tileSet = viewer.scene.primitives.add(
await Cesium.Cesium3DTileset.fromUrl(
"../../../src/assets/data/osgb/tileset.json",
{}
)
);
} finally {
let params;
let cartographic = Cesium.Cartographic.fromCartesian(
tileSet.boundingSphere.center
);
params = {
tx: Cesium.Math.toDegrees(cartographic.longitude),
ty: Cesium.Math.toDegrees(cartographic.latitude),
tz: cartographic.height,
rx: 0,
ry: 0,
rz: 60,
};
tileSet._root.transform = update3dtilesMaxtrix(params!);
viewer.flyTo(tileSet);
}
};
interface translateRotateType {
tx: number;
ty: number;
tz: number;
rx: number;
ry: number;
rz: number;
}
export function update3dtilesMaxtrix(
translateRotate: translateRotateType
) {
let mx = Cesium.Matrix3.fromRotationX(
Cesium.Math.toRadians(translateRotate.rx)
);
let my = Cesium.Matrix3.fromRotationY(
Cesium.Math.toRadians(translateRotate.ry)
);
let mz = Cesium.Matrix3.fromRotationZ(
Cesium.Math.toRadians(translateRotate.rz)
);
let rotationX = Cesium.Matrix4.fromRotationTranslation(mx);
let rotationY = Cesium.Matrix4.fromRotationTranslation(my);
let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);
let position = Cesium.Cartesian3.fromDegrees(
translateRotate.tx,
translateRotate.ty,
translateRotate.tz
);
let m = Cesium.Transforms.eastNorthUpToFixedFrame(position);
Cesium.Matrix4.multiply(m, rotationX, m);
Cesium.Matrix4.multiply(m, rotationY, m);
Cesium.Matrix4.multiply(m, rotationZ, m);
return m;
}
三维模型缩放
export const osgbData = async (viewer: Cesium.Viewer) => {
let tileSet;
tileSet = viewer.scene.primitives.add(
await Cesium.Cesium3DTileset.fromUrl(
"../../../src/assets/data/osgb/tileset.json",
{}
)
);
let m;
let mStar;
let scale = 0.6;
let cartographic = Cesium.Cartographic.fromCartesian(
tileSet.boundingSphere.center
);
let surface = Cesium.Cartesian3.fromRadians(
cartographic.longitude,
cartographic.latitude,
cartographic.height
);
m = Cesium.Transforms.eastNorthUpToFixedFrame(surface);
mStar = tileSet._root.transform;
const _scale = Cesium.Matrix4.fromUniformScale(scale);
Cesium.Matrix4.multiply(mStar, _scale, m);
tileSet._root.transform = m;
viewer.flyTo(tileSet);
};