一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于快照与多路由的模型渲染方法、装置及存储介质与流程

2022-12-06 22:20:15 来源:中国专利 TAG:


1.本发明涉及模型渲染,尤其涉及基于快照与多路由的模型渲染方法、装置及存储介质。


背景技术:

2.目前,对于ifc格式的bim模型在渲染时,一般采用osg引擎进行渲染,但是渲染过程中,由于ifc格式的bim模型的树形结构中节点数量庞大,在渲染引擎渲染一帧数据时,需要遍历整个模型的树形结构,需要耗费大量cpu时间,导致帧率低下、旋转及平移等操作卡顿。同时,对于一个数据节点来说,可能存在多种基础图形,在渲染时需要非常频繁地切换渲染管线,增加系统性能损耗等。


技术实现要素:

3.为了克服现有技术的不足,本发明的目的之一在于提供基于快照与多路由的模型渲染方法,其能够解决现有的模型渲染效率差、系统性能损耗等问题。
4.本发明的目的之二在于提供基于快照与多路由的模型渲染装置,其能够解决现有的模型渲染效率差、系统性能损耗等问题。
5.本发明的目的之三在于提供一种存储介质,其能够解决现有的模型渲染效率差、系统性能损耗等问题。
6.本发明的目的之一采用如下技术方案实现:
7.启动步骤:启动三维模型的帧渲染并判断所述三维模型是否存在渲染快照集,若是,则执行渲染步骤;若否,则执行遍历步骤;
8.渲染步骤:从所述渲染快照集中依次取出每个图形节点的渲染快照,并根据每个图形节点的渲染快照获取每个图形节点的渲染状态集和图形数据,进而对每个图形节点进行渲染;
9.遍历步骤:对所述三维模型的场景树中的所有节点依次遍历,以遍历得出每个图形节点,并根据每个图形节点的图形数据和渲染状态集生成对应渲染快照,进而构建得出所述三维模型的渲染快照集;所述渲染快照集包括若干个图形节点的渲染快照,每个图形节点的渲染快照包括渲染状态集和图形数据。
10.进一步地,所述遍历步骤包括:按照自上而下深度优先搜索遍历方法对所述三维模型的场景树中的所有节点依次遍历。
11.进一步地,所述按照自上而下深度优先搜索遍历方法对所述三维模型的场景树中的所有节点依次遍历时,对遍历到的每个节点执行以下步骤:
12.判断步骤:判断当前节点的节点类型,以及当当前节点为路由器节点时,执行入栈步骤;当当前节点为路标节点时,执行比对步骤;当当前节点既不是路由器节点,也不是路标节点时,执行处理步骤;
13.入栈步骤:遍历当前节点的一个子节点,并将该子节点对应的路标值存储到路标
栈的栈顶,然后将该子节点记为当前节点,执行判断步骤;
14.比对步骤:判断当前节点的路标值与所述路标栈中前一次入栈的栈顶存储的路标值是否相等,若是,则继续遍历当前节点的下一个子节点并将其记为当前节点,执行判断步骤;若否,则返回当前节点的父节点继续遍历下一个节点;
15.处理步骤:判断当前节点是否图形节点时,若是,则从对应渲染状态栈中取出对应栈顶值以构成当前节点的渲染状态集,同时根据当前节点获取当前节点的图形数据,进而生成当前节点的渲染快照;
16.快照集生成步骤:直到所述三维模型的场景树中的所有节点遍历完成后,按照渲染快照生成的顺序根据若干个图形节点的渲染快照形成所述渲染快照集。
17.进一步地,所述处理步骤还包括:若当前节点不是图形节点时,根据当前节点的节点类型进行对应处理,然后继续遍历下一个节点。
18.进一步地,所述处理步骤还包括:若当前节点不是图形节点,并且当前节点保存了对应渲染状态,将对应渲染状态入栈到对应类型的渲染状态栈的栈顶,继续遍历下一个节点。
19.进一步地,所述遍历步骤还包括:渲染快照集优化步骤:按照渲染快照的生成顺序依次遍历每个渲染快照,以及当对应渲染快照不是首个渲染快照并且该渲染快照的渲染状态集与前一个渲染快照的渲染状态集相同时,将该渲染快照的渲染状态集清空,直到所有的渲染快照遍历完成。
20.进一步地,所述渲染步骤还包括:取快照步骤:从渲染快照集中取出第一个渲染快照并记为当前渲染快照;
21.判断步骤:判断当前渲染快照的渲染状态集是否空,若否,则执行第一渲染步骤;若是,则执行第二渲染步骤。
22.第一渲染步骤:根据当前渲染快照的渲染状态集设置对应的渲染状态,并根据当前渲染快照的图形数据中的图形类型对当前图形节点进行渲染,然后从所述渲染快照集中取出下一个渲染快照并记为当前渲染快照,执行判断步骤;
23.第二渲染步骤:根据前一次渲染时设置的渲染状态和当前渲染快照的图形数据中的图形类型对当前图形节点进行渲染,然后从所述渲染快照集中取出下一个渲染快照并记为当前渲染快照,执行判断步骤。
24.进一步地,所述三维模型为ifc格式的bim模型;
25.所述三维模型的场景树满足以下条件:
26.所述场景树包括一个或多个路由器节点;其中一个路由器节点为场景树的根节点;
27.其中,所述路由器节点的子节点为一个或多个渲染管线节点,每个渲染管线节点根据渲染图形类型的不同设置对应渲染状态,并且分配唯一的路标值;同时,每个路由器节点的所有子节点均共享同样的子节点数据;所述渲染管线节点,有若干子节点,且渲染管线节点绑定若干渲染状态集合,其中,所述渲染状态集合包括渲染图形类型、着色器、点大小、线宽、材质、纹理贴图、深度测试、模板测试、混色、多重采样;
28.所有路标节点,存在至少一个路由器节点作为其直接或间接的父节点;路标节点中的路标值,与其父节点的子节点的路标值匹配;每个路标节点,均有若干个子节点,每个
路标节点均绑定唯一路标值;所述路标值为整型类型的数值;
29.所有图形节点,保存图形数据的节点,为场景树的叶子节点,没有子节点,存在唯一的路标节点作为其直接或间接的父节点;其中,所述图形数据的类型为点、线、面中的任意一种。
30.本发明的目的之二采用如下技术方案实现:
31.基于快照与多路由的模型渲染装置,包括存储器和处理器,所述存储器上存储有在处理器上运行的模型渲染程序,所述模型渲染程序为计算机程序,所述处理器执行所述模型渲染程序时实现如本发明的目的之一采用的基于快照与多路由的模型渲染方法的步骤。
32.本发明的目的之三采用如下技术方案实现:
33.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序为模型渲染程序,所述模型渲染程序被处理器执行时实现如本发明的目的之一采用的基于快照与多路由的模型渲染方法的步骤。
34.相比现有技术,本发明的有益效果在于:
35.本发明通过对三维模型的场景树中的所有节点进行预先遍历,以形成每个图形节点的渲染快照,在渲染时直接对遍历每个图形节点的渲染快照以进行渲染,解决现有技术中在每次渲染时均需要遍历场景树中的所有节点导致系统性能下降、渲染效率差等问题,同时,采用快照机制,将属于同一渲染管线的节点集成到同一个渲染快照中,可避免由于基础图形数据杂乱导致频繁切换渲染管线、系统性能损耗大等问题。
附图说明
36.图1为本发明提供的基于快照与多路由的模型渲染方法流程图;
37.图2为图1中的步骤s3的流程图;
38.图3为图2中的步骤s10的流程图;
39.图4为图1中的步骤s2的流程图。
具体实施方式
40.下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。
41.实施例一
42.本发明提供一种基于快照与多路由机制的bim模型的渲染方法,通过快照机制来解决模型结构庞大带来的树形结构遍历性能的问题,通过多路有机制来解决模型构建中因基础图形多样性需频繁切换渲染管线导致系统性能损耗过大的问题。
43.如图1所示,本发明提供一种优选的实施例,一种基于快照与多路由的模型渲染方法,包括以下步骤:
44.步骤s1、启动帧渲染,并检查三维模型是否存在渲染快照集,若是,则执行步骤s2;若否,则执行步骤s3。
45.步骤s2、从渲染快照集中依次取出每个渲染快照,并根据每个渲染快照的渲染状
态集和图形数据、图形节点的类型进行渲染。
46.本发明采用osg引擎进行帧渲染,并且在渲染之前,首先需要生成快照集。其中,快照集是指包括有多个快照组成的有序序列。其中,快照包括渲染状态集和图形数据两部分。渲染状态集是指底层渲染api相关的渲染状态设置的集合,渲染状态类型包括但不限于渲染图形类型、着色器、材质、纹理、点大小、线宽以及变换矩阵等内容。
47.当生成快照集后,对快照集中的每个快照进行渲染来实现模型的渲染。具体地,通过调用快速的渲染状态集中的数据和图形数据来实现渲染。
48.当没有快照集时,需要通过遍历模型的场景树来实现渲染快照集的生成。本发明通过快照机制预先生成每个图形节点的渲染状态集,在渲染时直接根据图形节点的渲染状态集和图形数据对图形节点进行渲染,以解决现有技术中在每帧进行渲染时,需要对整个三维模型的所有节点机芯遍历,导致系统性能下降、渲染效率差等问题。
49.当三维模型不存在对应的渲染快照集时,对三维模型的场景树中的节点进行遍历,以生成渲染快照集。
50.具体地,步骤s3、按照自上而下深度优先搜索遍历方法对三维模型的场景树中的每个节点依次遍历以得到每个图形节点,同时获取每个图像节点的渲染状态集和图形数据并生成每个图形节点的渲染快照,从而构建得出三维模型的渲染快照集。
51.其中,本发明中的三维模型为ifc格式的bim模型,场景树是根据ifc格式的bim模型进行构建的,在构建场景树时,根据场景树中各个节点的不同,本发明还涉及到以下概念:
52.路由器节点:特殊的组节点(group),能够添加若干子节点,且每个子节点绑定唯一路标值。其中,路标值为整形类型数值。
53.路标节点:特殊的组节点(group),能够添加若干子节点,且路标节点绑定唯一路标值。此处路标值含义与路由器节点中的路标值一致,类型同为整形类型数值。
54.渲染管线节点:特殊的组节点(group),能够添加若干子节点,且渲染管线节点绑定若干渲染状态集合,可包括但不限于渲染图形类型(可以为点、线、面等)、着色器(shader)、点大小(point size)、线宽(line width)、材质(material)、纹理贴图(texture)、深度测试(depth test)、模板测试(stencil test)、混色(blend)、多重采样(multi-sampling)等。
55.图形节点:保存图形数据的节点,不允许添加子节点,为场景树中的叶子节点。图形节点所保存的图形数据不限定具体类型,可为基本的点、线、面其中一种,不可复合多种类型。
56.本发明还给出对于ifc格式的bim模型的场景树的构建可按照以下组织方式进行:
57.1)场景树中应包含一个路由器节点,所有包含有效图形数据的节点,应为路由器节点的直接或间接子结点;
58.2)路由器节点的子节点应为一个或多个渲染管线节点,每个渲染管线节点根据渲染图形类型的不同按需设置对应渲染状态,并且分配唯一的路标值;
59.3)路由器节点的所有子节点,也即,所有渲染管线节点,应共享同样的子节点数据,也即对于每个渲染管线节点来说,都设置同样的模型数据作为其子节点;
60.4)所有图形节点,应存在唯一的路标节点作为其直接或间接的父节点;
61.5)所有路标节点,应存在至少一个路由器节点作为其直接或间接的父节点;路标节点中的路标值,应与其父节点(也即,路由器节点)的子节点的路标值匹配。
62.优选地,如图2所示,步骤s3还包括:步骤s31、获取三维模型的场景树中的第一个节点,并记为当前节点。
63.步骤s32、判断当前节点的节点类型,以及根据当前节点的节点类型分别执行以下步骤:
64.当当前节点为路由器节点,则执行步骤s33;
65.当当前节点为路标节点,则执行步骤s34;
66.当当前节点既不是路由器节点,也不是路标节点,执行步骤s35。
67.步骤s33、按照自上而下深度优先搜索方法获取当前节点的一个子节点,并将该子节点的路标值入栈,并判断该子节点的节点类型。
68.步骤s331、当该子节点为路由器节点时,将该子节点记为新的当前节点,返回执行步骤s32。
69.步骤s332、当该子节点为路标节点时,判断该子节点的路标值是否与前一次入栈的节点的路标值相等,若是,则遍历该子节点的一个子节点并记为新的当前节点,然后执行步骤s32;若否,则返回遍历该子节点的父节点的下一个子节点(也即当前节点的下一个子节点)并将其记为新的当前节点,然后执行步骤s32。
70.从前述可知,一个路由器节点的子节点为渲染管线节点,也即,路由器节点的所有渲染管线节点应共享同样的子节点数据。因此,若当前节点的第一子节点的路标值与前一次入栈的节点的路标值不相等时,则认为这两个节点不属于同一渲染管线,也即,当前节点的第一个子节点的第一个子节点,与当前节点的第一子节点不属于同一渲染管线,则无需继续向下遍历,返回上一级的节点,也即当前节点的子节点再继续遍历,也即,返回遍历当前节点的下一个子节点。
71.本发明采用的自上而下深度优先搜索遍历算法对场景树中的所有节点进行遍历,因此,上述在遍历当前节点的下一个子节点时均遵循上述遍历算法。
72.步骤s34、当路由器为路标节点时,判断当前节点的路标值是否与前一次入栈的节点的路标值相等,若是,则遍历当前节点的子节点并记为新的当前节点,然后执行步骤s32;若否,则返回遍历当前节点的父节点的下一个子节点并将其记为新的当前节点,然后执行步骤s32。
73.步骤s35、判断当前节点是否为图形节点,若是,则执行步骤s37;若否,则执行步骤s36。
74.当当前节点既不是路由器节点,也不是路标节点时,判断当前节点是否为图形节点(图形节点,也即场景树中的叶子节点)。
75.步骤s36、判断当前节点是否保存了渲染状态,若是,则根据当前节点保存的渲染状态并将其入栈到对应图形类型的渲染状态栈的栈顶,执行返回遍历当前节点的父节点的下一个子节点并将其记为新的当前节点,然后执行步骤s32。
76.当当前节点不是图形节点时,可根据节点类型进行相应处理,然后继续遍历下一个节点。比如若当前节点内保存了渲染状态,则将当前节点保存的渲染状态入栈到对应图形类型的渲染状态栈的栈顶,以备后续构建图形节点的渲染状态集。
77.步骤s37、从渲染状态栈中取出对应图形类型的渲染状态的栈顶值,以得出当前节点的渲染状态集;同时获取当前节点的图形数据,根据当前节点的渲染状态集和图形数据生成当前节点的渲染快照,然后返回遍历当前节点的父节点的下一个子节点并将其记为当前节点,然后执行步骤s32。
78.若当前节点为图形节点时,根据图形节点的渲染状态集和图形数据生成渲染快照。其中,本发明中的渲染快照是指图形节点的渲染快照,其他节点并不存储渲染快照。在对场景树进行遍历时,最终都会遍历到图形节点,以生成渲染快照后,再返回该图形节点的上一级,也即图形节点的父节点的下一个子节点进行继续遍历,直到场景树的所有节点遍历完成。
79.步骤s38、当场景树中的所有节点均遍历完成后,获取所有的渲染快照并按照渲染快照的生成顺序形成渲染快照集。
80.由于本发明采用的遍历算法为自上而下深度优先搜索遍历算法,因此,在场景树中渲染快照集的若干个渲染快照的顺序实际上是场景树中若干个图形节点的遍历顺序,也即从左到右。同样地,在对图形节点进行渲染时,也是从左到右依次对每个图形节点进行渲染,因此在生成渲染快照集时,将若干个渲染快照按照渲染快照生成的顺序排列。
81.优选地,为了进一步节省资源,本发明还对生成的渲染快照集进行优化,也即,如图3所示,步骤s38还包括:
82.步骤s380、按照渲染快照的生成顺序依次从渲染快照集中遍历第一个渲染快照,记为当前待优化渲染快照。
83.步骤s381、判断当前待优化渲染快照是否为首个渲染快照,若是,则执行步骤s383;若否,则执行步骤s382。
84.步骤s382、判断当前待优化渲染快照的渲染状态集与前一个渲染快照的渲染状态集是否相同,若是,将当前待优化渲染快照的渲染状态集清空,然后步骤s383;若否,则执行步骤s383。
85.步骤s383、继续遍历下一个渲染快照并记为当前待优化渲染快照,然后执行步骤s381。
86.步骤s384、直到所有的渲染快照均遍历完成生成最终的渲染快照集。
87.也即,当两个渲染快照的渲染状态集相同时,在渲染时无需重复设置渲染状态,直接根据图形数据进行渲染即可,也即对得到的渲染快照集中的渲染快照进行优化,以便提高渲染效率、节省资源。
88.对应地,在渲染时,首先判断渲染快照的渲染状态集是否为空,然后再进行渲染。也即,如图4所示,步骤s2还包括:步骤s21、从渲染快照集中取出第一个渲染快照并记为当前渲染快照。
89.步骤s22、判断当前渲染快照的渲染状态集是否空,若否,则执行步骤s23;若是,则执行步骤s24。
90.步骤s23、根据当前渲染快照的渲染状态集设置对应的渲染状态,并根据当前渲染快照的图形数据中的图形类型进行渲染,然后执行步骤s25。
91.步骤s24、根据前一次渲染时设置的渲染状态,并根据当前渲染快照的图形数据中的图形类型进行渲染,然后执行步骤s25。
92.步骤s25、从渲染快照集中取出下一个渲染快照,并记为当前渲染快照,执行步骤s22。
93.直到渲染快照集中所有的渲染快照均渲染完成后退出渲染或等待执行其他命令。
94.本发明通过采用多路由机制和快照机制,首先对树形结构的三维模型中的每个节点进行遍历,以生成每个叶子节点的渲染快照,以形成三维模型的渲染快照集,然后依次对叶子节点的渲染快照进行渲染即可,大大提高渲染效率。同时,采用快照机制可解决因模型结构庞大带来的树形结构遍历导致系统性能下降的问题;采用多路由机制可解决模型构建中因基础图形混杂带来的频繁切换渲染管线的性能问题。
95.实施例二
96.基于实施例一,本发明还提供基于快照与多路由的模型渲染装置,包括存储器和处理器,所述存储器上存储有在处理器上运行的模型渲染程序,所述模型渲染程序为计算机程序,所述处理器执行所述模型渲染程序时实现以下步骤:
97.启动步骤:启动三维模型的帧渲染并判断所述三维模型是否存在渲染快照集,若是,则执行渲染步骤;若否,则执行遍历步骤;
98.渲染步骤:从所述渲染快照集中依次取出每个图形节点的渲染快照,并根据每个图形节点的渲染快照获取每个图形节点的渲染状态集和图形数据,进而对每个图形节点进行渲染;
99.遍历步骤:对所述三维模型的场景树中的所有节点依次遍历,以遍历得出每个图形节点,并根据每个图形节点的图形数据和渲染状态集生成对应渲染快照,进而构建得出所述三维模型的渲染快照集;所述渲染快照集包括若干个图形节点的渲染快照,每个图形节点的渲染快照包括渲染状态集和图形数据。
100.进一步地,所述遍历步骤包括:按照自上而下深度优先搜索遍历方法对所述三维模型的场景树中的所有节点依次遍历。
101.进一步地,所述按照自上而下深度优先搜索遍历方法对所述三维模型的场景树中的所有节点依次遍历时,对遍历到的每个节点执行以下步骤:
102.判断步骤:判断当前节点的节点类型,以及当当前节点为路由器节点时,执行入栈步骤;当当前节点为路标节点时,执行比对步骤;当当前节点既不是路由器节点,也不是路标节点时,执行处理步骤;
103.入栈步骤:遍历当前节点的一个子节点,并将该子节点对应的路标值存储到路标栈的栈顶,然后将该子节点记为当前节点,执行判断步骤;
104.比对步骤:判断当前节点的路标值与所述路标栈中前一次入栈的栈顶存储的路标值是否相等,若是,则继续遍历当前节点的下一个子节点并将其记为当前节点,执行判断步骤;若否,则返回当前节点的父节点继续遍历下一个节点;
105.处理步骤:判断当前节点是否图形节点时,若是,则从对应渲染状态栈中取出对应栈顶值以构成当前节点的渲染状态集,同时根据当前节点获取当前节点的图形数据,进而生成当前节点的渲染快照;
106.快照集生成步骤:直到所述三维模型的场景树中的所有节点遍历完成后,按照渲染快照生成的顺序根据若干个图形节点的渲染快照形成所述渲染快照集。
107.进一步地,所述处理步骤还包括:若当前节点不是图形节点时,根据当前节点的节
点类型进行对应处理,然后继续遍历下一个节点。
108.进一步地,所述处理步骤还包括:若当前节点不是图形节点,并且当前节点保存了对应渲染状态,将对应渲染状态入栈到对应类型的渲染状态栈的栈顶,继续遍历下一个节点。
109.进一步地,所述遍历步骤还包括:渲染快照集优化步骤:按照渲染快照的生成顺序依次遍历每个渲染快照,以及当对应渲染快照不是首个渲染快照并且该渲染快照的渲染状态集与前一个渲染快照的渲染状态集相同时,将该渲染快照的渲染状态集清空,直到所有的渲染快照遍历完成。
110.进一步地,所述渲染步骤还包括:取快照步骤:从渲染快照集中取出第一个渲染快照并记为当前渲染快照;
111.判断步骤:判断当前渲染快照的渲染状态集是否空,若否,则执行第一渲染步骤;若是,则执行第二渲染步骤;
112.第一渲染步骤:根据当前渲染快照的渲染状态集设置对应的渲染状态,并根据当前渲染快照的图形数据中的图形类型对当前图形节点进行渲染,然后从所述渲染快照集中取出下一个渲染快照并记为当前渲染快照,执行判断步骤;
113.第二渲染步骤:根据前一次渲染时设置的渲染状态和当前渲染快照的图形数据中的图形类型对当前图形节点进行渲染,然后从所述渲染快照集中取出下一个渲染快照并记为当前渲染快照,执行判断步骤。
114.进一步地,所述三维模型为ifc格式的bim模型;
115.所述三维模型的场景树满足以下条件:
116.所述场景树包括一个或多个路由器节点;其中一个路由器节点为场景树的根节点;
117.其中,所述路由器节点的子节点为一个或多个渲染管线节点,每个渲染管线节点根据渲染图形类型的不同设置对应渲染状态,并且分配唯一的路标值;同时,每个路由器节点的所有子节点均共享同样的子节点数据;所述渲染管线节点,有若干子节点,且渲染管线节点绑定若干渲染状态集合,其中,所述渲染状态集合包括渲染图形类型、着色器、点大小、线宽、材质、纹理贴图、深度测试、模板测试、混色、多重采样;
118.所有路标节点,存在至少一个路由器节点作为其直接或间接的父节点;路标节点中的路标值,与其父节点的子节点的路标值匹配;每个路标节点,均有若干个子节点,每个路标节点均绑定唯一路标值;所述路标值为整型类型的数值;
119.所有图形节点,保存图形数据的节点,为场景树的叶子节点,没有子节点,存在唯一的路标节点作为其直接或间接的父节点;其中,所述图形数据的类型为点、线、面中的任意一种。
120.实施例三
121.基于实施例一,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序为模型渲染程序,所述模型渲染程序被处理器执行时实现以下步骤:
122.启动步骤:启动三维模型的帧渲染并判断所述三维模型是否存在渲染快照集,若是,则执行渲染步骤;若否,则执行遍历步骤;
123.渲染步骤:从所述渲染快照集中依次取出每个图形节点的渲染快照,并根据每个
图形节点的渲染快照获取每个图形节点的渲染状态集和图形数据,进而对每个图形节点进行渲染;
124.遍历步骤:对所述三维模型的场景树中的所有节点依次遍历,以遍历得出每个图形节点,并根据每个图形节点的图形数据和渲染状态集生成对应渲染快照,进而构建得出所述三维模型的渲染快照集;所述渲染快照集包括若干个图形节点的渲染快照,每个图形节点的渲染快照包括渲染状态集和图形数据。
125.进一步地,所述遍历步骤包括:按照自上而下深度优先搜索遍历方法对所述三维模型的场景树中的所有节点依次遍历。
126.进一步地,所述按照自上而下深度优先搜索遍历方法对所述三维模型的场景树中的所有节点依次遍历时,对遍历到的每个节点执行以下步骤:
127.判断步骤:判断当前节点的节点类型,以及当当前节点为路由器节点时,执行入栈步骤;当当前节点为路标节点时,执行比对步骤;当当前节点既不是路由器节点,也不是路标节点时,执行处理步骤;
128.入栈步骤:遍历当前节点的一个子节点,并将该子节点对应的路标值存储到路标栈的栈顶,然后将该子节点记为当前节点,执行判断步骤;
129.比对步骤:判断当前节点的路标值与所述路标栈中前一次入栈的栈顶存储的路标值是否相等,若是,则继续遍历当前节点的下一个子节点并将其记为当前节点,执行判断步骤;若否,则返回当前节点的父节点继续遍历下一个节点;
130.处理步骤:判断当前节点是否图形节点时,若是,则从对应渲染状态栈中取出对应栈顶值以构成当前节点的渲染状态集,同时根据当前节点获取当前节点的图形数据,进而生成当前节点的渲染快照;
131.快照集生成步骤:直到所述三维模型的场景树中的所有节点遍历完成后,按照渲染快照生成的顺序根据若干个图形节点的渲染快照形成所述渲染快照集。
132.进一步地,所述处理步骤还包括:若当前节点不是图形节点时,根据当前节点的节点类型进行对应处理,然后继续遍历下一个节点。
133.进一步地,所述处理步骤还包括:若当前节点不是图形节点,并且当前节点保存了对应渲染状态,将对应渲染状态入栈到对应类型的渲染状态栈的栈顶,继续遍历下一个节点。
134.进一步地,所述遍历步骤还包括:渲染快照集优化步骤:按照渲染快照的生成顺序依次遍历每个渲染快照,以及当对应渲染快照不是首个渲染快照并且该渲染快照的渲染状态集与前一个渲染快照的渲染状态集相同时,将该渲染快照的渲染状态集清空,直到所有的渲染快照遍历完成。
135.进一步地,所述渲染步骤还包括:取快照步骤:从渲染快照集中取出第一个渲染快照并记为当前渲染快照;
136.判断步骤:判断当前渲染快照的渲染状态集是否空,若否,则执行第一渲染步骤;若是,则执行第二渲染步骤;
137.第一渲染步骤:根据当前渲染快照的渲染状态集设置对应的渲染状态,并根据当前渲染快照的图形数据中的图形类型对当前图形节点进行渲染,然后从所述渲染快照集中取出下一个渲染快照并记为当前渲染快照,执行判断步骤;
138.第二渲染步骤:根据前一次渲染时设置的渲染状态和当前渲染快照的图形数据中的图形类型对当前图形节点进行渲染,然后从所述渲染快照集中取出下一个渲染快照并记为当前渲染快照,执行判断步骤。
139.进一步地,所述三维模型为ifc格式的bim模型;
140.所述三维模型的场景树满足以下条件:
141.所述场景树包括一个或多个路由器节点;其中一个路由器节点为场景树的根节点;
142.其中,所述路由器节点的子节点为一个或多个渲染管线节点,每个渲染管线节点根据渲染图形类型的不同设置对应渲染状态,并且分配唯一的路标值;同时,每个路由器节点的所有子节点均共享同样的子节点数据;所述渲染管线节点,有若干子节点,且渲染管线节点绑定若干渲染状态集合,其中,所述渲染状态集合包括渲染图形类型、着色器、点大小、线宽、材质、纹理贴图、深度测试、模板测试、混色、多重采样;
143.所有路标节点,存在至少一个路由器节点作为其直接或间接的父节点;路标节点中的路标值,与其父节点的子节点的路标值匹配;每个路标节点,均有若干个子节点,每个路标节点均绑定唯一路标值;所述路标值为整型类型的数值;
144.所有图形节点,保存图形数据的节点,为场景树的叶子节点,没有子节点,存在唯一的路标节点作为其直接或间接的父节点;其中,所述图形数据的类型为点、线、面中的任意一种。
145.上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献