一,ray(射线)的使用
cesium里的射线用得比较广泛,很多拾取功能需要根据射线来进行摄取,像“视线分析”,“通透率”等功能都可以用射线来做。cesium里根据一个原点+方向就可以做一条指向某个方向的射线。
常用的几种射线
1.沿着x轴方向的射线
2.沿着y轴方向是射线
3.垂直射线(沿着z轴方向的射线)
4.相机位置和屏幕坐标的连线做射线
5.相机位置和相机方向做射线
6.任意两个点A和点B,以A做原点做A指向B的射线
代码链接常用的几种射线
二,pick的使用
在Cesium中会看到很多pick,包括Scene,Camera,Glober,Picking里,接下来我们一一介绍
Scene里的pick方法
pick(windowPosition, width, height) 通过屏幕位置拾取,会返回拾取到的第一个“primitive”。width,height分别为拾取矩阵的长宽
drillPick (windowPosition, limit, width, height) 通过鼠标位置批量拾取对象
drillPickFromRay(ray,limit,objectsToExclude,width) 通过射线批量拾取
drillPickFromRayMostDetailed(ray,limit,objectsToExclude,width) 异步通过射线批量拾取
pickPositionWorldCoordinates( windowPosition,result) 通过屏幕位置拾取对应的世界坐标位置
pickPosition( windowPosition,result) 拾取屏幕位置对应的世界坐标位置
pickFromRay(ray, objectsToExclude, width) 通过射线拾取相交的第一个对象,返回对象和相交位置。这个方法只能拾取已经渲染好了的glober tiles和 3d tiles,无论它们可见与否
pickFromRayMostDetailed(ray, objectsToExclude, width) 支持异步拾取,和pickFromRay效果差不多
sampleHeight(position, objectsToExclude, width) 通过给定经纬度坐标返回拾取对象的高度信息,可用于glober,3dtiles等
clampToHeight(cartesian,objectsToExclude,width,result)通过给定的世界坐标返回物体表面的位置
sampleHeightMostDetailed(position, objectsToExclude, width) 异步通过给定经纬度坐标返回拾取对象的高度信息,可用于glober,3dtiles等
clampToHeightMostDetailed(cartesian,objectsToExclude,width,result)异步通过给定的世界坐标返回物体表面的位置
Camera里的pick方法
pickEllipsoid(windowPosition, ellipsoid, result) 根据相机位置和屏幕坐标拾取位于地球上的点
Globe里的pick方法
pickWorldCoordinates(ray,scene,cullBackFaces,result) 通过射线拾取地球上的坐标
pick(ray, scene, result)通过射线拾取地球上的坐标,内部调用了pickWorldCoordinates方法,但在不是3D场景时候做了坐标转换处理
Picking里的pick方法,Picking里的方法一般是集成到Scene,Camera,Glober里面了,Picking相当于基类
pick(scene, windowPosition, width, height) 通过屏幕坐标位置拾,会返回拾取到的第一个“primitive”。width,height分别为拾取矩阵的长宽。Scene里的pick方法正是调用的Picking
里的pick方法
pickPositionWorldCoordinates(scene,windowPosition,result)通过屏幕位置拾取对应的世界坐标位置,在Scene里面也被调用了
pickPosition( scne,windowPosition,result) 拾取屏幕位置对应的世界坐标位置,在Scene里面也被调用了
drillPick(scne,windowPosition, limit, width, height) 通过鼠标位置批量拾取对象,在Scene里面也被调用了
pickFromRay(scne,ray, objectsToExclude, width) 通过射线拾取相交的第一个对象,返回对象和相交位置。这个方法只能拾取已经渲染好了的glober tiles和 3d tiles,无论它们可见与否
drillPickFromRay(scne,ray,limit,objectsToExclude,width) 通过射线批量拾取
pickFromRayMostDetailed(scne,ray, objectsToExclude, width) 支持异步拾取,和pickFromRay效果差不多
drillPickFromRayMostDetailed(scne,ray,limit,objectsToExclude,width) 异步通过射线批量拾取
sampleHeight(scne, position, objectsToExclude, width) 通过给定经纬度坐标返回拾取对象的高度信息,可用于glober,3dtiles等
clampToHeight(scne,cartesian,objectsToExclude,width,result)通过给定的世界坐标返回物体表面的位置
sampleHeightMostDetailed(scne, position, objectsToExclude, width) 异步通过给定经纬度坐标返回拾取对象的高度信息,可用于glober,3dtiles等
clampToHeightMostDetailed(scne,cartesian,objectsToExclude,width,result)异步通过给定的世界坐标返回物体表面的位置
ImageryLayerCollection 里的pick方法
pickImageryLayerFeatures(ray,scene) 通过射线拾取feature
代码链接cesium pick方法汇总