zoukankan      html  css  js  c++  java
  • Cesium 拾取 API 完全总结

    先讲怎么用,再讲大致原理。

    1 拾取坐标

    > 仅拾取椭球体表面坐标

    使用 Camera.prototype.pickEllipsoid 方法,接受一个必选的屏幕坐标,返回一个三维世界坐标 Cartesian3

    > 拾取带地形高度的地表坐标

    使用 Globe.prototype.pick 方法。需要事先使用 Camera.prototype.getPickRay 创建射线。
    接受一个必选的射线对象,一个必选的 Scene 对象,返回一个三维世界坐标 Cartesian3

    > 拾取三维物体的坐标

    使用 Scene.prototype.pickPosition 方法。

    拓展阅读
    Scene.prototype.pickPositionSupported,只读字段,表示当前 Scene 是否支持拾取坐标
    Scene.prototype.pickTranslucentDepth,Boolean 类型字段,使用它的前提是设置 Scene.prototype.useDepthPicking 为 true,这个 会增加性能消耗,来判断透明物体的深度

    2 拾取三维物体

    > 拾取 Entity 和 Primitive(包括 3D-Tiles)

    使用 Scene.prototype.pick 方法,返回一个对象:

    {
      primitive: Primitive | GroundPrimitive | Cesium3DTileContent | ...
      id?: Entity
    }
    

    若拾取到的是 Entity,那么返回的对象的 id 字段将为此 Entity,否则为 undefined.

    还有一个 Scene.prototype.drillPick,穿透拾取的意思,与 pick 的区别就是能拾取多个点击点的三维物体。

    > 拾取 DataSource 加载的数据

    一样通过 Scene.prototype.pick 和 drillPick 方法拾取,接受二维屏幕坐标 Cartesian2

    *拾取图层

    这个功能正在推进,届时可能在 1.84 版本的 Cesium 会加入拾取图层的功能。

    原理

    在 Cesium 的场景组织中,有那么几个容器构成了三维世界:

    Scene:包括了 Globe,除了 Globe 的元素外,还加上了 Primitive、Entity、DataSource 等三维物件
    Globe:包括了 Ellipsoid,还包括了所有的影像图层、地形瓦片,可以算是椭球体上面的皮肤
    Ellipsoid:一个数学公式所定义的旋转椭球体,代表一个纯粹的地球椭球形状

    所以,针对不同的容器,就有不同的拾取。

    拾取不准确的问题:开启深度检测

    Scene.prototype.pickPositionScene.prototype.pick 和 Globe.prototype.pickRay 的准确性受深度缓存影响,所以,在深度检测不开启时,拾取的坐标会不准确。

    建议开启。

    viewer.scene.globe.depthTestAgainstTerrain = true
  • 相关阅读:
    海思HI3516A开发板顺利上线
    android WIFI信息获取
    五------Jsp九大内置对象。
    在Windows下搭建Apacheserver
    基于ContentObserver来动态取消或加入屏幕超时任务
    使用Intent的Flag设置启动參数
    IntelliJ IDEA像Eclipse一样打开多个项目
    怎样让IE支持自己定义协议
    《TCP/IP具体解释卷2:实现》笔记--协议控制块
    POJ2029:Get Many Persimmon Trees(二维树状数组)
  • 原文地址:https://www.cnblogs.com/lihaijia/p/14959829.html
Copyright © 2011-2022 走看看