广州哪里有学做网站的,建立网站的,宝应县建设工程信息网,wordpress图片标题愿你出走半生,归来仍是少年#xff01; 在场景中#xff0c;有时候需要对地物#xff08;房屋、楼宇#xff09;进行贴地处理#xff0c;或者说相对地面高度#xff08;井盖、井室#xff09;进行设置。 通过自定义的Terrain切片以及影像瓦片构建的三维场景应该如何获取… 愿你出走半生,归来仍是少年 在场景中有时候需要对地物房屋、楼宇进行贴地处理或者说相对地面高度井盖、井室进行设置。 通过自定义的Terrain切片以及影像瓦片构建的三维场景应该如何获取到指定位置的高程呢 1.通过原始的DEM数据获取 构建Terrain切片时肯定有对应的Dem原始数据可以通过对Dem数据进行直接获取指定位置的高程。然后通过此高程在unity的场景中设置游戏对象的底面高度。具体操作请参考此文章01.Dem数据提取高程_dem数据如何读取高度,c_就是那个帕吉的博客-CSDN博客
2.在Unity中直接获取 通过Cesium 3DTileset组件加载Terrain构建的地形已存在在场景中所以可以通过对它进行高程获取。
2.1.图层 首先需要将地形对象添加到对应的图层中。 增加Terrain图层 将对象添加到图层 2.2.高程获取 通过游戏对象的坐标构建一个从高空往地面的射线通过射线求出与指定图层的交点的世界坐标。 通过CesiumGeoreference将世界坐标转换为球心坐标然后通过CesiumWgs84Ellipsoid将球心坐标转换为经纬度高程就获取到指定位置的场景内的高程了。 Ray ray new Ray(org, to);RaycastHit hit;int layerMask LayerMask.GetMask(ConstVars.Terrain);if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask)){transform.position hit.point;var earth cg.TransformUnityPositionToEarthCenteredEarthFixed(new double3(hit.point.x, hit.point.y, hit.point.z));var wgs84 CesiumWgs84Ellipsoid.EarthCenteredEarthFixedToLongitudeLatitudeHeight(earth);terrainHeight wgs84.z;Debug.Log(terrainHeight);}
3.结论 同理若是想要贴合倾斜等也可以采用此方法进行高程获取。