unity 加载倾斜摄影-C#解析osgb

(unity 加载倾斜摄影-C#解析osgb 已经更新)

先上连接:最初的C#解析osgb
更新后:C#解析osgb的unity工程1.0(下边有优化后的)
更新unity 加载倾斜摄影-C#解析osgb(一)
osgb倾斜摄影数据标准协议(终) pdf
osgb内部格式参考txt

使用:

如果版本没问题还是加载不出来
osg_Geometry.cs里面的bool fastPathHint = reader.ReadBoolean();注释掉试试

unity 加载倾斜摄影-C#解析osgb_第1张图片

新增:

  1. 鼠标操作换了个舒服点的 (多余的就不说了) Cameramove_new
  2. 获取倾斜摄影位置 读取xml文件 、相机定位
    unity 加载倾斜摄影-C#解析osgb_第2张图片
    unity 加载倾斜摄影-C#解析osgb_第3张图片

首先是坐标问题 避免不了 读取到倾斜摄影坐标超过十几万 unity里坐标因为flot有限制所以只能是将所有读取到的坐标缩小100倍
所以问题来了 有些情况下倾斜摄影不是单独一个
unity 加载倾斜摄影-C#解析osgb_第4张图片
这种情况时就需要通过里面xml获取到坐标 才不使所有倾斜摄影叠到一块 (当然如果所有的xml里的坐标一致 自然不用担心这个问题)
于是我想的如果将加载后的模型也同时缩小到原来的100倍 结果-------
unity 加载倾斜摄影-C#解析osgb_第5张图片
如果加载多个倾斜摄影且xml坐标不一致时打开:
插入:新的版本已经上传 问题有了粗略的解决办法
unity 加载倾斜摄影-C#解析osgb_第6张图片
去掉注释 每个瓦片从osgb中获取到的中心点缩小一百倍
unity 加载倾斜摄影-C#解析osgb_第7张图片
去掉注释 vertices[i] = new Vector3(newv3.x/100, newv3.z/100, newv3.y/ 100);
从osgb获取到网格位置点进行缩小一百倍

当然还是有问题地!!! 由于将网格数据缩小一百倍后 精确模型的点就会变得不准确 比如 (1,0.123,0.12345678) --》 (0.01,0.00123,0.0012345678)= (0.01,0.00123,0.001234568)
有办法解决吗 当然还是有的 比如;(尽量生成的倾斜摄影坐标保持一致 就用不上了 哈哈)当然既然网格坐标会发生变化所以最好还是不要动的好 网格保持正常 在生成模型后再将模型缩小100倍 这就需要解决另一个问题 原状态下的每个瓦片中心坐标在模型缩小一百倍后的位置 (我暂时没用上 思路就是这么个思路)

相机定位 通过Position_pAnds 获取到生成的倾斜摄影的网格中心 赋给相机
unity 加载倾斜摄影-C#解析osgb_第8张图片
3.资源加载 卸载的速度太快
每个瓦片挂载PagedData 通过返回瓦片与相机的距离进行判断是否此时在相机视角内 如果是则判断是否加载新的一层 如果不是则判断此时的加载的瓦片数 是否超过4000以上 如果是则先删除距离最远的精细模型 (比较简单)
unity 加载倾斜摄影-C#解析osgb_第9张图片

问题总结:

1.版本不兼容 现在只支持91 其他版本基本都有问题 !!!
if (_version==80)
{
Debug.Log(“80版本略过”);
return null;
}
unity 加载倾斜摄影-C#解析osgb_第10张图片
无法解压缩
if (compressor != “0”)//压缩问题1--------------------------------------------------
{
Debug.LogWarning(“Decompressor " + compressor + " not implemented”);
return null;
}

2 镜像的问题就解决了 也就不说了

基本除了版本问题没有解决(版本问题也不好解决 生成倾斜摄影时用91 版本 就不影响) 其他基本都解决了 也是个不错的开源 可扩展性的小deom 有需要再更新

分割线----------------------------------------------------------------------------------------------------------------------
优化后:C#解析osgb的unity工程2.0

注意:
ReaderOSGB.CS
1.控制远近系数
public float distanceFactor=1;//如果发现离的很近依旧没有加载处最底层 这个值增加
2.是否保持视野内的瓦片
// if (data.isThisPosition()) return; // 取消注释的话 视野内的不随远近而卸载 保持最新加载
3.材质
_template = new Material(Shader.Find(“Standard”));//如果使用 URP 或 HDRP时记得改 不然会变成紫色

版本还是91 没动(主要是麻烦)

更新后的与之前的流程不同
通过加载与卸载两条队列(协程)同时运行
性能的话是之前的1/2 最起码不会卡死

功能的话可以延伸出很多 有时间的话会补上
1.是否加载网格 (在项目全局搜MeshCollider 你就可以找到)
2.只显示精细瓦片 只保留最精细瓦片做优化
3.部分瓦片精细化 其他瓦片LOD加载
4.保留近距离的瓦片(延迟销毁) PagedData.Cs 74行

另外可以与ArcGISMapsSDK For Unity3D 插件搭配 unity版的cesium
会有两个问题 :
1 将倾斜摄影放在数字地球上 倾斜摄影的坐标问题 这个好解决 坐标的转换问题
2 ArcGISMapsSDK For Unity3D的相机操作属实改不了 很别扭但要求不高的话 凑合凑合

WebGL的osgb加载
https://blog.csdn.net/qq_26318597/article/details/119633468#comments_20277895


取消卸载 改为显隐 速度又快了不少
主要改了ReaderOSGB.cs 与PagedData。cs
链接:https://pan.baidu.com/s/1N6-K-UbHPxygORYhHpOYiQ
提取码:e5lk

unity 加载倾斜摄影-C#解析osgb_第11张图片

你可能感兴趣的:(unity加载osgb,unity3d)