三维网格模型透明绘制的方法及其系统的制作方法

文档序号:6376540阅读:253来源:国知局
专利名称:三维网格模型透明绘制的方法及其系统的制作方法
技术领域
本发明涉及计算机绘图技术领域,尤其涉及ー种三维网格模型透明绘制的方法及其系统。·
背景技术
计算机图形图像绘制技术是指ー种使用数学算法将ニ维或三维图形转化为计算显示器的栅格形式的技木。该技术大量应用在3D游戏和动画,计算机辅助设计,电影特效,数字医学等领域。三维空间的几何模型简称为三维模型,主要有线框模型、表面模型和实体模型三种表示方法,其中表面模型运用最为广泛,网格模型是表面模型的ー种常用形式。传统的网格绘制技术中,都是基于光栅化的方法,先把网格的所有三角形投影到视平面然后根据屏幕的分辨率进行离散化得到片元,经过一定的判断条件,最終得到屏幕上每个像素的像素值。由于使用图形学硬件绘制的过程中,绘制的顺序不是虚拟照相机观察的方向从前往后或从后往前按顺序进行绘制,而是ー种乱序的绘制。对于不透明的网格绘制,在这个过程中使用z缓冲区(z-buffer)来记录片元距离视平面的距离,取最靠近视平面的片元作为屏幕的像素输出,以此来解决网格之间的遮挡问题。而对于透明或半透明的网格,使用传统图形硬件基于乱序的绘制会引起透明网格多个片元合成计算到屏幕最終像素的合成顺序不正确,最終导致绘制出的网格之间的层次关系不正确。现有处理网格透明绘制上常见的是使用逐层深度剥离(Depth Peeling)以及在此基础上改进的多种增强深度剥离的方法,如“在高深度复杂性场景中绘制透明面的系统和方法”中的混合型层剥离和连贯层剥离两种方法以及“同时遮蔽透明度图形处理”、“倍増遮蔽透明度图形处理”中使用多采样技术多次迭代绘制合成透明效果。深度剥离对网格数据根据当前视角的深度,从近到远或从远到近逐层分离,这种方案缺点在于透明显示的精度不足,有固定的深度层数限制,如果很多三角网格的片断在同一层,深度剥离的效果很差,导致绘制的透明效果时显示不出网格之间的层次结构 ’另外,当处理大規模的网格数据时,由于使用传统图形渲染管线,毎次剥离需要对传统的Z深度缓存区及模版缓存区进行读写,所以毎次只能剥离1-2层,完成最終的绘制需要多次剥离和绘制操作,绘制速度慢,效率低。即使增强的深度剥离技术如“混合型层剥离”及“连贯层剥离”先对ー些面进行预排序或对模型空间预排序,減少乱序的面的数量,但仍不能避免使用传统图形渲染管线及传统的图形缓冲区进行绘制来实现深度剥离这一基本步骤,因此每次只能剥离少数面,需要多次剥离才能达到理想的效果,所以效率仍不能满足需求。而使用多采样技术的透明效果绘制,使用多采样技术提高了深度剥离面的数量和效率,但每次剥离仍然对面的数量有限制,受限于图形硬件对多采样技术中每个像素多采样数量,仍然需要多次迭代绘制及缓冲区交换数据才能得到最終結果,对于复杂深度的网格模型的透明绘制,效率依然不能满足需求。综上可知,现有的三维网格模型透明绘制的技术在实际使用上,显然存在不便与缺陷,所以有必要加以改迸。

发明内容
针对上述的缺陷,本发明的目的在于提供ー种三维网格模型透明绘制的方法及其系统,以提高三维网格模型透明绘制的精度和速度。为了实现上述目的,本发明提供ー种三维网格模型透明绘制的方法,所述方法包括如下步骤A、在三维网格模型的绘制区域每个像素的位置使用链表和/或固定数组保存其当前位置上的片元数据;B、将所有的所述链表根据所述片元的深度进行排序;C、对已排序的所述片元的属性信息进行合成,获得所述每个像素的顔色值;D、将所述每个像素位置上的所述像素的顔色值复制到显示缓冲区,在显示窗ロ显示所述三维网格模型。根据所述的方法,所述步骤A包括Al、对所述三维网格模型的绘制进行初始化;A2、输入所述三维网格模型,并进行光栅化处理,获得所述每个像素的位置的片元的数据;A3、对每个所述片元进行并行处理,使每个所述片元存储在共享存储纹理内;A4、查看所述片元进行并行处理的結果,井根据剩余的所述片元的数量进行相应的处理。根据所述的方法,所述步骤Al包括All、将每个像素对应的存储在所有所述片元的链表共享的存储区域;A12、建立ー个与所述显示窗ロ分辨率一致的表头ニ维纹理;A13、建立ー个与所述显示窗ロ分辨率一致的信号量ニ维纹理;A14、初始化所述三维网格模型的全局片元计算器。根据所述的方法,所述步骤A3包括A31、根据当前所述像素位置,读取所述信号量ニ维纹理对应位置的数值,井根据所述数值执行相应的操作;A32、根据当前所述片元对应的像素位置和所述全局片元计算器的读数,将所述片元的相关信息以及在所述片元在当前像素位置上链表的第一元素在所述链表共享的存储区域的位置信息存储在所述链表共享的存储区域;A33、修改所述表头ニ维纹理,在对应的像素位置上改写为所述链表共享的存储区域的所述片元的位置信息;A34、将所述信号量置为0,开放对当前所述链表的控制;A35、将所述片元从图形处理中去除。根据所述的方法,在所述步骤Al中对三维网格模型的绘制区域采用图形处理器中的纹理进行存储;在所述步骤A3中使用片断着色器对每个所述片元进行并行处理;在所述步骤A4中查询所述片断着色器处理结果,在有剩下未被擦除的片元时,增
5加所述共享存储纹理的存储空间;在没有剩下未被擦除的片元时,将所有所述片元存储到对应的像素位置的链表内。 根据所述的方法,所述链表共享的存储区域采用图形处理器中的纹理进行存储;所述链表共享的存储区域包括数据部分和指针部分;所述片元的相关信息包括所述片元的顔色、不透明度或者深度。根据所述的方法,所述步骤B包括BI、使用所述片断着色器并行遍历每个像素位置上对应的链表,并存储在ー个临时缓存数组中;B2、使用所述片断着色器对每个链表的临时缓存数组中的片元根据其深度进行排序。根据所述的方法,所述步骤BI包括B11、所述片断着色器读取所述每个像素位置链表头部的表头ニ维纹理,获得所述链表的头部信息;B12、为所述每条链表新创建ー个临时片元存储区,存储每个链表的所有片元;B13、依次读取每个所述链表中元素,将所述元素中的片元数据复制到所述临时片元存储区中。根据所述的方法,所述链表和/或固定数组保存其当前位置上的片元数据时将基于相同像素位置的片元作为ー个片元集合保存。为了实现本发明的另ー发明目的,本发明还提供了ー种用于实现上述任一项所述的方法的系统,所述系统包括保存模块,用于在三维网格模型的绘制区域每个像素的位置使用链表和/或固定数组保存其当前位置上的片元数据;排序模块,用于将所有的所述链表根据所述片元的深度进行排序;获取模块,用于对已排序的所述片元的属性信息进行合成,获得所述每个像素的颜色值;显示模块,用于将所述每个像素位置上的所述像素的顔色值复制到显示缓冲区,在显示窗ロ显示所述三维网格模型。本发明通过使用了可动态调整大小的链表来存储每个像素位置上的片元数据,提高了三维网格模型透明显示时的精度;另外,通过使用片断着色器对片元进行并行存储、排序及合成的方法,提高了绘制的速度,也増加了数据的吞吐量,在输入大規模的网格数据时,仍能保持绘制的实时性。


图I是本发明第一实施例提供的三维网格模型透明绘制的系统结构示意图;图2是本发明第二实施例提供的三维网格模型透明绘制的方法;图3A是本发明一个实施例提供的肝脏及周边血管网格模型透明绘制前效果图;图3B是本发明一个实施例提供的肝脏及周边血管网格模型透明绘制后效果图;图4A是本发明一个实施例提供的龙模型透明绘制前效果图;图4B是本发明一个实施例提供的龙模型透明绘制后效果图5A是本发明一个实施例提供的女神模型透明绘制前效果图;图5B是本发明一个实施例提供的女神模型透明绘制后效果图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进ー步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。參见图1,在本发明的第一实施例中,提供了三维网格模型透明绘制的系统100,所述系统包括保存模块10,用于在三维网格模型的绘制区域每个像素的位置使用链表和/或固定数组保存其当前位置上的片元数据;排序模块20,用于将所有的所述链表根据所述片元的深度进行排序;获取模块30,用于对已排序的所述片元的属性信息进行合成,获得所述每个像素的颜色值;显示模块40,用于将所述每个像素位置上的所述像素的顔色值复制到显示缓冲区,在显示窗ロ显示所述三维网格模型。在该实施中,提出了ー种三维网格模型透明绘制的系统100,利用该三维网格模型透明绘制的系统100进行三维网格模型透明绘制,无需多次迭代绘制,无需进行深度剥离,解决现有技术中三维网格模型透明绘制精度不足、效率低下的问题。与基于深度剥离的方法不同的是,本发明第一实施例提供的三维网格模型透明绘制的系统100不是基于深度剥离的思想,不必进行剥离操作,而是一次把所有的片元排序后得到正确的合成顺序,然后ー次绘制即可得最終結果。因此,不需要对深度、模版等传统缓冲区的多次读写操作,提高了绘制的效率。本发明的多个实施例完全基于新一代的OpenGL 4. O及以上版本(如OpenGL
4.l、0penGL4. 2等)可编程管线及扩展来实现。透明绘制精度的提高使用了新的图形硬件及新的图形接ロ OpenGL 4. O及以上版本的支持,动态修改纹理数据,使用了可动态调整大小的链表来存储片元,因此没有对透明面的层数限制。三维网格模型透明绘制效率的提高通过减少调用图形硬件绘制的次数,使用新的硬件与软件支持,对链表排序后直接对链表中的片元合成后一次绘制完成。另ー方面,该实施例中的透明绘制是指网格模型在被计算机绘制时,光线可以透过这个网格模型,可以观察到被网格模型表面遮掩的物体。使用透明绘制的方法,可以方便用户观察到物体内部的信息,确定内部物体在当前网格模型的位置关系。參见图2,在本发明的第二实施例中,提供ー种三维网格模型透明绘制的方法,所述方法包括如下步骤步骤S201中,在三维网格模型的绘制区域每个像素的位置使用链表和/或固定数组保存其当前位置上的片元数据;该步骤由保存模块10实现;步骤S202中,将所有的所述链表根据所述片元的深度进行排序;该步骤由排序模块20实现;步骤S203中,对已排序的所述片元的属性信息进行合成,获得所述每个像素的颜色值;该步骤由获取模块30实现;
步骤S204中,将所述每个像素位置上的所述像素的顔色值复制到显示缓冲区,在显示窗ロ显示所述三维网格模型;该步骤由显示模块40实现。在该实施例中,所述步骤S201中,在绘制区域每个像素的位置都使用一个链表保存当前位置上的片元数据。网格的片元数据是指由三维世界的几何模型以视角方向投影到ニ维视平面后光栅化离散为一定分辨率的像素块,与常规的ニ维图片的像素块不同,这种片元数据不仅存储颜色属性(RGBA值),还存储着深度信息。片元的深度是指当前片断在当前视角方向的深度。而链表是指ー种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每ー个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分一个是存储数据元素的数据域,另ー个是存储下ー个结点地址的指针域。链表相对于固定数组的优势在于可以在程序运行时动态控制结点的数量,而固定数组必须在程序编译运行前就要固定所能存储数据的多少。參见图3A 图5B显示采用本发明提供的方法及系统对多种模型进行透明绘制后与透明绘制前的效果对比。具体的,在所述步骤S202中,对所有链表根据片元的深度进行排序;在所述步骤S203中,对已排序的片元的颜色进行合成,最終得到每个像素的顔色值。根据每个链表中的片元的顔色、不透明度等属性,使用片断着色器将已根据深度排序好的片元以从远往近或从近到远的顺序进行叠加合成,得到该链表对应像素位置上像素的颜色值。每个链表的最終颜色值的计算过程,基于片元的Alpha通道的数值进行混合,假设处于同一像素位置上的片元已根据当前视角的深度从后到前排序,遵循以下计算公式可得到该链表的最终颜色colors+1 = colors+FsX (l_colors · Alpha)在所述步骤S204中,将每个像素位置上最終的像素顔色值复制到显示缓冲区,在屏幕上显示出来。由此,可以获得三维网格模型透明绘制的效果图。在本发明的第三实施例中,所述步骤S201包括Al、对所述三维网格模型的绘制进行初始化;该步骤可由保存模块10中的初始化子模块实现;A2、输入所述三维网格模型,并进行光栅化处理,获得所述每个像素的位置的片元的数据;该步骤可由保存模块10中的输入子模块实现;A3、对每个所述片元进行并行处理,使每个所述片元存储在共享存储纹理内;该步骤可由保存模块10中的并行处理子模块实现;A4、查看所述片元进行并行处理的結果,井根据剩余的所述片元的数量进行相应的处理;该步骤可由保存模块10中的查看子模块实现。具体的,所述步骤Al包括All、将每个像素对应的存储在所有所述片元的链表共享的存储区域;A12、建立ー个与所述显示窗ロ分辨率一致的表头ニ维纹理;A13、建立一个与所述显不窗ロ分辨率一致的信号量ニ维纹理;A14、初始化所述三维网格模型的全局片元计算器。而所述步骤A32包括A31、根据当前所述像素位置,读取所述信号量ニ维纹理对应位置的数值,井根据所述数值执行相应的操作;A32、根据当前所述片元对应的像素位置和所述全局片元计算器的读数,将所述片元的相关信息以及在所述片元在当前像素位置上链表的第一元素在所述链表共享的存储区域的位置信息存储在所述链表共享的存储区域;A33、修改所述表头ニ维纹理,在对应的像素位置上改写为所述链表共享的存储区域的所述片元的位置信息;A34、将所述信号量置为0,开放对当前所述链表的控制;A35、将所述片元从图形处理中去除。优选的,在所述步骤Al中对三维网格模型的绘制区域采用图形处理器中的纹理进行存储;在所述步骤A3中使用片断着色器对每个所述片元进行并行处理;在所述步骤A4中查询所述片断着色器处理结果,在有剩下未被擦除的片元时,增加所述共享存储纹理的存储空间;在没有剩下未被擦除的片元时,将所有所述片元存储到对应的像素位置的链表内。优选的,所述链表共享的存储区域采用图形处理器中的纹理进行存储;所述链表共享的存储区域包括数据部分和指针部分;所述片元的相关信息包括所述片元的顔色、不透明度或者深度。在该实施例中的链表使用OpenGL读写图形处理器(GPU)中的纹理来进行模拟。通过下述步骤实现三维网格模型透明绘制的方法的,首先执行步骤S201的操作,具体包括a)初始化。①每个像素对应的存储片元的链表使用ー个所有链表一起共享的存储区域,这个区域使用图形处理器中的纹理进行存储,下面称为“共享存储纹理”,为下面通过OpenGIAO或以上版本的可编程管线中的片断着色器(Fragment Shader)对链表元素读取、修改做准备。这个共享的存储区域的每个单元都由两部分组成第一部分是数据部分,存储片元的顔色、不透明度或者深度等信息。第二部分是指针部分,存储的是与该片元同一像素位置上的前一个被处理的片元在共享存储纹理的位置。共享存储纹理的大小是可变的,能根据片元的数量动态增加存储区域的大小。毎次存储区域的动态增加,是通过使用着色器后统计没有存入链表的片元数量来确定的,如果存储空间是足够的,经过片断着色器处理后剩下的片元数量为0,否则不为0,为仍未存储进链表的片元的数量。②建立一个与当前显示窗ロ分辨率一致的表头ニ维纹理,纹理中的每个单元记录的是当前単元对应的像素位置的链表头部,这个头部包含了一个指针,指向的是当前像素位置上链表的第一个元素在共享存储纹理的位置。③建立一个与当前显示窗ロ分辨率一致的信号量ニ维纹理,记录的是当前链表是否有其它线程在操作,决定了是否能在当前线程对当前链表进行新增结点操作,防止多个线程对同一链表同时进行操作导致的冲突。初始化该纹理,全置为O。④初始化全局片元计数器,用于记录当前所有已经被处理的片元的数量,初始值为O。b)输入网格模型,将网格投影到ニ维视平面上,并进行光栅化,得到离散的像素块,即片元。所述网格模型可以由透明、半透明或不透明的网格组成。c)使用片断着色器,对每个片元进行并行处理,使其存储在共享存储纹理内,每个片元的处理都是独立的。步骤如下①根据当前的像素位置,读取信号量ニ维纹理对应位置的数值,如果当前信号量为1,说明有其它线程在操作当前链表,则进行等待,等待信号量为O时执行下一歩操作。如果当前信号量为0,则改写当前信号量,置其为1,防止其它线程操作当前链表。②根据当前片元对应的像素位置和全局片元计数器的读数,把片元的顔色、不透明度、深度等信息以及在当前像素位置上链表的第一个元素在共享存储纹理的位置一井在共享存储纹理存储起来。③修改步骤S201的a)的②步骤存储的表头ニ维纹理,在对应的像素位置上改写为刚才在共享存储纹理存储的片元的位置。④将当前信号量置为0,放开对当前链表的控制,允许其它线程操作当前链表。⑤如果上述①②③④操作都成功,则把该片元从图形处理器的流水线中擦除;否则,说明共享存储纹理空间不足,则不擦除该片元。d)查询片断着色器处理結果,获取剩下未被擦除的片元的数量,如果数量不为0,说明共享存储纹理的空间不足,増加共享存储纹理空间后,返回到步骤S201的a)。如果数量为0,说明已经成功把所有片元都处理完毕,所有片元都存储进对应像素位置的链表内,跳转到步骤S202。在本发明的第四实施例中,所述步骤S202包括BI、使用所述片断着色器并行遍历每个像素位置上对应的链表,并存储在ー个临时缓存数组中;该步骤可由排序模块20中的片断着色器实现;B2、使用所述片断着色器对每个链表的临时缓存数组中的片元根据其深度进行排序;该步骤可由排序模块20中的片断着色器实现。所述步骤BI包括B11、所述片断着色器读取所述每个像素位置链表头部的表头ニ维纹理,获得所述链表的头部信息;B12、为所述每条链表新创建ー个临时片元存储区,存储每个链表的所有片元;B13、依次读取每个所述链表中元素,将所述元素中的片元数据复制到所述临时片元存储区中。在上述多个实施例中,所述链表和/或固定数组保存其当前位置上的片元数据时将基于相同像素位置的片元作为ー个片元集合保存。在该实施例中,步骤S202,对所有链表根据片元的深度进行排序;具体的操作包括a)使用片断着色器并行遍历每个像素位置上对应的链表,并存储在ー个临时缓存数组中。遍历的过程如下①在片断着色器中读取步骤S201的a)的②步骤中的记录每个像素位置链表头部的表头ニ维纹理,得到链表的头部信息,即链表的第一个元素在共享存储纹理的位置。②为每条链表新创建ー个临时片元存储区,存储每个链表的所有片元。
③读取每个链表第一个元素,将元素中的片元数据(顔色、不透明度、深度)复制到临时片元存储区中,根据元素的指针,获得下ー个元素的访问位置,读取下ー个元素,以此类推读取整个链表。链表读取完毕后,跳转到步骤S202的b)。b)使用片断着色器对每个链表的临时缓存数组中的片元根据其深度进行排序,使得每个链表中的片元都是以从远到近或从近到远的方式进行排列的。排序算法可以选择冒 泡排序、桶排序、快速排序、堆排序、双调排序等方法。在上述多个实施例中,可以包括以下的操作方式步骤S201使用链表保存片元时,将几个基于相同像素位置的片元作为ー个片元集合,也称为页,保存在共享存储纹理,链表的结构变为每个元素由一个页及指向下ー个页的指针构成。此后遍历片元也是在此基础上从毎次遍历ー个片元变为每次遍历ー个页。步骤S202中,在某种对绘制精度要求不高的情况下,使用固定数组代替链表保存片元。步骤S203中,在精度要求提高的情况下,可以以高于显示窗ロ分辨率的方法对片元进行采样,并保存在以此种高分辨率的像素排列对应的链表中。此时,步骤S201的a)的②中建立的用于记录每个链表第一个元素位置的表头ニ维纹理的分辨率也与此种高分辨
率一致。步骤S204中,在图形硬件支持和OpenGL扩展下,可以使用GPU的全局显存中的数组代替步骤S201中的纹理。上述的三维网格模型透明绘制的系统100的多个模块可以为软件单元,硬件单元或软硬件结合单元。參见图4,在本发明的第六个实施例中,对于ー个透明的网格模型,依照本发明采用如下技术步骤进行绘制步骤S201中,在绘制区域每个像素的位置都使用一个链表保存对应位置上的网格模型的片元数据。具体的实施方法如下a)定义链表的数据结构,链表由表头和结点组成。链表的结点包含了两部分片元数据(即片元的顔色、不透明度、深度等属性)和指针(即下ー个结点的位置)。链表的表头是ー个指针,存储的是第一个结点在实际存储空间中的位置。显示窗ロ的每个像素位置都对应了一条链表,存储相应位置上的片元。使用OpenGIA O或以上版本的接ロ在系统中申请三个纹理,即共享存储纹理、表头ニ维纹理和信号量ニ维纹理。表头ニ维纹理的大小设置为显示窗ロ的分辨率大小,即存储了每个像素位置上对应链表的表头。共享存储纹理存储的是所有链表的所有结点,其大小在算法运行过程中会根据绘制过程中链表的结点数量的增长动态增加大小。信号量ニ维纹理大小与显示窗ロ的分辨率大小一致,记录的是当前链表是否有线程在对其操作。设置ー个全局的片元计数器,记录当前所有已被处理的片元的数量,用于在处理片元过程中为每ー个链表结点安排ー个全局唯一的存储位置,初始化值为O。b)通过OpenGL提供的接ロ,输入网格模型的信息,包括网格模型的顶点位置、法向量、顔色、不透明度等属性。使用OpenGL中内置的投影变换操作,将网格投影到ニ维视平面上,并进行光栅化,得到片元。c)使用OpenGL提供的片断着色器,及OpenGIA O及以后版本提供的运行在片断着色器中修改纹理的扩展操作,将片元存储在其对应像素位置的链表中,并通过全局片元计数器,更新每个链表表头。如果共享存储纹理的空间足够,在链表中存储了当前处理的片元后,擦除当前处理的片元,否则不擦除当前处理的片元。使用信号量ニ维纹理保证片断着色器对同一个链表的操作是串行执行的,避免多个线程同时对同一链表进行写操作导致的冲关。d)查询片断着色器的处理结果,获取未擦除的片元数量。如果未擦除的片元的数量大于0,说明共享存储纹理的存储空间不足,需要为共享存储纹理重新分配更大的空间,跳转回步骤a)中。如果未擦除的片元数量为0,说明共享存储纹理存储空间足够,继续下面的步骤。步骤S202中,对所有链表内的片元根据片元的深度进行排序。a)使用OpenGL提供的片断着色器,访问表头ニ维纹理,获取每个链表的第一个结点在共享存储纹理中的位置。为每个链表建立ー个临时存储数组,用于保存链表中所有片元的信息。根据得到的每个链表的第一个结点的位置,使用片断着色器访问共享存储纹理,得到结点的数据,将结点中的片元信息保存在临时存储数组中,并根据当前结点中的指针,获得下一个结点的位置,以此类推,可以遍历所有链表中的所有结点。b)对每个链表的临时存储数组根据片元的深度信息进行排序,可以选择从后到前或从前到后的顺序,排序的算法可以使用冒泡排序、桶排序、快速排序、堆排序、双调排序
坐寸ο步骤S203中,对临时存储数组中已排序的片元,根据片元的顔色、不透明度,以当前视角方向从后到前或从前到后的方法进行颜色合成。遵循以下计算公式可得到每条链表中所有片元的最終合成顔色colors+1 = colors+FsX (l_colors · Alpha)步骤S204中,使用OpenGL提供的接ロ,将把每个链表片元的最终合成颜色值复制到显示缓冲区,并显示在屏幕的显示窗ロ中。输入数据I为人体上腹部肝脏及周边血管网格模型,网格的顶点数量为244166个,三角形数量为688472个。输入数据2、3为斯坦福大学计算机图形学实验室公开的Dragon和Lucy模型,以便用干与其它透明绘制方法进行性能比较。在显示窗ロ分辨率512*512下,可得到表I各算法的性能比较。由表I可以得到以下结论,本发明中的透明绘制方法相对于传统的深度剥离及其增强算法在性能上大大提高,可以保证在大規模网格数据输入时仍能保持实时性。
权利要求
1.ー种三维网格模型透明绘制的方法,其特征在于,所述方法包括如下步骤 A、在三维网格模型的绘制区域每个像素的位置使用链表和/或固定数组保存其当前位置上的片元数据; B、将所有的所述链表根据所述片元的深度进行排序; C、对已排序的所述片元的属性信息进行合成,获得所述每个像素的顔色值; D、将所述每个像素位置上的所述像素的顔色值复制到显示缓冲区,在显示窗ロ显示所述三维网格模型。
2.根据权利要求I所述的方法,其特征在于,所述步骤A包括 Al、对所述三维网格模型的绘制进行初始化; A2、输入所述三维网格模型,并进行光栅化处理,获得所述每个像素的位置的片元的数据; A3、对每个所述片元进行并行处理,使每个所述片元存储在共享存储纹理内; A4、查看所述片元进行并行处理的結果,井根据剩余的所述片元的数量进行相应的处理。
3.根据权利要求2所述的方法,其特征在于,所述步骤Al包括 All、将甸个像素对应的存储在所有所述片兀的链表共孚的存储区域; A12、建立ー个与所述显示窗ロ分辨率一致的表头ニ维纹理; A13、建立ー个与所述显不窗ロ分辨率一致的信号量ニ维纹理; A14、初始化所述三维网格模型的全局片元计算器。
4.根据权利要求3所述的方法,其特征在于,所述步骤A3包括 A31、根据当前所述像素位置,读取所述信号量ニ维纹理对应位置的数值,井根据所述数值执行相应的操作; A32、根据当前所述片元对应的像素位置和所述全局片元计算器的读数,将所述片元的相关信息以及在所述片元在当前像素位置上链表的第一元素在所述链表共享的存储区域的位置信息存储在所述链表共享的存储区域; A33、修改所述表头ニ维纹理,在对应的像素位置上改写为所述链表共享的存储区域的所述片元的位置信息; A34、将所述信号量置为0,开放对当前所述链表的控制; A35、将所述片元从图形处理中去除。
5.根据权利要求4所述的方法,其特征在于,在所述步骤Al中对三维网格模型的绘制区域采用图形处理器中的纹理进行存储; 在所述步骤A3中使用片断着色器对每个所述片元进行并行处理; 在所述步骤A4中查询所述片断着色器处理结果,在有剩下未被擦除的片元时,増加所述共享存储纹理的存储空间;在没有剩下未被擦除的片元时,将所有所述片元存储到对应的像素位置的链表内。
6.根据权利要求4所述的方法,其特征在于,所述链表共享的存储区域采用图形处理器中的纹理进行存储;所述链表共享的存储区域包括数据部分和指针部分; 所述片元的相关信息包括所述片元的顔色、不透明度或者深度。
7.根据权利要求5所述的方法,其特征在于,所述步骤B包括BI、使用所述片断着色器并行遍历每个像素位置上对应的链表,并存储在ー个临时缓存数组中;B2、使用所述片断着色器对每个链表的临时缓存数组中的片元根据其深度进行排序。
8.根据权利要求7所述的方法,其特征在于,所述步骤BI包括 B11、所述片断着色器读取所述每个像素位置链表头部的表头ニ维纹理,获得所述链表的头部信息; B12、为所述每条链表新创建ー个临时片元存储区,存储每个链表的所有片元; B13、依次读取每个所述链表中元素,将所述元素中的片元数据复制到所述临时片元存储区中。
9.根据权利要求I所述的方法,其特征在于,所述链表和/或固定数组保存其当前位置上的片元数据时将基于相同像素位置的片元作为ー个片元集合保存。
10.ー种用于实现如权利要求I 9任一项所述的方法的系统,其特征于所述系统包括 保存模块,用于在三维网格模型的绘制区域每个像素的位置使用链表和/或固定数组保存其当前位置上的片元数据; 排序模块,用于将所有的所述链表根据所述片元的深度进行排序; 获取模块,用于对已排序的所述片元的属性信息进行合成,获得所述每个像素的顔色值; 显示模块,用于将所述每个像素位置上的所述像素的顔色值复制到显示缓冲区,在显示窗ロ显示所述三维网格模型。
全文摘要
本发明适用于计算机绘图技术领域,提供了一种三维网格模型透明绘制的方法及其系统,所述方法包括如下步骤A、在三维网格模型的绘制区域每个像素的位置使用链表和/或固定数组保存其当前位置上的片元数据;B、将所有的所述链表根据所述片元的深度进行排序;C、对已排序的所述片元的属性信息进行合成,获得所述每个像素的颜色值;D、将所述每个像素位置上的所述像素的颜色值复制到显示缓冲区,在显示窗口显示所述三维网格模型。借此,本发明提高了三维网格模型透明绘制的精度和速度。
文档编号G06T15/00GK102915563SQ20121032987
公开日2013年2月6日 申请日期2012年9月7日 优先权日2012年9月7日
发明者叶建平, 张磊, 张吉帅, 杨光 申请人:深圳市旭东数字医学影像技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1