美文网首页
cesium使用矩阵实现平移,旋转entity,3dtiles(

cesium使用矩阵实现平移,旋转entity,3dtiles(

作者: panergongzi | 来源:发表于2021-02-21 16:46 被阅读0次

在场景中移动或旋转entity,3dtiles。都可以通过4*4的矩阵来实现。我封装了一个通用的转换位置工具类,可直接用于平移,旋转entity和3dtiles等情况 代码下载

旋转模型 平移模型

一,平移 

1.平移entity,先计算出entity的4*4位置矩阵,然后再乘以平移矩阵,然后更新entity的位置

           let position = object.position.getValue(Cesium.JulianDate.now());//求出当前事件entity的位置

           let transform = Cesium.Transforms.eastNorthUpToFixedFrame(position);//东-北-上参考系构造出4*4的矩阵

           let m=new Cesium.Matrix4();

           Cesium.Matrix4.setTranslation(Cesium.Matrix4.IDENTITY,new Cesium.Cartesian3(10,10,10),m)//构造平移矩阵

            let modelMatrix = Cesium.Matrix4.multiply(transform, m, transform);//将当前位置矩阵乘以平移矩阵得到平移之后的位置矩阵

            Cesium.Matrix4.getTranslation(modelMatrix, position);//从位置矩阵中取出坐标信息

            object.position.setValue(position);//更新enity的位置

2,平移3dtiles,取出3dtiles的位置矩阵,然后再乘以平移矩阵,然后更新3dtiles的位置

           let transform = object._root.transform;//从3dtile得到位置矩阵

           let m=new Cesium.Matrix4();

          Cesium.Matrix4.setTranslation(Cesium.Matrix4.IDENTITY,new Cesium.Cartesian3(10,10,10),m)//构造平移矩阵

           object.root.transform = Cesium.Matrix4.multiply(transform, m, transform);//计算平移之后的位置矩阵,然后更新3dtiles的位置

二,旋转 

1.旋转entity,先计算出entity的4*4位置矩阵,然后再乘以旋转矩阵,然后更新entity的位置

let position = object.position.getValue(Cesium.JulianDate.now());//先得到entity的位置

let orientation = object.orientation.getValue(Cesium.JulianDate.now());//entity的朝向

function rotatingByMatrix4(mat, options) {

let _rotateX = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(options.x));

let _rotateY = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(options.y));

let _rotateZ = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(options.z));

mat = Cesium.Matrix4.multiplyByMatrix3(mat, _rotateX, mat);

mat = Cesium.Matrix4.multiplyByMatrix3(mat, _rotateY, mat);

mat = Cesium.Matrix4.multiplyByMatrix3(mat, _rotateZ, mat);       

 return mat;

}

 let transform = Cesium.Matrix4.fromTranslationQuaternionRotationScale(position, orientation, new Cesium.Cartesian3(1, 1, 1), new Cesium.Matrix4());//得到entity的位置朝向矩阵

 transform = rotatingByMatrix4(transform, options);//根据沿着x,y,z轴旋转之后,得到旋转矩阵

 let orientation = new Cesium.Quaternion();

 let m3 = Cesium.Matrix4.getRotation(transform, new Cesium.Matrix3());//得到3*3的旋转矩阵

 Cesium.Quaternion.fromRotationMatrix(m3, orientation);//将旋转矩阵转换成齐次坐标

  object.orientation.setValue(orientation);//更新entity的朝向

2.旋转3dtiles,先计算出3dtiles的4*4位置矩阵,然后再乘以旋转矩阵,然后更新3dtiles的位置

let transform = object._root.transform;//从3dtile对象得到位置矩阵

function rotatingByMatrix4(mat, options) {

let _rotateX = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(options.x));

let _rotateY = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(options.y));

let _rotateZ = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(options.z));

mat = Cesium.Matrix4.multiplyByMatrix3(mat, _rotateX, mat);

mat = Cesium.Matrix4.multiplyByMatrix3(mat, _rotateY, mat);

mat = Cesium.Matrix4.multiplyByMatrix3(mat, _rotateZ, mat);

 return mat;

}

transform = rotatingByMatrix4(transform, options);//根据沿着x,y,z轴旋转之后,得到旋转矩阵

 object._root.transform = transform;//更新3dtiles的位置矩阵

相关文章

  • cesium使用矩阵实现平移,旋转entity,3dtiles(

    在场景中移动或旋转entity,3dtiles。都可以通过4*4的矩阵来实现。我封装了一个通用的转换位置工具类,可...

  • OpenGL(五)-矩阵变换

    关键函数讲解 平移 旋转 缩放 案例1 : 利用矩阵的平移、旋转、综合变化等, 实现矩阵的移动. 效果图: 注: ...

  • 基本变换矩阵

    1 平移变换 平移矩阵 T 平移后的新点 2 旋转矩阵 旋转矩阵用、、 分别表示 对一个绕任意轴旋转角度的旋转矩阵...

  • 矩阵变换

    摘自:旋转变换(一)旋转矩阵 平移矩阵 tx表示:在x轴方向上平移距离ty表示:在y轴方向上的平移距离 旋转矩阵 ...

  • OpenGL:矩阵的计算(平移,缩放,旋转)

    OpenGL:矩阵的计算(平移,缩放,旋转)

  • 2020-12-04

    osbg倾斜文件转3DTiles文件通过Cesium实现3D地图 流程:安装Node.js,安装Cesium环境,...

  • D3D中视图转换

    用矩阵实现移动摄像机、物体。本次依旧使用之前的DX模板作为初始代码,我们首先要实现的是利用平移矩阵实现平移。 然后...

  • Cesium的tooltip(基于entity)

    tooltip实现方式主要分两种:entity和div。 entity:基于cesium提供的entity接口 优...

  • Cesium的tooltip(基于div)

    tooltip实现方式主要分两种:entity和div。 entity:基于cesium提供的entity接口 优...

  • Cesium gltf模型姿态动态调整

    Cesium 动态调整 gltf模型姿态:包含中心点、平移、旋转、缩放。 效果 代码

网友评论

      本文标题:cesium使用矩阵实现平移,旋转entity,3dtiles(

      本文链接:https://www.haomeiwen.com/subject/uzbxfltx.html