CN107845144A - 一种高效组织和切换OpenGL渲染状态的方法 - Google Patents
一种高效组织和切换OpenGL渲染状态的方法 Download PDFInfo
- Publication number
- CN107845144A CN107845144A CN201710600299.8A CN201710600299A CN107845144A CN 107845144 A CN107845144 A CN 107845144A CN 201710600299 A CN201710600299 A CN 201710600299A CN 107845144 A CN107845144 A CN 107845144A
- Authority
- CN
- China
- Prior art keywords
- node
- rendering
- state
- tree
- leaf
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
Landscapes
- Engineering & Computer Science (AREA)
- Architecture (AREA)
- Computer Graphics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明涉及计算机技术领域,公开了一种高效组织和切换OpenGL渲染状态的方法,包括以下步骤:步骤(1)对场景图中的存在渲染顺序值的场景节点和渲染状态属性集的场景节点进行渲染顺序树和渲染状态树形结构的建立;步骤(2)两个树形结构建立完毕以后,对渲染叶子节点进行必要的排序工作,由渲染顺序树根节点开始遍历,渲染实体节点;步骤(3)依据渲染状态树的树形结构,切换并应用该渲染叶子节点对应的OpenGL状态属性,达到某种OpenGL状态之后,进行渲染叶子节点网格数据的提交渲染。本发明通过对渲染场景节点有效的组织,建立合理可靠的树形结构,使三维渲染引擎各线程之间的压力均衡,并减少了状态属性管理的开销,渲染帧率更高,场景漫游更流畅。
Description
技术领域
本发明涉及三维渲染技术领域,特别是涉及渲染引擎中高效组织和切换OpenGL(Open Graphics Library,开放图形库)渲染状态的方法。
背景技术
通过用户给出的三维场景图形结构,在渲染的过程中,实体节点绘制之前,要进行该节点的正确渲染状态的切换,如果不进行渲染状态的管理,并没有对拥有同一状态属性集的节点进行合并,每个实体节点渲染时面临着巨大的状态搜集、切换和还原开销;如果对场景实体节点根据渲染状态属性进行过当的组织管理,那根据状态属性组织管理节点带来的开销亦严重影响了渲染引擎的效率;上述两种情况都会造成渲染引擎所渲染的场景出现卡顿甚至明显的跳帧行为,极大的影响了用户的视觉体验。
发明内容
本发明针对现有技术中渲染引擎在渲染较大场景时出现的渲染效率低下、卡顿甚至跳帧现象,提供一种高效组织和切换OpenGL渲染状态的方法。
为解决上述技术问题,本发明提出了一种高效组织和切换OpenGL渲染状态的方法,其特征在于,包括如下步骤:
步骤(1)、将场景图形结构裁剪为包含渲染顺序数值的场景节点和渲染状态属性集的场景节点,并得到渲染叶子节点,其中,基于所述渲染顺序数值建立第一渲染顺序树,基于所述渲染状态属性集建立第一渲染状态树;
步骤(2)、对于所述第一渲染顺序树进行透明渲染处理;将需要排序的所述渲染叶子节点从第一渲染状态树转移到第一渲染顺序树中,然后根据所述渲染叶子节点的距离值进行排序操作,形成第二渲染顺序树;摘除渲染叶子节点的渲染状态树形成第二渲染状态树。
步骤(3)、对于步骤(2)中建立的所述第二渲染顺序树和第二渲染状态树进行依次遍历,遍历过程中搜集到的状态属性,即为渲染当前渲染叶子节点所必要的状态属性,将这些渲染状态存放在栈结构,渲染引擎依据栈结构切换必要的渲染状态后,进行实体节点中网格数据的提交和绘制,实现场景节点的渲染状态和网格数据的绘制。
其中,所述步骤(1)包括将所述第一渲染顺序树与所述第一渲染状态树进行关联。
其中,所述步骤(2)根据所述渲染叶子节点的距离值进行排序操作具体包括按渲染叶子节点离相机的距离值进行由远到近排序。
其中,所述步骤(3)包括通过回溯查找算法,搜集并切换该路由上的OpenGL状态属性,完成当前渲染叶子节点所需的状态属性的切换。
其中,所述关联包括:
步骤(11)、所述第一渲染顺序树和第一渲染状态树均具有根节点和当前节点,当前节点的起始指向为根节点;
步骤(12)、对所述场景图形结构进行裁剪遍历,依据从场景节点中提取的渲染顺序值,新建渲染顺序节点,并将该渲染顺序节点作为当前渲染顺序节点的子节点,插入到当前渲染顺序节点的子节点链表中;然后将新建节点作为渲染顺序树的当前渲染顺序节点;
步骤(13)、同时从所述场景节点中提取渲染状态属性集,如果存在状态属性集,新建渲染状态节点,并将该节点作为当前渲染状态节点的子节点,插入到当前渲染状态节点的子节点链表中;然后将新建节点作为渲染状态树的当前渲染状态节点;
步骤(14)、当裁剪操作裁剪到实体节点时;在执行步骤(12)步骤(13)操作的之后,依据实体节点中包含的网格实体和变换矩阵信息,新建渲染叶子节点,将该渲染叶子节点插入到步骤(13)的当前渲染状态节点的渲染叶子链表中;并将该当前渲染状态节点插入到步骤(12)的当前渲染顺序节点的渲染状态节点链表中;
步骤(15)根据场景图在裁剪器的裁剪过程中,当前渲染顺序节点和当前渲染状态节点进行同步下移和回溯操作,当场景图被裁剪完毕以后,所述第一渲染顺序树和第一渲染状态树关联完毕。
其中所述步骤(2)具体包括:
步骤(21)在裁剪阶段完成之后,进行所述第一渲染顺序树的排序操作,当遇到渲染顺序节点的渲染顺序值为5时,表明该节点下所挂接的渲染实体为透明或半透明实体,同时,将该渲染顺序节点下的渲染状态节点链表中所有渲染状态节点的渲染叶子节点转移到渲染顺序节点的渲染叶子节点链表中;
步骤(22)对该渲染顺序节点的渲染叶子节点链表中节点按照在场景中离相机的距离值,由大到小进行排序操作;
步骤(23)在所述第一渲染顺序树中先渲染不透明节点,再渲染透明或者半透明节点;再对透明或者半透明节点进行了距离的排序,先渲染距离远的节点,后渲染距离近的节点。
步骤(24)到达渲染阶段之后,如果渲染顺序节点的渲染叶子链表里有节点数据,便可直接执行后面步骤(3)的进行依次遍历收集实体节点需要的渲染状态操作。
其中,所述步骤(3)具体包括:
步骤(31)从渲染顺序值最低的节点开始依次渲染该节点下对应的渲染状态节点链表中的渲染状态节点;
步骤(32)到达所述第二渲染状态树的第一状态属性集的渲染状态节点,由该节点开始进行状态属性的搜集操作;状态属性收集容器为一个图栈结构;
步骤(33)、根据是否有参考节点进行相应操作。
其中,所述步骤(33)包括,如果没有参考节点,则:
步骤(331)回溯到所述第二渲染状态树的根节点,并由根节点开始,根据回溯路径进行状态属性的收集操作;
步骤(332)提取默认状态属性集并分解,各自压入到所述图结构中相应的状态属性类别所对应的栈结构的栈顶;
步骤(333)提取所述第二渲染状态树的第零状态属性集,将(面裁剪,通道0)类别的状态属性压入到图结构中的(面裁剪,通道0)类别所对应的栈结构的栈顶;
步骤(334)提取所述第二渲染状态树的所述第一状态属性集,分别将(材质,通道0)和(纹理,通道0)类别的状态属性压入到所述图结构中(材质,通道0)和(纹理,通道0)类别所对应的所述栈结构的栈顶;
步骤(335)在步骤(332)、步骤(333)、步骤(334)步骤中,每执行一步栈结构操作,将对应的改变标识置为真;最后遍历图结构,取出各类别对应的栈结构的栈顶元素,进行OpenGL状态属性的应用,然后进行变换矩阵的应用和网格几何体的绘制;完成第一个渲染叶子节点的绘制操作。
其中,所述步骤(33)包括,如果有参考节点,则:
步骤(335)完成之后,取该渲染叶子节点作为参考节点,对比即将要渲染的渲染叶子节点;查找这两个节点的第一个共同父节点;
步骤(336)查找两个渲染叶子节点的爷节点是否相同;如果相同,去判断该两个子节点的父节点是否相同,父节点如果也相同,则不进行图栈结构中栈结构状态属性的变化,如果父节点不相同,只进行父节点状态差异的切换;
步骤(337)如果不相同,判断爷节点是否在状态树的同一层,如果不在,调节层级比较高的节点的层级,使两个爷节点处于同一状态树层级中;从而依次往上查找第一个渲染叶子节点共同的父节点;
步骤(338)查找到两个渲染叶子节点共同的父节点之后,依次进行由前渲染叶节点到该父节点路径上状态属性的出栈操作步骤;然后进行由该父节点到当前渲染叶节点路径上状态属性的入栈操作步骤;
步骤(339)在渲染时,依次遍历步骤(338)中图栈结构,获得栈结构和变标识,如果改变标识为真,则取出栈结构的栈顶元素进行该状态属性的状态切换;如果改变标识为假,不执行操作;遍历完成之后,进行渲染实体几何数据的渲染。
本发明解决了三维场景中渲染状态频繁切换和状态属性管理带来的巨大开销等难题,所造成的渲染的场景出现卡顿甚至明显的跳帧的问题,大大提高了用户体验感受,使三维渲染引擎在渲染大场景时,帧率会明显提高,渲染状态切换更有序,效率更高。未进行上述方法的处理时,渲染较大的场景会出现帧率明显较低,使用上述发明方法之后。
附图说明
图1为与本发明实施例一致的组织和切换OpenGL渲染状态的方法流程;
图2为与本发明实施例一致的裁剪场景图;
图3为与本发明实施例一致的顺序树与状态树关联图;
图4为与本发明实施例一致的顺序树排序后与状态树关联图;
图5为与本发明实施例一致的节点绘制图栈结构操作图;
图6为未使用本发明的方法的渲染帧率图;
图7为与本发明实施例一致的使用本发明方法的渲染帧率图。
具体实施方式
下面结合附图与实施例对本发明作进一步详细描述。
如图1所示,为与本发明实施例一致的组织和切换OpenGL渲染状态的方法流程图。
通过步骤(1)把被裁剪后的场景图形结构进行组织,建立两种新的树形结构,并在这两种树形结构中进行了巧妙的关联;
如图2、3所示,关联过程如下所述:
步骤(11)渲染顺序树和渲染状态树均具有根节点和当前节点,当前节点的起始指向为根节点;
步骤(12)对场景图进行裁剪遍历,依据从场景节点中提取的渲染顺序值,新建渲染顺序节点,并将该渲染顺序节点作为当前渲染顺序节点的子节点,插入到当前渲染顺序节点的子节点链表中;然后将新建节点作为渲染顺序树的当前渲染顺序节点;
步骤(13)同时试图从该场景节点中提取的渲染状态属性集,如果存在状态属性集,新建渲染状态属性节点,并将该节点作为当前渲染状态属性节点的子节点,插入到当前渲染属性节点的子节点链表中;然后将新建节点作为渲染状态树的当前渲染状态节点;
步骤(14)当裁剪操作裁剪到实体节点时;在执行步骤(12)步骤(13)操作的之后,依据实体节点中包含的网格实体和变换矩阵信息,新建渲染叶子节点,将该渲染叶子节点插入到步骤(13)步骤的当前渲染状态节点的渲染叶子链表中;并将该当前渲染状态节点插入到步骤(12)步骤的当前渲染顺序节点的渲染状态节点链表中;
步骤(15)到此为止,完成了渲染顺序树和渲染状态树的巧妙结合;根据场景图在裁剪器的裁剪过程中,当前渲染顺序节点和当前渲染状态节点进行同步的下移和回溯操作,当场景图被裁剪完毕以后,渲染顺序树和渲染状态树建立完毕。
如图4所示,渲染引擎中,为了减少状态属性切换的开销,尽量采用状态属性排序方式进行渲染,即按照状态树中渲染叶子节点链表依次进行渲染叶子节点的渲染操作;当遇到渲染透明或者半透明物体时,要进行距离排序,将实体节点由远到近依次进行渲染,这样便可以保证比透明或半透明实体节点远的节点先渲染,从而达到正确的渲染效果;
步骤(21)在裁剪阶段完成之后,进行渲染顺序树的排序操作,当遇到渲染顺序节点的渲染顺序值为5时,表明该节点下所挂接的渲染实体为透明或半透明实体,为了达到渲染的正确性,将该渲染顺序节点下的渲染状态节点链表中,所有渲染状态节点的渲染叶子节点摘移到渲染顺序节点的渲染叶子节点链表中;图中状态属性集4节点便无法访问其下渲染叶子节点,对应的渲染叶子节点已经移到了左边渲染顺序节点下,但该渲染叶子节点的父亲依旧是状态属性集4所代表的状态属性节点;
步骤(22)然后对该渲染顺序节点的渲染叶子节点链表中节点按照在场景中离相机的距离值,由大到小进行排序操作;
步骤(23)到达渲染阶段之后,如果渲染顺序节点的渲染叶子链表里有节点数据,便可直接执行后面步骤(3)的渲染操作;
步骤(24)渲染顺序树中保证了先渲染不透明节点,再渲染透明或者半透明节点;步骤(22)中又对透明或者半透明节点进行了距离的排序,先渲染距离远的节点,后渲染距离近的节点;这样表充分的保证了透明效果的实现。
如图5所示,三维渲染引擎进入渲染阶段,该阶段由渲染顺序树根节点开始,采用深度优先遍历算法进行渲染;
步骤(31)当渲染到左下方渲染顺序值为-5的节点时,依次渲染顺序节点下的渲染状态节点链表中的渲染状态节点;
步骤(32)此时到达渲染状态树的状态属性集1的渲染状态节点,由该节点开始进行状态属性的搜集操作;回溯到渲染状态树的根节点,并由根节点开始,根据回溯路径进行状态属性的收集操作;状态属性收集容器为一个图栈结构;首先将默认的状态属性集分解,各自压入到图结构中相应的状态属性类别所对应的栈结构的栈顶,
步骤(33)然后提取渲染状态树的状态属性集0,将(面裁剪,通道0)类别的状态属性压入到图结构中(面裁剪,通道0)类别所对应的栈结构的栈顶;
步骤(34)再提取渲染状态树中状态属性集1,分别将(材质,通道0)和(纹理,通道0)类别的状态属性压入到图结构中(材质,通道0)和(纹理,通道0)类别所对应的栈结构的栈顶;
步骤(35)在步骤(32)、步骤(33)、步骤(34)步骤中,每执行一步栈结构操作,将对应的变标识置为真;
步骤(36)最后遍历图结构,取出各类别对应的栈结构的栈顶元素,进行OpenGL状态属性的应用,然后进行变换矩阵的应用和网格几何体的绘制;此时完成了第一个节点的绘制操作。
步骤(37)、步骤(36)完成之后,取渲染叶子节点作为参考节点,对比即将要渲染的渲染叶子节点;查找这两个节点的第一个共同父节点,查找步骤简述为:
步骤(371)首先查找两个渲染叶子节点的爷节点是否相同;
步骤(372)如果相同,去判断该两个子节点的父节点是否相同,父节点如果也相同,则不进行图栈结构中栈结构状态属性的变化,如果父节点不相同,这只进行父节点状态差异的切换;
步骤(373)如果不相同,判断爷节点是否在渲染状态树的同一层,如果不在,调节层级比较高的节点的层级,使两个爷节点处于同一状态树层级中;从而依次往上查找第一个渲染叶子节点共同的父节点;
步骤(374)查找到两个渲染叶子节点共同的父节点之后,依次进行由前渲染叶节点到该父节点路径上状态属性的出栈操作步骤(渲染状态的还原);然后进行由该父节点到当前渲染叶节点路径上状态属性的入栈操作步骤(渲染状态的设置);
步骤(375)在渲染时,依次遍历步骤(36)中图栈结构,获得栈结构和改变标识,如果改变标识为真,则取出栈结构的栈顶元素进行该状态属性的状态切换;如果改变标识为假,不执行操作。
步骤(376)遍历完成之后,进行渲染实体几何数据的渲染。
一帧渲染阶段完成以后,进行步骤(3)中图结构和栈结构的清空操作;完成渲染的收尾阶段。
实施例1
如图6、7所示,使用模型数据进行帧率的测试,面积约为2.7x1.8平方公里;对该片数据进行使用该发明前后渲染效果的对比,设置同样的数据,设置同样的视点位置步骤(均为模型正上方1250米),等待相同的加载时间步骤(均为等待模型加载3分钟);看帧率对比效果:
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
常用术语解释:
实体节点:渲染中能够可见的实物,比如一棵树;网格和纹理混总到一虚拟节点上;
场景节点:可以为实体节点,带有变换信息的编组节点,场景相机节点等;
场景图:三维渲染中,由场景节点组成的由上而下的一棵节点图形结构;
渲染顺序节点:从场景节点中提取出渲染顺序值,以该顺序值为依据,生成对应的一类节点;
渲染顺序树:由渲染顺序节点组成的由上而下的一棵节点树形结构;
状态属性:用于标识绘制状态的OpenGL状态信息;例如面片是否采用双面绘制;
状态属性集:由多个状态属性组成的集合;
渲染状态节点:从场景节点中提取出状态属性集;并由该状态属性集为依据,生成对应的一类节点;
渲染状态树:由渲染状态节点组成的由上而下的一棵节点树形结构;
渲染叶子节点:挂接在渲染状态树末端的节点,用于存储网格数据和变换矩阵的节点;
子节点:同类节点中能建立父子关系的节点组,组内上层次节点为父节点,下层次节点为子节点。
Claims (9)
1.一种高效组织和切换OpenGL渲染状态的方法,其特征在于,包括如下步骤:
步骤(1)、将场景图形结构裁剪为包含渲染顺序数值的场景节点和渲染状态属性集的场景节点,并得到渲染叶子节点,其中,基于所述渲染顺序数值建立第一渲染顺序树,基于所述渲染状态属性集建立第一渲染状态树;
步骤(2)、对于所述第一渲染顺序树进行透明渲染处理;将需要排序的所述渲染叶子节点从第一渲染状态树转移到第一渲染顺序树中,然后根据所述渲染叶子节点的距离值进行排序操作,形成第二渲染顺序树;摘除渲染叶子节点的渲染状态树形成第二渲染状态树。
步骤(3)、对于步骤(2)中建立的所述第二渲染顺序树和第二渲染状态树进行依次遍历,遍历过程中搜集到的状态属性,即为渲染当前渲染叶子节点所必要的状态属性,将这些渲染状态存放在栈结构,渲染引擎依据栈结构切换必要的渲染状态后,进行实体节点中网格数据的提交和绘制,实现场景节点的渲染状态和网格数据的绘制。
2.根据权利要求1所述的一种高效组织和切换OpenGL渲染状态的方法,其中所述步骤(1)包括将所述第一渲染顺序树与所述第一渲染状态树进行关联。
3.根据权利要求1所述的一种高效组织和切换OpenGL渲染状态的方法,其中所述步骤(2)根据所述渲染叶子节点的距离值进行排序操作具体包括按渲染叶子节点离相机的距离值进行由远到近排序。
4.根据权利要求1所述的一种高效组织和切换OpenGL渲染状态的方法,其中所述步骤(3)包括通过回溯查找算法,搜集并切换该路由上的OpenGL状态属性,完成当前渲染叶子节点所需的状态属性的切换。
5.根据权利要求2所述的一种高效组织和切换OpenGL渲染状态的方法,其中所述关联包括:
步骤(11)、所述第一渲染顺序树和第一渲染状态树均具有根节点和当前节点,当前节点的起始指向为根节点;
步骤(12)、对所述场景图形结构进行裁剪遍历,依据从场景节点中提取的渲染顺序值,新建渲染顺序节点,并将该渲染顺序节点作为当前渲染顺序节点的子节点,插入到当前渲染顺序节点的子节点链表中;然后将新建节点作为渲染顺序树的当前渲染顺序节点;
步骤(13)、同时从所述场景节点中提取渲染状态属性集,如果存在状态属性集,新建渲染状态节点,并将该节点作为当前渲染状态节点的子节点,插入到当前渲染状态节点的子节点链表中;然后将新建节点作为渲染状态树的当前渲染状态节点;
步骤(14)、当裁剪操作裁剪到实体节点时;在执行步骤(12)步骤(13)操作的之后,依据实体节点中包含的网格实体和变换矩阵信息,新建渲染叶子节点,将该渲染叶子节点插入到步骤(13)的当前渲染状态节点的渲染叶子链表中;并将该当前渲染状态节点插入到步骤(12)的当前渲染顺序节点的渲染状态节点链表中;
步骤(15)根据场景图在裁剪器的裁剪过程中,当前渲染顺序节点和当前渲染状态节点进行同步下移和回溯操作,当场景图被裁剪完毕以后,所述第一渲染顺序树和第一渲染状态树关联完毕。
6.根据权利要求3所述的一种高效组织和切换OpenGL渲染状态的方法,其中所述步骤(2)包括:
步骤(21)在裁剪阶段完成之后,进行所述第一渲染顺序树的排序操作,当遇到渲染顺序节点的渲染顺序值为5时,表明该节点下所挂接的渲染实体为透明或半透明实体,同时,将该渲染顺序节点下的渲染状态节点链表中所有渲染状态节点的渲染叶子节点转移到渲染顺序节点的渲染叶子节点链表中;
步骤(22)对该渲染顺序节点的渲染叶子节点链表中节点按照在场景中离相机的距离值,由大到小进行排序操作;
步骤(23)在所述第一渲染顺序树中先渲染不透明节点,再渲染透明或者半透明节点;再对透明或者半透明节点进行了距离的排序,先渲染距离远的节点,后渲染距离近的节点。
步骤(24)到达渲染阶段之后,如果渲染顺序节点的渲染叶子链表里有节点数据,便可直接执行后面步骤(3)的进行依次遍历收集实体节点需要的渲染状态操作。
7.根据权利要求4所述的一种高效组织和切换OpenGL渲染状态的方法,其中所述步骤(3)包括:
步骤(31)从渲染顺序值最低的节点开始依次渲染该节点下对应的渲染状态节点链表中的渲染状态节点;
步骤(32)到达所述第二渲染状态树的第一状态属性集的渲染状态节点,由该节点开始进行状态属性的搜集操作;状态属性收集容器为一个图栈结构;
步骤(33)、根据是否有参考节点进行相应操作。
8.根据权利要求4所述的一种高效组织和切换OpenGL渲染状态的方法,其中所述步骤(33)包括,如果没有参考节点,则:
步骤(331)回溯到所述第二渲染状态树的根节点,并由根节点开始,根据回溯路径进行状态属性的收集操作;
步骤(332)提取默认状态属性集并分解,各自压入到所述图结构中相应的状态属性类别所对应的栈结构的栈顶;
步骤(333)提取所述第二渲染状态树的第零状态属性集,将(面裁剪,通道0)类别的状态属性压入到图结构中的(面裁剪,通道0)类别所对应的栈结构的栈顶;
步骤(334)提取所述第二渲染状态树的所述第一状态属性集,分别将(材质,通道0)和(纹理,通道0)类别的状态属性压入到所述图结构中(材质,通道0)和(纹理,通道0)类别所对应的所述栈结构的栈顶;
步骤(335)在步骤(332)、步骤(333)、步骤(334)步骤中,每执行一步栈结构操作,将对应的改变标识置为真;最后遍历图结构,取出各类别对应的栈结构的栈顶元素,进行OpenGL状态属性的应用,然后进行变换矩阵的应用和网格几何体的绘制;完成第一个渲染叶子节点的绘制操作。
9.根据权利要求4所述的一种高效组织和切换OpenGL渲染状态的方法,其中所述步骤(33)包括,如果有参考节点,则:
步骤(335)完成之后,取该渲染叶子节点作为参考节点,对比即将要渲染的渲染叶子节点;查找这两个节点的第一个共同父节点;
步骤(336)查找两个渲染叶子节点的爷节点是否相同;如果相同,去判断该两个子节点的父节点是否相同,父节点如果也相同,则不进行图栈结构中栈结构状态属性的变化,如果父节点不相同,只进行父节点状态差异的切换;
步骤(337)如果不相同,判断爷节点是否在状态树的同一层,如果不在,调节层级比较高的节点的层级,使两个爷节点处于同一状态树层级中;从而依次往上查找第一个渲染叶子节点共同的父节点;
步骤(338)查找到两个渲染叶子节点共同的父节点之后,依次进行由前渲染叶节点到该父节点路径上状态属性的出栈操作步骤;然后进行由该父节点到当前渲染叶节点路径上状态属性的入栈操作步骤;
步骤(339)在渲染时,依次遍历步骤(338)中图栈结构,获得栈结构和变标识,如果改变标识为真,则取出栈结构的栈顶元素进行该状态属性的状态切换;如果改变标识为假,不执行操作;遍历完成之后,进行渲染实体几何数据的渲染。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710600299.8A CN107845144B (zh) | 2017-07-21 | 2017-07-21 | 一种高效组织和切换OpenGL渲染状态的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710600299.8A CN107845144B (zh) | 2017-07-21 | 2017-07-21 | 一种高效组织和切换OpenGL渲染状态的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107845144A true CN107845144A (zh) | 2018-03-27 |
CN107845144B CN107845144B (zh) | 2021-04-02 |
Family
ID=61682824
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710600299.8A Active CN107845144B (zh) | 2017-07-21 | 2017-07-21 | 一种高效组织和切换OpenGL渲染状态的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107845144B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109558159A (zh) * | 2018-12-11 | 2019-04-02 | 网易(杭州)网络有限公司 | 游戏中用户界面的更新方法和装置 |
CN111524445A (zh) * | 2019-02-01 | 2020-08-11 | 阿里巴巴集团控股有限公司 | 地图生成方法、装置、电子设备及可读存储介质 |
CN111803943A (zh) * | 2020-07-21 | 2020-10-23 | 网易(杭州)网络有限公司 | 美术渲染效果控制的方法、装置及服务器 |
CN112732395A (zh) * | 2021-01-27 | 2021-04-30 | 广州银汉科技有限公司 | 一种基于OpenGL的透明物体的延迟渲染方法 |
CN113923519A (zh) * | 2021-11-11 | 2022-01-11 | 深圳万兴软件有限公司 | 视频渲染方法、装置、计算机设备及存储介质 |
CN115439608A (zh) * | 2022-09-01 | 2022-12-06 | 广州南方智能技术有限公司 | 基于快照与多路由的模型渲染方法、装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8400444B2 (en) * | 2005-12-08 | 2013-03-19 | Agency 9AB | Method to render a root-less scene graph with a user controlled order of rendering |
CN105069020A (zh) * | 2015-07-14 | 2015-11-18 | 国家信息中心 | 自然资源数据三维可视化方法和系统 |
CN105843603A (zh) * | 2016-03-17 | 2016-08-10 | 广州爱九游信息技术有限公司 | 图形处理的方法及装置 |
-
2017
- 2017-07-21 CN CN201710600299.8A patent/CN107845144B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8400444B2 (en) * | 2005-12-08 | 2013-03-19 | Agency 9AB | Method to render a root-less scene graph with a user controlled order of rendering |
CN105069020A (zh) * | 2015-07-14 | 2015-11-18 | 国家信息中心 | 自然资源数据三维可视化方法和系统 |
CN105843603A (zh) * | 2016-03-17 | 2016-08-10 | 广州爱九游信息技术有限公司 | 图形处理的方法及装置 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109558159A (zh) * | 2018-12-11 | 2019-04-02 | 网易(杭州)网络有限公司 | 游戏中用户界面的更新方法和装置 |
CN109558159B (zh) * | 2018-12-11 | 2022-02-15 | 网易(杭州)网络有限公司 | 游戏中用户界面的更新方法和装置 |
CN111524445A (zh) * | 2019-02-01 | 2020-08-11 | 阿里巴巴集团控股有限公司 | 地图生成方法、装置、电子设备及可读存储介质 |
CN111524445B (zh) * | 2019-02-01 | 2022-04-29 | 阿里巴巴集团控股有限公司 | 地图生成方法、装置、电子设备及可读存储介质 |
CN111803943A (zh) * | 2020-07-21 | 2020-10-23 | 网易(杭州)网络有限公司 | 美术渲染效果控制的方法、装置及服务器 |
CN111803943B (zh) * | 2020-07-21 | 2024-04-30 | 网易(杭州)网络有限公司 | 美术渲染效果控制的方法、装置及服务器 |
CN112732395A (zh) * | 2021-01-27 | 2021-04-30 | 广州银汉科技有限公司 | 一种基于OpenGL的透明物体的延迟渲染方法 |
CN112732395B (zh) * | 2021-01-27 | 2021-08-17 | 广州银汉科技有限公司 | 一种基于OpenGL的透明物体的延迟渲染方法 |
CN113923519A (zh) * | 2021-11-11 | 2022-01-11 | 深圳万兴软件有限公司 | 视频渲染方法、装置、计算机设备及存储介质 |
CN113923519B (zh) * | 2021-11-11 | 2024-02-13 | 深圳万兴软件有限公司 | 视频渲染方法、装置、计算机设备及存储介质 |
CN115439608A (zh) * | 2022-09-01 | 2022-12-06 | 广州南方智能技术有限公司 | 基于快照与多路由的模型渲染方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107845144B (zh) | 2021-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107845144A (zh) | 一种高效组织和切换OpenGL渲染状态的方法 | |
CN104112007B (zh) | 一种影像层次分割结果的数据存储、组织及检索方法 | |
CN112529768B (zh) | 一种基于生成对抗网络的服装编辑和生成方法 | |
CN108109204A (zh) | 一种制作和渲染大规模地形的方法及系统 | |
CN104268580B (zh) | 一种基于场景分类的类漫画布局图像管理方法 | |
CN101320487B (zh) | 一种用于火灾模拟的场景预处理方法 | |
CN102165487A (zh) | 前景区提取程序、前景区提取装置以及前景区提取方法 | |
CN106528929A (zh) | 一种基于动态加工元—建模树矩阵的中间工序模型动态显示及轻量化存储方法 | |
CN109165293A (zh) | 一种面向时尚领域的专业数据标注方法与程序 | |
CN106815320A (zh) | 基于拓展三维直方图的调研大数据可视化建模方法及系统 | |
Wei et al. | Segmentation and synthesis of embroidery art images based on deep learning convolutional neural networks | |
CN107491814B (zh) | 一种用于知识推送的过程案例分层知识模型构建方法 | |
CN110147840A (zh) | 基于显著性无监督部件划分的弱结构物体细粒度分类方法 | |
CN102346915B (zh) | 电压等高曲面图形快速生成方法 | |
CN107515979A (zh) | 一种对大批量工件模型数据的处理方法及处理系统 | |
CN106780095A (zh) | 服装技术信息系统 | |
Ponciano et al. | Graph-based interactive volume exploration | |
CN112306730A (zh) | 基于历史项目伪标签生成的缺陷报告严重程度预测方法 | |
CN113807463B (zh) | 一种基于Faster-RCNN对BI图标题检测的方法 | |
CN117171381B (zh) | 基于结构化数据表的交互式图数据构建方法、系统及装置 | |
CN112488015B (zh) | 面向智慧工地的目标检测方法及系统 | |
Zhang | Research into technology decision methods of CAPP artificial intelligence | |
Wang et al. | Image Extraction of Mural Line Drawing Based on Color Image Segmentation Algorithm | |
Dai | Application Research of Computer Artificial Intelligence Technology in Dong Embroidery APP Mini Program | |
Bao et al. | The calculation and the drawing of equivalent sections of model-based 3D graphics |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |