cesium视椎体的移动旋转

这篇具有很好参考价值的文章主要介绍了cesium视椎体的移动旋转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面我讲过视椎体的创建,今天讲一下椎体的旋转移动了。
首先有个方法就是确定两个点,就比如电灯一样从一点望向另一点,

  let directions = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(secondPos, firstPos, new Cesium.Cartesian3()), new Cesium.Cartesian3());
       spotLightCamera.position = firstPos;//firstPos是相机起点
       spotLightCamera.direction = directions;//direction是相机面向的方向
        spotLightCamera.setView({ // 设置视椎体的俯仰角度
        destination: secondPos,
        orientation: {
          heading: Cesium.Math.toRadians(defaultAngle),
          pitch: Cesium.Math.toRadians(pitch),
          roll: Cesium.Math.toRadians(0.0)
        }
      });
      let scratchRight = new Cesium.Cartesian3();
      let scratchRotation = new Cesium.Matrix3();
      var scratchOrientation = new Cesium.Quaternion();
      // let position = spotLightCamera.positionWC;
      let direction = spotLightCamera.directionWC;
      let up = spotLightCamera.upWC;
      let right = spotLightCamera.rightWC;
      right = Cesium.Cartesian3.negate(right, scratchRight);
      let rotation = scratchRotation;
      Cesium.Matrix3.setColumn(rotation, 0, right, rotation);
      Cesium.Matrix3.setColumn(rotation, 1, up, rotation);
      Cesium.Matrix3.setColumn(rotation, 2, direction, rotation);
      let orientation = Cesium.Quaternion.fromRotationMatrix(rotation, scratchOrientation);
       this.createFrustum = new CreateFrustum({
            viewer,
            Cesium,
            position: secondPos,
            orientation: orientation,
            fov: 20,
            near: 0.01,
            far: 1000,
            aspectRatio: 100 / 100,
          });
       this.createFrustum.update(secondPos, orientation) //更新一下视椎体的状态

第二种方法可以直接通过计算两个点的方向 然后去设置一些自己需要的角度去旋转

  const viewer = window['lineEditMap']
  const Cesium = this.$cesium
  let spotLightCamera = new Cesium.Camera(viewer.scene);
  spotLightCamera.setView({ // 设置视椎体的俯仰角度
        destination: secondPos,
        orientation: {
          heading: Cesium.Math.toRadians(defaultAngle),//这里需要自己去理解对应的一些角度以cesium的三维空间XYZ轴去旋转
          pitch: Cesium.Math.toRadians(pitch),//这里需要自己去理解对应的一些角度以cesium的三维空间XYZ轴去旋转
          roll: Cesium.Math.toRadians(0.0)//这里需要自己去理解对应的一些角度以cesium的三维空间XYZ轴去旋转
        }
      });
      let scratchRight = new Cesium.Cartesian3();
      let scratchRotation = new Cesium.Matrix3();
      var scratchOrientation = new Cesium.Quaternion();
      // let position = spotLightCamera.positionWC;
      let direction = spotLightCamera.directionWC;
      let up = spotLightCamera.upWC;
      let right = spotLightCamera.rightWC;
      right = Cesium.Cartesian3.negate(right, scratchRight);
      let rotation = scratchRotation;
      Cesium.Matrix3.setColumn(rotation, 0, right, rotation);
      Cesium.Matrix3.setColumn(rotation, 1, up, rotation);
      Cesium.Matrix3.setColumn(rotation, 2, direction, rotation);
      let orientation = Cesium.Quaternion.fromRotationMatrix(rotation, scratchOrientation);
      this.createFrustum = new CreateFrustum({
          viewer,
          Cesium,
          position: secondPos,
          orientation: orientation,
          fov: fov,
          near: 0.01,
          far: 1000,
          aspectRatio: 100 / 100,
        })
        this.createFrustum.update(secondPos, orientation)

上面就是可以直接输入一个想要的角度就可以去旋转了,如果要移动的话就需要时实的去更新一下视椎体的经纬度就行了。
如果想要把是视椎体的XYZ三个轴也显示出来那就需要:

 const viewer = window['lineEditMap']
      const Cesium = this.$cesium
      // X轴:红色,Y轴:绿色,Z轴:蓝色
      let modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(p);
      viewer.scene.primitives.add(
        new Cesium.DebugModelMatrixPrimitive({
          modelMatrix: modelMatrix,
          length: 30000.0,
          width: 3.0,
        })
      );

也可以创建视点,当然了这都是看自己需要的:文章来源地址https://www.toymoban.com/news/detail-607469.html

  // 创建坐标系
    createFrame(p) {
      const viewer = window['lineEditMap']
      const Cesium = this.$cesium
      // X轴:红色,Y轴:绿色,Z轴:蓝色
      let modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(p);
      viewer.scene.primitives.add(
        new Cesium.DebugModelMatrixPrimitive({
          modelMatrix: modelMatrix,
          length: 30000.0,
          width: 3.0,
        })
      );
    },

到了这里,关于cesium视椎体的移动旋转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小米12s ultra,索尼xperia1 iv,数码相机 拍照对比

    首先说明所有的测试结果和拍摄数据我放到百度网盘了(地址在结尾) 我一直想知道现在的手机和相机差距有多大,到底差在哪儿? 先说结论: 1.1英寸的手机cmos(2022年) 6年前(2016)的入门款相机(m43画幅) 2.手机 不能换镜头,只能在特定的拍摄距离才能发挥出全部的实力.数码变焦画质损

    2024年02月09日
    浏览(83)
  • 【计算机视觉:算法和应用】第二章:图像形成——2.3数码相机

    2.1几何图元与变换 2.2相机辐射成像        从一个或多个光源开始,在世界中一个或多个表面反射并通过相机镜头后,光最终到达成像传感器。到达传感器的光子是如何转换为我们在数字图像上看到的数字(R,G,B)值的呢?在这一节,我们构建了一个简单的模型来解释大多数

    2024年01月19日
    浏览(63)
  • 【WebGIS实例】(10)Cesium开场效果(场景、相机旋转,自定义图片底图)

    漫游效果视频: 【WebGIS实例】(10)Cesium开场效果(场景、相机 点击鼠标后将停止旋转并正常加载影像底图: 可以直接看代码,注释写得应该比较清楚了: 调用: 刚进入时就是直接加载这种图片作为SingleTileImageryProvider的,因为这样能够很快得加载出完整效果,而且不会像

    2024年02月12日
    浏览(38)
  • vue2 使用 cesium 【第二篇-相机视角移动+添加模型】

    搞了一阵子 cesium,小白入门,这东西很牛逼,但是感觉这东西好费劲啊!网上资料不多,每个人的用法又不一样,操作起来真的是绝绝子。之前写了一篇 vue2 使用 cesium 的博文,没有写完,本来想继续写来着,想了一下还是重新开一篇吧。上一篇说到了事件,今天不想写事件

    2024年02月11日
    浏览(44)
  • Unity控制相机旋转、移动、缩放等功能

    提示: 该脚本允许你以指定的速度和角度围绕模型进行相机旋转,并可以控制相机的移动和缩放 将该脚本添加到一个游戏对象上,并将其作为主摄像机。 1、在Unity编辑器中,你可以在脚本的参数变量部分调整相机的速度、缩放和移动等设置。根据需求,修改各个参数的值。

    2024年02月04日
    浏览(52)
  • 通过旋转机械臂,将机械臂上相机拍摄图像的任意点移动至图像中心的方法

    相机CCD大小固定,即相机成像平面大小固定,相机视场角(FOV)仅由相机焦距F决定; 因此,定焦相机的FOV大小固定,通过上图可以看出相机视场角的计算公式为: FOV = 2*atan(w/2f) 注意,这里w/2f代表的是w/2除以f; 因此,要想获取图像上任意点(x0,x0)到图像中心的旋转角度,只

    2024年01月17日
    浏览(35)
  • VUE使用Three.js实现模型,点击交互,相机旋转视角跟随移动(Threejs中使用Tweenjs,含demo源码)

    目录 一、Three.js是什么? 二、VUE简单使用Three.js步骤 1.npm安装 2.template模板 3.引入库 4.定义全局变量 5.初始化场景 6.初始化相机 7.初始化灯光 8.初始化渲染器 9.创建模型(这里我搭建的模型是一个简单双面货架模型) 10.根据浏览器窗口自适应 11.初始化函数,页面加载完成时调用

    2024年02月03日
    浏览(62)
  • cesium 3DTileset的平移、旋转、缩放

    加载模型 平移和修改高度 方法一:

    2024年02月12日
    浏览(38)
  • 069:cesium围绕一个固定点自动左右旋转

    第069个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置一个固定点为中心点,通过lookAtTransform来固化点,通过监听clock,来设置自动旋转。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 示例效果

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包