一种osg三维引擎加载3ds模型文件的格式转换方法

文档序号:8528730阅读:1030来源:国知局
一种osg三维引擎加载3ds模型文件的格式转换方法
【技术领域】
[0001]本发明涉及一种OSG三维引擎加载3DS模型文件的格式转换方法,属于三维可视化技术领域。
【背景技术】
[0002]三维模型是三维仿真演示系统软件中的重要组成部分。目前普遍采用先将建模对象利用3DS建模软件生成可描述建模对象细节特征的3DS模型文件,再将3DS模型文件经过格式转换导入三维仿真演示系统中的三维模型加载方法。由于3DS建模软件与三维仿真演示系统中OpenSceneGraph(OSG)三维引擎在三维模型的数据结构上存在差异,因此此种三维模型加载方法在实际应用过程中存在导入后的三维模型与原三维模型相比部分数据结构丢失,出现三维模型显示精度下降、纹理贴图和光照效果紊乱等问题。为了解决OSG三维引擎加载3DS模型文件失真的问题,开展OSG三维引擎加载3DS模型文件的格式转换方法的研宄十分重要。
[0003]现有的OSG三维引擎加载3DS模型文件的格式转换方法主要有两种,一种是OSG直接读取,这种方法可以完成对3DS模型文件的加载,但不会保留3DS模型材质、灯光等信息,而且模型整体失真严重,无法直接作为不失真模型使用。另一种方法是插件法,主流插件是OsgExp,这种插件可以几乎不失真的加载3DS模型文件,且可以导出部分3ds MAX自带的材质效果。但此种方式可导出的材质信息有限,且缺少灵活性。

【发明内容】

[0004]本发明解决的技术问题是:克服现有技术的不足,提出了一种OSG三维引擎加载3DS模型文件的格式转换方法,实现了 3DS模型文件无失真的加载到OSG三维引擎下,并能够根据用户需求对模型信息进行修改和增强,最大程度上满足复杂材质的导出需求。
[0005]本发明的技术解决方案
[0006]一种OSG三维引擎加载3DS模型文件的格式转换方法,包括步骤如下:
[0007](I)读取三维模型的结构信息:将3DS三维模型的网格信息,由节点树的存储方式,生成三维模型网格信息数据链表,再经OSG三维引擎读取,生成OSG三维引擎的基础结构;所述的3DS三维模型的网格信息包括模型ID、顶点数目、顶点值、线条数目、曲面数目;所述的基础结构为OSG的几何模型节点,包含模型ID、顶点数目、顶点值、线条数目、曲面数目信息;
[0008](2)读取三维模型的效果:通过将3DS三维模型的材质和光照信息,由节点树的形式,生成材质读取队列及光照信息数组,根据需求对光照进行增强以及对材质信息做适应性修改,同时对3DS三维模型凹凸效果、环境反射效果、高光效果进行设置,再经OSG三维引擎读取,生成OSG三维引擎中材质、光照和效果节点,最后再由OSG三维引擎重新渲染并加载光照信息和效果,用于还原三维模型效果;
[0009](3)根据步骤(I)的三维模型基础结构和步骤(2)中的三维模型效果以及OSG三维引擎的渲染顺序,重构三维模型结构。
[0010]读取三维模型结构包括以下步骤:
[0011](Ia)定位3DS三维模型网格信息的根chunk及根chunk的子节点;
[0012](Ib)将已定位的3DS三维模型网格信息从节点树的存储方式中读取,并遍历模型ID以及模型ID对应模型的顶点数目、顶点值、线条数目、曲面数目,将模型ID以及其他网格信息按照各个三维模型节点的形式存储,构成三维模型网格信息数据链表;
[0013](Ic)由OSG三维引擎重构根chunk节点信息及根chunk与其子节点的继承关系,重绘3DS三维模型基础结构;
[0014](Id)将OSG三维引擎重构后的3DS三维模型结构信息写入*.0sg、*.1ve格式的文件中进行存储。
[0015]读取三维模型的效果包括以下步骤:
[0016](2a)定位3DS三维模型材质信息和光照信息的根chunk及根chunk的子节点;
[0017](2b)将已定位的3DS三维模型材质信息和光照信息从节点树的存储方式,读取并生成材质读取队列及光照信息数组,;
[0018](2c)根据用户需求,对光照进行增强包括修光源基础属性的反射率、折射率和光强,以及修改材质信息包括修改纹理贴图的颜色、色彩亮度、漫射、镜面、光泽度及反射,同时对3DS三维模型凹凸效果、环境反射效果、高光效果进行设置;
[0019](2d)经OSG三维引擎读取步骤(2c)设置的三维模型效果以及材质及光照信息,生成OSG三维引擎中材质、光照和效果节点,并由OSG三维引擎重新渲染修改以后的材质信息的根chunk及其子节点的继承关系,并加载增强后的光照信息和效果,用于还原3DS三维模型效果;
[0020](2e)将OSG三维引擎重新渲染的材质信息及光照信息写入*.0sg, *.1ve格式的文件中,完成整体3DS三维模型的效果构建。
[0021]对于3DS三维模型的凹凸效果、环境反射效果、高光效果,无法通过3DS文件读取,通过在步骤(2c)用户修改过程中引入着色器编程,设置3DS三维模型的凹凸效果、环境反射效果、高光效果属性,经OSG三维引擎读取并设置材质及光照信息属性。
[0022]本发明相对于现有技术的有益效果为:
[0023](I)本发明通过读取3DS三维模型的网格信息,从节点树的存储方式,按照模型节点的方式重新存储成三维模型网格信息链表,使各个子模型网格信息集中存储,提高OSG三维引擎的读取效率,同时避免3DS三维模型网格信息缺失,很大程度上保持3DS三维模型网格信息的完整性,避免了直接读取3DS三维模型信息不完整,效率低下的问题。
[0024](2)本发明通过读取3DS三维模型的材质信息,将材质信息存入材质读取队列,并对多层贴图构成的材质进行拆分处理,将贴图以子节点的形式存储于三维模型材质信息链表中,提高OSG三维引擎的读取效率,并分别设置对应OSG三维引擎下的纹理贴图属性,完成多层贴图构成的材质的凹凸、透明效果。很大程度上提高了 3DS三维模型的显示效果,解决了传统插件无法到处多层贴图构成的材质的局限性。
[0025](3)本发明通过提供用户自定义修改材质及增强光照的算法,在读取3DS三维模型材质信息及光照信息的基础上,用户可以通过修改3DS三维模型材质信息链表中的材质属性(颜色/RGB、漫射、镜面、反射、凹凸、光泽度),并增强光照信息数组中光照属性,在读取阶段对材质及光照信息进行修改,消除了传统插件只能导出部分材质及光照信息的局限性,大大提高了本发明的灵活性及通用性。
[0026](4)本发明增添三维模型网格信息的转化方法,从节点树存储方式转化为模型节点链表形式的存储方式,便于OSG三维引擎加载三维模型网格信息,由于以模型节点形式存储,各个子模型的网格信息集中,不易发生读取不全的现象。
[0027](5)本发明在模型信息读取阶段引入着色器编程,支持设置3DS三维模型的凹凸效果、环境反射效果、高光效果,提高三维模型显示效果。
【附图说明】
[0028]图1是本发明方法流程图;
[0029]图2是本发明3DS三维模型基本结构块(chunk)结构图;
[0030]图3是本发明未经用户自定义修改材质、增强光照的3DS基础木质材质图;
[0031]图4是本发明经用户自定义修改材质、增强光照后的金材质图。
【具体实施方式】
[0032]下面结合附图对本发明的具体工作原理做进一步解释。
[0033]3DS建模软件与三维仿真演示系统中OSG三维引擎在三维模型的存储形式上存在一定的差异,3DS建模软件中建立的三维模型以节点树的形式存储,各个子模型的网格信息(包括模型ID、顶点数目、顶点值、线条数目、曲面数目)以子节点的形式存储于节点树的最底层,且分别存储于不同的子节点下,存储结构相对较分散。而OSG三维引擎中的三维模型以模型节点形式存储,一个模型节点下包含本模型对应的所有网格信息(包括模型ID、顶点数目、顶点值、线条数目、曲面数目),各模型之间网格信息的存储相对独立。
[0034]根据上述3DS三维模型和OSG三维渲染引擎下的三维模型信息存储形式的差异,为了更真实、更高效的还原3DS三维模型,本发明提出一种将3DS三维模型节点树形式的存储方式转化为OSG三维引擎中的三维模型节点的存储方式。
[0035]如图1所示,一种OSG三维引擎加载3DS模型文件的格式转换方法包括步骤如下:
[0036](I)读取三维模型的结构信息:将3DS三维模型的网格信息,由节点树的存储方式,生成三维模型网格信息数据链表,再经OSG三维引擎读取,生成OSG三维引擎的基础结构;所述的3DS三维模型的网格信息包括模型ID、顶点数目、顶点值、线条数目、曲面数目;所述的基础结构为OSG的几何模型节点,包含模型ID、顶点数目、顶点值、线条数目、曲面数目信息;
[0037]读取三维模型结构包括以下步骤:
[0038](Ia)定位3DS三维模型网格信息的
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1