下载 https://download.csdn.net/download/WantFK/87009338
https://download.csdn.net/download/WantFK/87009338
1.提取osgb的图片信息\mesh顶点 \UV\ 三角序列\下一级name\bounds\视距 和保存 (提取
目的 解析osgb的流程过于麻烦 真正用地到的就这几个数据
2.unity 制作初始瓦片预制件 整理为空间四叉树 优化索引 (预制件
目的 相机看向的部分总是只有一部分而看不到的地方为了减少GPU压力需要进行隐藏
同时如何快速判断相机看向的目标是哪些
瓦片加载时的索引优化(之前都是无脑遍历)
提前计算每个瓦片的bounds(之前都是利用中心点和半径) 四叉树叶子的bounds和更精准的个体瓦片bounds
3.读取并使用 (解压
4.数据结构分析




将所有数据存为一棵四叉树
主干TreeFour
自身bounds 和四个叶子的bounds 四个叶子对象
叶子Leaf
自身 下一级四个叶子的bounds和对象 每个子叶子包含的个体
我这里只分了两层 再多就不合适了反而增加了负担
每帧执行肯定不可取 做一些延迟 大概比例在适当位置相机移动一个瓦片大小的距离
void FixedUpdate()
{
//延迟处理 当相机位置移动量偏差为10或者旋转量为~ 进行更新
if ((CameraMin.transform.position - oldCamera_position).magnitude > 10)//10 实时检测间隔 || !oldCamera_rotation.Equals(CameraMin.transform.rotation)按需要添加旋转 旋转如何设置间隔?
{
slope = Mathf.Tan(CameraMin.fieldOfView * Mathf.Deg2Rad * 0.5f);
GeometryUtility.CalculateFrustumPlanes(CameraMin, _currentFrustum);
oldCamera_position = CameraMin.transform.position;
//oldCamera_rotation = CameraMin.transform.rotation;
// 先进行加载 隐藏
StartCoroutine(All_LoadLayer());
//卸载 队列 1 储存卸载需求 卸载综量
}
StartCoroutine(All_LoadLayer());
找到相机看向的瓦片层级个体集合 通过遍历判断AABB是否在相机范围内储存List<user_osg>
public class user_osg
{
public float distanceold = 0; //记录上次的距离 减少循环
public int isOnselect = 0; //记录是否离开过视角 减少循环
public Bounds _bounds;
public Transform ThisObj; //初始瓦片实体
public Transform _pagedDatas; //关联下一级
public Transform ThisTransform; //自己
public user_osg(Transform B, Transform A,Transform C, Bounds _bounds)
{
this._pagedDatas = B;
this.ThisObj = A;
this.ThisTransform = C;
this._bounds = _bounds;
}
}
判断个体是否在相机范围内(虽然和上边已经判断出大概 这里可以取舍 选择默认在相机内和再次判断 各有优劣)
结果存在
//加载栈 后进先出 把数据平摊到每帧执行
Stack<Transform> TaskDels1 = new Stack<Transform>();
加载栈
if (!isLoading)
{
if (TaskDels1.Count == 0) return;
LoadWork();
}
}
async void LoadWork()
{
isLoading = true;
await RequestLoadAndUnload(TaskDels1.Pop());
isLoading = false;
//TaskDels1.Pop();
}
(整个场景你没有设计卸载队列 现阶段如果把没个瓦片都加载到最后内存实际使用为 总文件的2/3大小 这里只加载了17到19层级)
一 提取osgb信息并写入新文档
1.打开ReaderOSGB.cs 组件 关闭Ceshis.cs


设置读取文件目录 onclickbutton("E:/接收文件/osgb/1");

文件写入目录 可以自定义 (不过最好存在项目外
PathName = Path.Combine(Path.Combine(Application.dataPath, "../"), "OsgbData") ;

需要手动设置
0. ReaderOSGB.cs 173 出可以输出空文件的目录
if (!File.Exists(rootFileL + ".osgb"))
{
Debug.Log(rootFileL+"名字异常");
break;
}
1.ReaderOSGB.cs 需要根据实际填写 初始瓦片层级(例如 17 以文件不分叉同时较清晰程度) 和你要的最终层级 (19 为止 需要的往上调) osgb结构的初始层级(14 有的文件都不一致 所以需要手动调 15 16都有可能)
2.

InsideFuntion(scencepatent, a, PathName); 初始瓦片
InsideFuntionQI(scencepatent, a, PathName);17层瓦片
分别输出 一块输出数据会混乱
3.先输出 InsideFuntionQI(scencepatent, a, PathName);17层瓦片 如果debug 数据异常 有可能数据文件夹为空需要手动删除 不然会卡主进程
二 预制件

如果加载的是osgb文件集 需要调整每个模块的位置
具体步骤写的不是太详细 有需求的话留言吧
我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
简而言之错误:NOTE:Gem::SourceIndex#add_specisdeprecated,useSpecification.add_spec.Itwillberemovedonorafter2011-11-01.Gem::SourceIndex#add_speccalledfrom/opt/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:91./opt/local/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails/gem_dependency.rb:275:in`==':und
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------