本发明属于计算机虚拟现实技术领域,具体而言是基于无人机采集的大场景图片进行建模,针对建模后的网格数据处理的方法,处理过的数据能够在web端无延迟加载并能够实时渲染。

背景技术:

近年来随着虚拟现实技术的迅猛发展和计算机硬件处理能力的不断提高,计算机图形学得到了越来越广阔的应用前景,同时伴随着海量数据的发展,对三维模型的可视化和处理技术也提出了越来越高的要求。三维模型的处理和可视化技术作为计算机图形学的主要研究内容,利用该技术来绘制并渲染逼真流畅的大规模场景模型,在智慧城市、智慧校园、智慧社区等虚拟现实领域有重要意义。

多细节分辨率模型(levelofdetail,lod)技术作为目前海量大场景数据渲染主要方法之一,在虚拟现实可视化中可以有效提高渲染速度,同时降低对硬件的性能要求。lod技术是图形生成加速渲染方法中的一种主要方法。在1976年,clark就提出了层次细节(levelsofdetail,lod)模型的概念(参见clarkj.hierarchicalgeometricmodelsforvisiblesurfacealgorithms[a].communicationsoftheacm,1976.547-554.),认为当物体覆盖屏幕较小区域时,可以使用该物体较低分辨率的模型,反之则使用较高分辨率模型,以便对复杂场景进行快速绘制。

lod技术在不影响画面视觉效果的条件下,通过逐次简化景物的表面细节来减少场景的几何复杂性,从而提高绘制算法的效率。该技术通常对每一原始多面体模型建立几个不同逼近精度的几何模型。与原模型相比,每个模型均保留了一定层次的细节。目前lod的实现方式主要有两种:1、静态lod,即在预处理过程中产生一个物体的几个离散的不同细节层次模型,实时绘制是根据特定的标准选择合适的层次表示模型,不过存在内存占用过高的缺陷,2、动态lod,即设计一个数据结构,在实时绘制时可以从该数据结构中提取出所需要的层次模型,从而在渲染时根据视点信息进行重建,此方式下cpu占用率过高。

技术实现要素:

针对现有细节层次模型处理方法普适性较低,对计算机硬件资源要求较高等问题,本发明提供了一种面向大场景模型动态渲染lod处理方法,其包括:

步骤a、对大场景模型进行多分辨率的计算,切分为不同细节层次,且不同细节层次之间保持一定的分辨率比例关系;

步骤b、定义存储切分结果的数据结构和新文件结构,利用所定义的数据结构将结果存储在新定义的文件结构中;

步骤c、基于webgl和所定义的新文件结构,自适应动态计算细分模型和web场景中视点的对应关系,实现web端大场景模型的动态渲染。

进一步地,所述步骤a中,对大场景模型进行多分辨率计算时,用户指定计算时所使用的内存大小ram,并构建kd-tree索引结构以加速网格计算;然后设置顶层节点面片数量top_node_faces,相邻两层网格分辨率比例设置为0.5,依据分辨率关系逐步细分模型,细分收敛条件是当前节点所包含的顶点数目n

进一步地,所述步骤b中数据结构为,结构头包含所有顶点数据、面片数据、纹理数据及各个节点包围球;所设计的文件格式结构为:文件头和节点数据信息两个部分,其中文件头描述三维模型的全局信息,包括:模型整体包围球中心、半径、顶点数目、面片数目,材质数据以及节点数目;节点数据信息是每个节点包含的数据信息,包括边界信息、面片数据、顶点坐标以及多分辨率数据。

进一步地,所述步骤c中,自适应计算过程为:首先计算节点包围球和相机在世界坐标系下欧式距离d,通过实时对比d和节点包围球半径d的比值与用户输入的阈值的对比实现对节点数据的动态调度。

本发明与现有技术相比的有益效果是:

本发明对动态lod方法进行了改进,在模型生成阶段用户可以指定生成节点细节,根据计算机硬件资源指定所使用的内存大小,从而提高本发明的适用性,在渲染阶段可设置调节阈值进行模型细节的渲染控制,提高渲染效率的同时可降低cpu的占用率。

本发明用户可以指定切分时所能使用的内存大小(默认使用2000m),因此能够充分发挥计算机性能,在内存较小的计算机上可设置较小的参数,反之可设置较大的参数,从而提高了本发明对不同计算机硬件配置的适应性;

本发明专门为细分网格模型设计了一种扩展名为.nxs的文件对计算结果进行存储,所涉及的文件能够很好的支持本发明的使用,在动态渲染与调度过程中,基于对该文件的解析信息和用户设定的阈值误差,在较小cpu的占用率下可实现对细分网格模型的快速调度。

附图说明

图1为本发明的面向大规模静态场景web端动态渲染的处理方法流程图;

图2为本发明渲染显示边界细节的示意图;

图3为本发明分块显示的示意图;

图4为本发明在web端进行分块lod渲染后一平方公里整体效果显示图;

图5为图4局部细节图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实例对本发明做进一步的详细说明,但是本发明要求保护的范围并不局限于下述的具体实例。

如图1(左)网格处理流程图所示,首先构建全局的kd-tree索引结构用来加速网格顶点的查询与计算,然后基于构建的索引结构对网格模型进行分块处理,在进行分块的同时确保相邻父子节点网格分辨率误差为0.5,同时在父节点中保留模型的边界信息,在渲染阶段,如图1(右)渲染流程图所示,首先基于webgl加载.nxs文件,基于用户指定的误差因子和nxs文件中的模型节点信息构造节点评价系统,基于节点评价函数实现对细分模型的动态加载。本发明的具体实施方法如下:

1大场景模型细分lod的计算

1.1大场景模型的细分

针对大场景网格文件,首先构建kd-tree索引结构并将网格顶点信息输入到kd-tree中。然后构建该网格的整体包围球,构建方式为:1、计算所有网格顶点的重心作为其包围球心,同时统计所有网格顶点和面片的数量;2、基于kd-tree索引结构,寻找距离包围球球心最远的点,以球心和该点的距离作为包围球半径。预先设定每层节点包含的顶点数目为n=4096,切分模型所使用的内存为8000m,只要该层节点包围球空间含有的顶点数目少于n,该包围球所对应的节点就停止剖分。

1.2多分辨率层次的细分网格模型建立

基于步骤1.1所构建的kd-tree索引结构和场景包围球信息,以整个场景的包围球包含的信息为场景的根节点,顺次向下构建lod层次,同时网格分辨率降低为上级分辨率的50%。当满足切分停止条件时(即该节点所包含的顶点数不满足预设值),停止切分,在分的过程中,父节点保留当前等级网格模型的边界信息,细分lod模型的边界如图2所示。切分步骤如下:

step1.首先判断当前节点的状态,如果当前节点node是叶子节点,则把其当前未简化的几何信息作为最精细层lod1,而将lod1的面片数量简化为原来的1/2得到次精细层lod2,重复这一步骤。

step2.若node不是叶子节点,则先对其非空子节点调用step1,递归调用step1,直至node的所有非空子节点构建完细分模型。

对kd-tree的根节点调用上述过程,递归地建立整个kd-tree的细分lod结构。参考图3,在细分lod建立过程中,将属于同一纹理的面片归为同一组,避免在渲染过程中对纹理的多次调用,提高渲染效率。在对大场景模型细分处理过程中,设定使用内存为8000m以加快处理速度,针对北航青岛研究院模型,本发明的输出信息如下:该模型的顶点数据为46万左右,对其进行切分的lod细节层次为5层,且该模型包含纹理信息和顶点颜色信息,计算结果保存在.nxs文件中.

1.3大场景模型细分lod文件格式(.nxs)

为提高渲染效果及加载效率本发明使用了一种链接型文件格式—nexusfile(扩展名为.nxs),对已构建好分块lod的模型进行二进制存储,该文件的头信息包含根节点包围球,顶点数据、纹理材质数据、总的面片数据、总的节点数量。基于得到模型的lod数据文件,就可以直接导入web场景进行大规模网格模型的lod渲染显示。

2.细分场景模型的坐标变换

由于场景中的模型是在世界坐标系下的,按照场景中模型的空间变换信息,对以nxs文件格式载入的多层次lod节点包围球数据作相应的变换,包括旋转、平移和缩放。遍历所有节点,计算它们中心的平均值作为场景世界坐标系的中心center。得到了场景的包围球和中心之后,将节点数据变换到该世界坐标系下。

3.得到场景的细分lod模型之后,还必须根据用户指定阈值误差及漫游视点进行lod模型的web渲染,基于视点的lod渲染流程图如图1(右)所示,首先加载场景根节点获取切分模型的整体信息,渲染效果如图4及图5所示。

根据公式选择细分lod模型进行渲染,其中d是节点的包围球中心到相机的距离,d是场景中节点包围球的半径,θ是视景体的水平夹角,e用户指定的误差阈值。基于视点渲染的算法描述如下,

step1.首先将场景根节点加入节点队列queue。从queue取出节点node,遍历node的子节点,比较简化误差e与e,若符合公式(1),则把该node节点指针加入到渲染队列。

step2.遍历完毕node的所有子节点之后,若没有符合公式(1)的,则将node的非空子节点加入queue

step3.重复step1——step2,直到queue为空

step4.遍历渲染队列进行渲染。

面向大场景web动态渲染的分块lod数据处理方法,首先进行网格模型的细分处理,在细分处理阶段用户可指定使用的内存大小和节点参数;然后设置特定的数据结构,并将处理后的数据存储到自定义的文件中;最后根据用户指定的误差阈值,在web端实现动态加载和渲染。本发明相对于静态lod提供了较好的细节性绘制;相对于目前多数动态lod又减少了渲染的复杂度,从而满足大规模静态场景实时渲染得需要。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。以上所述,仅是本发明的较佳实施例而已,并非是对本发明作其它形式的限制,任何熟悉本专业的技术人员可能利用上述揭示的技术内容加以变更或改型为等同变化的等效实施例应用于其它领域,但是凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与改型,仍属于本发明技术方案的保护范围。

PHP加载lod,面向大场景模型web端动态渲染LOD处理方法与流程相关推荐

  1. netty 游戏服务器框图_基于Netty和WebSocket协议实现Web端自动打印订单服务方法与流程...

    本发明涉及电子商务技术领域,尤其涉及一种基于netty和websocket协议实现web端自动打印订单服务方法. 背景技术: 电子商务是以信息网络技术为手段,以商品交换为中心的商务活动:也可理解为在互 ...

  2. allegro 3D模型怎么找? PCB的DFA如何设计?如何加载PCB的3D模型?如何避免器件之间的干涉?PCB的3D设计 DFA设计的概念

    一些群友问杨老师,allegro的3D模型模型怎么找? PCB的DFA如何设计?如何加载PCB的3D模型?如何避免器件之间的干涉?这里杨老师对PCB中DFA设计常见的几种方法进行分析下 这些问题来自群 ...

  3. pytorch 驱动不兼容_解决Pytorch 加载训练好的模型 遇到的error问题

    这是一个非常愚蠢的错误 debug的时候要好好看error信息 提醒自己切记好好对待error!切记!切记! -----------------------分割线---------------- py ...

  4. 使用torchvision.models.inception_v3(pretrained=True)加载预训练的模型每次都特别慢

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 使用torchvision.models.inception_v3(pretrained=True)加载预训练的模型每次 ...

  5. babylonjs 分部加载模型_如何使用BabylonJS加载OBJ或STL模型

    BabylonJS(也就是babylon.js,这是一个和three.js类似的WebGL开发框架),更多的用在游戏领域. 本文说明和演示如何使用babylon.js来加载一个标准3d模型文件,如OB ...

  6. 关于PaddleNLP如何加载训练好的模型进行NER

    关于PaddleNLP如何加载训练好的模型进行NER 关于PaddleNLP如何加载训练好的模型进行NER 当时在如何加载已经训练好的模型的问题上花了很长时间,后来也是受另一篇文章启发,问题才得以解决 ...

  7. cesium加载并聚焦glb模型

    文章目录 1.实现效果 2.实现方法 2.1实现思路 2.2具体代码 Cesium实战系列文章总目录: 传送门 1.实现效果 2.实现方法 2.1实现思路 (1)参考官方加载模型的沙盒示例:传送门 ( ...

  8. Super Map超图IServer加载BIM及精细模型操作

    加载BIM及精细模型操作 SuperMap支持模型数据集.复合数据集生成三维切片缓存(S3M),为了优化模型在网络环境中的传输和解析,SuperMap iClient3D for WebGL(以下简称 ...

  9. PCL入门系列 —— 加载ply格式mesh模型、点云数据并作可视化展示

    PCL入门系列 -- 加载ply格式mesh模型.点云数据并作可视化展示 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要 ...

最新文章

  1. U盘制做DOS启动盘
  2. 七骑士android版上线时间,腾讯独代韩手游《七骑士》今日全面公测
  3. 腾讯多任务模型MFH
  4. echarts 3d地球 背面光线太暗_新技术:多波长光源,同时3D打印多种光敏树脂材料...
  5. 用segnet训练我自己的数据,实验笔记1——改变图片大小
  6. C++ STL容器在for循环中删除迭代器 正确方法 it++正确吗
  7. php varbinary,php – 无法从MSSQL中获取varbinary数据
  8. MATLAB规划和LINGO规划,[数学建模]线性规划与matlab,lingo解法
  9. office每次打开都提示重新配置的三种解决方法
  10. Oracle项目管理系统之质量保证体系
  11. 将Solidworks Toolbox中的标准件更改为普通零件
  12. 硬盘无法访问提示参数错误
  13. html小游戏——看你有多色
  14. XSS(跨站脚本攻击)相关内容总结整理
  15. 零基础入门python web 自动化测试_python web自动化测试,入门篇
  16. [Python3]pandas.merge用法详解
  17. Permit.js – 用于构建多状态原型的 jQuery 插件
  18. 软件构造 Lab-2 Report
  19. Linux MySQL数据库冷迁移采坑记录
  20. WIN7登陆界面去掉下面windows 7 旗舰版

热门文章

  1. python爬虫爬妹子图_【爬虫】直接上干货-爬取妹子图整站图片
  2. cad导出pdf_如何使用CAD手机看图软件将DWG格式图纸文件转换成PDF格式?
  3. 一个模仿途牛旅行应用源码
  4. php百度坐标转腾讯坐标,PHP实现腾讯与百度坐标转换
  5. Arp中间人攻击原理
  6. 大调查:7成网友呼吁共享单车免押金和上保险
  7. 休息休闲推荐 ---- 电视剧《觉醒年代》百年优秀历史纪录电视剧
  8. G. Columns Swaps(并查集)
  9. Python覆盖率框架Coverage初探
  10. 降维中信息的损失对聚类结果的影响图形化表示