首页 > 其他分享 >Cesium调试技巧

Cesium调试技巧

时间:2022-11-23 16:37:25浏览次数:52  
标签:const 技巧 viewer 默认 Cesium new 绘制 调试

起因

感觉每次想要去debugger的时候都得查文档,感觉很麻烦,干脆归纳一些到目前为止个人使用较多的一些Cesium查错技巧,方便以后回顾

3dTiles

属性查询

针对3dTiles的封装,其实Cesium已经封装得很齐全了,直接调用即可

viewer.extend(Cesium.viewerCesium3DTilesInspectorMixin);

如下图所示
img
右侧则是启用了该扩展后会出现的面板,在该面板上,可以拾取到3dTiles中每一个的tile,只要初始化的时候infoBox为true(默认为true),那么点击的时候也会默认查出该tiles内部中所有的属性,并显示在列表中(在项目中,如果要快速查到3dTiles中的属性,这个方法会很管用也很便捷,省去了创建左键监听,遍历feature中所有属性的这个过程)

const viewer = new Cesium.Viewer("cesiumContainer", {
  infoBox: true,//增加属性弹窗
});

img

查看数据包围体、线框模式等等

查看3dTiles的这些数据也都是直接调用这句代码中的Display

viewer.extend(Cesium.viewerCesium3DTilesInspectorMixin);

img

当然cesium还封装了好多,具体其他的读者可以自行探索,但常用的一般都是那几个

绘制

在项目中一般都需要绘制,但是一般来说都是绘制一整块的,但是其中有时候会需要确认自己的传参有没有问题,例如做点光源、聚光灯的时候,要模拟这个点的位置,确保位置正确,或者说有些BUG需要确认点、线、面的位置,这个时候就需要一个方法来尽快的进行绘制,来查看自己画的对不对。

PS: 这个时候只是为了求快,就别在意性能了,只是为了快速绘制(所以这里都是用Entity绘制,Entity绘制Cesium封装过,所以更快)

绘制点

这里补充一点关于点的高度相对的知识
heightReference默认是为Cesium.HeightReference.NONE,也就是绝对高程。

heightReference为Cesium.HeightReference.CLAMP_TO_GROUND---可使点贴地
Cesium.HeightReference.RELATIVE_TO_GROUND----是设置距离地形的相对高度

初始化三维球时不指定其他地形的话等同于viewer.terrainProvider=new Cesium.EllipsoidTerrainProvider(),该地形构建了球的基本骨架,各处高度全为0。

如果设置了Cesium.HeightReference.NONE,就得留意点的高度了,如果高度低于该位置地形的高度,点将位于地下,这个时候如果没有设置深度检测,即viewer.scene.globe.depthTestAgainstTerrain = true,那么当移动摄像机的时候,点的位置就会发生偏移。

点不像面一样可以真正地贴地,除非设置了绝对高度或者开启深度检测,否侧移动摄像机点是无法固定的。Cesium的地形是异步请求的,因此一般通过鼠标点击地球上的位置获取高层,否则地形可能还没加载完,获取的高程就不准了。

viewer.entities.add({
    name: "点几何对象",
    position: Cesium.Cartesian3.fromDegrees(lat, lon, height),
    point: {
      color: Cesium.Color.SKYBLUE,
      pixelSize: 10,
      outlineColor: Cesium.Color.YELLOW,
      outlineWidth: 3,
      //disableDepthTestDistance: Number.POSITIVE_INFINITY,
      //heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
    },
  });

绘制线

这里需要留意的点是,传给线的点的方法,若一系列的点中存在高程数据,则使用Cesium.Cartesian3.fromDegreesArrayHeights;若一系列点中不存在高程数据则直接使用Cesium.Cartesian3.fromDegreesArray即可。

viewer.entities.add({
        name: "polyline",
        polyline: {
            show: true, //是否显示,默认显示
            positions: Cesium.Cartesian3.fromDegreesArrayHeights([
                70, 40, 600000, 
                75, 30, 400000,
                120, 25, 200000
            ]),
            width: 2, //线的宽度(像素),默认为1
            granularity: Cesium.Math.RADIANS_PER_DEGREE,
            material: Cesium.Color.BLUE, //线的颜色,默认为白色
            // depthFailMaterial: Cesium.Color.RED, //线被遮挡部分的颜色,默认为空(不显示被遮挡的部分),设置后可显示被遮挡的部分
            arcType: Cesium.ArcType.NONE, //线的地理类型,NONE表示纯直线,GEODESIC表示为测地线,RHUMB表示等角航线,默认为测地线
            // arcType: Cesium.ArcType.GEODESIC,
            // arcType: Cesium.ArcType.RHUMB,
            clampToGround: false, //是否贴地,默认为否
            shadows: Cesium.ShadowMode.DISABLED, //是否显示光照阴影,默认为否
            // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(100.0, 2000000.0), //显示的视角距离条件,在该范围内显示,范围不显示,默认为空
            classificationType: Cesium.ClassificationType.BOTH,
            zIndex: 0, //显示深度,越大表示图层在上
        }
    })

绘制面

viewer.entities.add({
        name: "绘制面",
        polygon: {
            show: true,
            hierarchy: Cesium.Cartesian3.fromDegreesArray([
                110.0,
                30.0,
                120.0,
                30.0,
                115.0,
                40.0,
            ]),
            height: 100000,
            material: Cesium.Color.CYAN.withAlpha(0.5),
            outline: true,
            outlineColor: Cesium.Color.BLACK,
        }
    })

绘制矩形

前几天加载WMS到Cesium中的时候,获取的范围一直有问题,只能绘制出来看看实际范围对不对了

viewer.entities.add({
        name: '绘制矩阵',
        rectangle: {
            coordinates: Cesium.Rectangle.fromDegrees(west, south, east, north, result),
            material: Cesium.Color.WHITE.withAlpha(0.5),
        }
    })

相机

这个做离屏渲染的时候,一般还需要多绘制一个相机的,获取这个相机的相应信息,但是你得保证你获取的相机的位置是否正确,这时候就需要把相机的视锥体绘制出来

// 绘制视锥
function updateFrustumOutline(camera) {
  const scratchRight = new Cesium.Cartesian3();
  const scratchRotation = new Cesium.Matrix3();
  const scratchOrientation = new Cesium.Quaternion();
  const position = camera.positionWC;
  const direction = camera.directionWC;
  const up = camera.upWC;
  const left = Cesium.Cartesian3.negate(camera.rightWC, scratchRight);
  Cesium.Matrix3.setColumn(scratchRotation, 0, left, scratchRotation);
  Cesium.Matrix3.setColumn(scratchRotation, 1, up, scratchRotation);
  Cesium.Matrix3.setColumn(
    scratchRotation,
    2,
    direction,
    scratchRotation
  );
  const orientation = Cesium.Quaternion.fromRotationMatrix(
    scratchRotation,
    scratchOrientation
  );

  const instance = new Cesium.GeometryInstance({
    geometry: new Cesium.FrustumOutlineGeometry({
      frustum: camera.frustum,
      origin: position,
      orientation: orientation,
    }),
    attributes: {
      color: Cesium.ColorGeometryInstanceAttribute.fromColor(
        Cesium.Color.WHITE
      ),
    },
  });

  viewer.scene.primitives.add(
    new Cesium.Primitive({
      geometryInstances: instance,
      appearance: new Cesium.PerInstanceColorAppearance({
        flat: true,
        translucent: false,
      }),
      asynchronous: false,
    })
  );
}

标签:const,技巧,viewer,默认,Cesium,new,绘制,调试
From: https://www.cnblogs.com/webglblog/p/16918727.html

相关文章

  • vconsole h5调试工具
    1.效果如图 2. 安装 $npminstallvconsole3.在项目中使用 只需要在你的main.js中写入一段代码  if(process.env.NODE_ENV!=="production"){co......
  • win32开发(调试)
      很多同学都喜欢看代码,但是不喜欢调试代码。其实,在我看来,调试代码本身也是一项重要的能力。一份代码,如果没有经过反复调试和验证,很难说自己是不是理解得够深刻。同样对......
  • 随想录(软件调试)
       对于很多程序员朋友来说,编写代码要比调试代码快乐的多。似乎创造软件比维护软件更能给人带来成就感。然而,在企业里面维护前人留下的代码也是工作中不可缺少的一项内......
  • C语言gdb调试
    文章目录​​一、gdb的安装​​​​二、调试前的准备​​​​三、基本调试命令​​​​四、课后作业​​​​五、获取视频教程​​​​六、版权声明​​程序员写在编写程序......
  • 全志V3S 调试串口更改或关闭
    有时项目外设比较多,很容易造成串口不够用的情况。最近就遇到了,新增加一个GPS模块串口的,串口现在外部只有原来的调试串口可以用,所以尝试将调试口更改为普通串口。经过网......
  • CLion调试经验小记
    Clion的调试是按照开始调试前的行号进行的。这就是说,当你在调试时修改代码时,有可能出现断点对不上、数据与显示的已执行逻辑不一致等问题。这与VS不同,VS要么不支持修改后......
  • 卡常技巧整理
    set/map/pbds::gp_hash_table通常情况下:set<map<gp_hash_table。PNR#4A,就是改用了gp_hash_table才过了。gp_hash_table的使用,见pb_ds库构造函数的时间复杂......
  • 这11个JavaScript小技巧,你在大多数教程中是找不到的!
    英文原文| ​​https://medium.com/@bretcameron/12-javascript-tricks-you-wont-find-in-most-tutorials-a9c9331f169d​​​当我开始学习JavaScript时,我把我在别人的代......
  • Cesium关于3Dtiles的细节分享
    介绍介绍一下Cesium中有关3dTiles的奇淫技巧,存在一些埋坑的地方,以下内容仅为自己摸索的细节和方法,仅供参考,若有更好的办法欢迎讨论通用快速获取feature中包含的属性信息......
  • 10:pycharm的调试模式
    Pycharm开发环境的调试进行调试的核心是设置断点。程序执行到断点时,暂时挂起,停止执行。就像看视频按下停止一样,我们可以详细的观看停止处的每一个细节。断点程序运行到......