Cesium点击实体,修改参数实现实体的平移和旋转

primitives类型的实体(针对3DTileset)

复制代码
//旋转
            let mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(Number(this.form.x)));
            let my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(Number(this.form.y)));
            let mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(Number(this.form.z)));
            let rotationX = Cesium.Matrix4.fromRotationTranslation(mx);
            let rotationY = Cesium.Matrix4.fromRotationTranslation(my);
            let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);
            //平移
            //let position = Cesium.Cartesian3.fromDegrees(Number(this.form.left), Number(this.form.right), Number(this.form.up));
            let cartesian = new Cesium.Cartesian3(this.model.position.x + Number(this.form.left), this.model.position.y + Number(this.form.right), this.model.position.z + Number(this.form.up))
            //let m = Cesium.Transforms.eastNorthUpToFixedFrame(position);
            let m = Cesium.Transforms.eastNorthUpToFixedFrame(cartesian)
            //旋转、平移矩阵相乘
            Cesium.Matrix4.multiply(m, rotationX, m);
            Cesium.Matrix4.multiply(m, rotationY, m);
            Cesium.Matrix4.multiply(m, rotationZ, m);
            console.log(this.model)
            //赋值给tileset
            this.model._root.transform = m;

其中关于平移的部分要注意,如果你输入的是经纬度,直接用注释里面的代码即可,如果你输入的多少米多少米,用我这部分即可。另外再注意一下,你点击获取的实体信息中是不存在这个"position"这个字段的,这个字段是我自己创建实体的时候添加上去的,这个尤其要注意

entity类型的实体(如glb)

复制代码
let position = this.model.position._value
            //旋转
            let heading = Cesium.Math.toRadians(this.form.x)
            let pitch = Cesium.Math.toRadians(this.form.y)
            let roll = Cesium.Math.toRadians(this.form.z)
            let hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll)
            let orientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpr)
            this.model.orientation._value = orientation
            //平移
            let cartesian = new Cesium.Cartesian3(position.x + Number(this.form.left), position.y + Number(this.form.right), position.z + Number(this.form.up))
            this.model.position._value = cartesian
            //缩放
            this.model.model.scale._value = this.form.scale

注意,这时候的model应该是点击地图要素获取的id不是上面那个primitive这两个要区分

相关推荐
hopetomorrow3 分钟前
学习路之PHP --PHP 常用扩展及作用表
开发语言·学习·php
simple-L67 分钟前
Java开发痛点技术文章大纲
java·开发语言
m0_6356474819 分钟前
Qt打包含有第三方库的软件为应用程序——CQtDeployer
开发语言·数据库·qt
ppandss126 分钟前
JavaWeb从0到1-DAY4-AJAX
前端·ajax·okhttp
simple-L626 分钟前
Vue3 前端开发技术文章大纲
开发语言
南宫萧幕27 分钟前
Python与Simulink联合仿真:基于DQN的HEV能量管理策略建模与全链路排雷实战
开发语言·人工智能·python·算法·机器学习·matlab·控制
千寻girling33 分钟前
滑动窗口刷了快一个月(26天)了 , 还没有刷完. | 含(操作系统学什么的Java 后端)
java·开发语言·javascript·c++·人工智能·后端·python
一袋米扛几楼9843 分钟前
【报错问题】彻底解决 TypeScript 报错 TS2769: No overload matches this call (JWT 篇)
linux·javascript·typescript
涵涵(互关)43 分钟前
语法大全-only-writer-two
前端·vue.js·typescript
huangql52044 分钟前
浏览器 Location API、History API、路由记录与支付跳转完全指南
前端