赞
踩
3dtile模型的世界坐标要设在模型的中心,这样才能保证cesuim中的旋转矩阵在3Dtile模型中间!!!
3dtile模型的世界坐标要设在模型的中心,这样才能保证cesuim中的旋转矩阵在3Dtile模型中间!!!
3DTIie建模的时候,跟cad一样具有世界坐标,
var palaceTileset = new Cesium.Cesium3DTileset({ url: tilesUri,//tilesUri为3dtile路径 }) palaceTileset.readyPromise.then(function (palaceTileset) { viewer.scene.primitives.add(palaceTileset); let mx = Cesium.Matrix3.fromRotationX( Cesium.Math.toRadians(X)//x轴的旋转 ); let my = Cesium.Matrix3.fromRotationY( Cesium.Math.toRadians(Y)//Y轴的旋转 ); let mz = Cesium.Matrix3.fromRotationZ( Cesium.Math.toRadians(Z)//Z轴的旋转 ); let rotationX = Cesium.Matrix4.fromRotationTranslation(mx); let rotationY = Cesium.Matrix4.fromRotationTranslation(my); let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz); let position = Cesium.Cartesian3.fromDegrees( lng,lat, alt ); //lng,lat, alt对应模型的经纬度坐标和高度 let m = Cesium.Transforms.eastNorthUpToFixedFrame(position); Cesium.Matrix4.multiply(m, rotationX, m); Cesium.Matrix4.multiply(m, rotationY, m); Cesium.Matrix4.multiply(m, rotationZ, m); //赋值给tilesetet palaceTileset._root.transform = m; });
关于3dtile旋转矩阵的选择问题,
选择主要有两种模式:
第一种:
palaceTileset._root.transform (有人说尽量不要动这个旋转矩阵,但是好像不动又不太行)
第二种:
palaceTileset.modelMatrix
第一种:是绕着模型设置的世界坐标位置旋转,然后找了一下加载的3Dtile模型的旋转矩阵,跟’palaceTileset._root.transform是一样的,所以cesuim加载的模型的旋转矩阵就储存在_root.transform里面的,意思是说最初加载模型的位置跟这个有关系,
第二种,我试了一下,直接飘外太空去了,这个应该是旋转中心在地球的中心,所以如果要调想要的位置,就比较麻烦,需要把模型平移在地球的旋转中心,然后调好方向在放回来
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。