Cessium调整模型的位置、高度、旋转
@param {Object} [params.rx] X轴(纬度)方向旋转角度(单位:度)* @param {Object} [params.ry] Y轴(纬度)方向旋转角度(单位:度)* @param {Object} [params.rz] Z轴(高程)方向旋转角度(单位:度)* @param {Object} [params.rx] X轴(纬度)方向旋转角度(单位:度)* @param {
第一种
/**
* 平移、贴地、旋转模型,白膜有效,倾斜摄影无效(目前只验证过cesiumlab处理的3dtiles数据,其他工具处理的数据有待验证。)
* @param {*} tileset
* @param {Object} [params] 对象有如下属性:
* @param {Object} [params.tx] 模型中心X轴坐标(经度,单位:十进制度)
* @param {Object} [params.ty] 模型中心Y轴坐标(纬度,单位:十进制度)
* @param {Object} [params.tz] 模型中心Z轴坐标(高程,单位:米)
* @param {Object} [params.rx] X轴(纬度)方向旋转角度(单位:度)
* @param {Object} [params.ry] Y轴(纬度)方向旋转角度(单位:度)
* @param {Object} [params.rz] Z轴(高程)方向旋转角度(单位:度)
*/
export function update3dtilesMaxtrix(tileset, params) {
//旋转
let mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(params.rx));
let my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(params.ry));
let mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(params.rz));
let rotationX = Cesium.Matrix4.fromRotationTranslation(mx);
let rotationY = Cesium.Matrix4.fromRotationTranslation(my);
let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);
//平移
let position = Cesium.Cartesian3.fromDegrees(params.tx, params.ty, params.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);
//赋值给tileset
tileset._root.transform = m;
}
第二种
/**
* 平移、贴地、旋转模型,白膜有效,倾斜摄影无效(目前只验证过cesiumlab处理的3dtiles数据,其他工具处理的数据有待验证。)
* @param {*} tileset
* @param {Object} [params] 对象有如下属性:
* @param {Object} [params.tx] 模型中心X轴坐标(经度,单位:十进制度)
* @param {Object} [params.ty] 模型中心Y轴坐标(纬度,单位:十进制度)
* @param {Object} [params.tz] 模型中心Z轴坐标(高程,单位:米)
* @param {Object} [params.rx] X轴(纬度)方向旋转角度(单位:度)
* @param {Object} [params.ry] Y轴(纬度)方向旋转角度(单位:度)
* @param {Object} [params.rz] Z轴(高程)方向旋转角度(单位:度)
*/
export function update3dtilesMaxtrix(tileset, params) {
//旋转
let mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(params.rx));
let my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(params.ry));
let mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(params.rz));
let rotationX = Cesium.Matrix4.fromRotationTranslation(mx);
let rotationY = Cesium.Matrix4.fromRotationTranslation(my);
let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);
//平移
let position = Cesium.Cartesian3.fromDegrees(params.tx, params.ty, params.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);
//赋值给tileset
tileset._root.transform = m;
}
// 缩放
var scale = Cesium.Matrix4.fromUniformScale(0.6)
Cesium.Matrix4.multiply(m, scale, m)
//https://hqcode.gitee.io/cesium-test/lesson03/
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Use correct character set. -->
<meta charset="utf-8">
<!-- Tell IE to use the latest, best version. -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- Make the application on mobile take up the full browser screen and disable user scaling. -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<title>Hello World!</title>
<script src="../Build/Cesium/Cesium.js"></script>
<style>
@import url(../Build/CesiumUnminified/Widgets/widgets.css);
html,
body,
#cesiumContainer {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
.canvas {
position: absolute;
left: 10px;
top: 10px;
display:none;
}
#canvas-a {
top: 10px;
}
#canvas-b {
top: 120px;
}
</style>
</head>
<body>
<button onClick ="rotatex()">rotatex</button>
<button onClick ="rotatey()">rotatey</button>
<button onClick ="rotatez()">rotatez</button>
<div id="cesiumContainer" class="fullSize">
<div id="cesiumxin" style="position:fixed;left:0;z-index:99"></div>
</div>
<div id="loadingOverlay"><h1>Loading...</h1></div>
<div id="toolbar"></div>
<script>
var viewer = new Cesium.Viewer('cesiumContainer',
{
imageryProvider: new Cesium.SingleTileImageryProvider({
url: '../img/worldimage.jpg'
}),
homeButton: false,
//sceneModePicker: false,
baseLayerPicker: false,
navigationHelpButton: false,
animation: false,
timeline: false,
vrButton: false,
fullscreenButton: false,
});
var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
url : 'Tileset/tileset.json',
modelMatrix:Cesium.Matrix4.IDENTITY
}));
tileset.readyPromise.then(function() {
var boundingSphere = tileset.boundingSphere;
viewer.camera.viewBoundingSphere(boundingSphere, new Cesium.HeadingPitchRange(0.0, -0.5, boundingSphere.radius * 2));
viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
}).otherwise(function(error) {
throw(error);
});
var m = tileset.modelMatrix;
var anglex = 1;
function rotatex(){
anglex += 1;
let m1 = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(anglex));
tileset.modelMatrix = Cesium.Matrix4.multiplyByMatrix3(m,m1,new Cesium.Matrix4());
}
var angley = 1;
function rotatey(){
angley += 1;
let m1 = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(angley));
tileset.modelMatrix = Cesium.Matrix4.multiplyByMatrix3(m,m1,new Cesium.Matrix4());
}
var anglez = 1;
function rotatez(){
anglez += 1;
let m1 = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(anglez));
tileset.modelMatrix = Cesium.Matrix4.multiplyByMatrix3(m,m1,new Cesium.Matrix4());
}
</script>
</body>
</html>
更多推荐
所有评论(0)