具体实施方式
为使本发明的目的、技术方案和优点更加清楚,将结合附图对本发明作进一步地详细描述。这种描述是通过示例而非限制的方式介绍了与本发明的原理相一致的具体实施方式,这些实施方式的描述是足够详细的,以使得本领域技术人员能够实践本发明,在不脱离本发明的范围和精神的情况下可以使用其他实施方式并且可以改变和/或替换各要素的结构。因此,不应当从限制性意义上来理解以下的详细描述。
本发明首先提供了一种系统,包括远程服务器,第一模型数据库,第二模型数据库和浏览客户端。远程服务器和第一、二模型数据库通信连接,远程服务器和多个浏览客户端通过有线或无线网络连接。第一模型数据库中存储有原始的三维模型,第二模型数据库中存储有组合的三维模型。本领域技术人员知晓,第一模型数据库和第二模型数据库可以是逻辑上分离但物理上不分离的两个数据库,也可以是逻辑上分类物理上也分离的数据库。
根据本发明,第一模型数据库存储有三维模型,三维模型包括三维数据、衔接面数据、模型名称、模型描述信息和模型元数据。第二模型数据库存储有组合的三维模型,除了三维数据、衔接面数据、模型名称、模型描述信息和模型元数据之外,还包括组合元数据。具体相关内容的阐述与解释将随后结合本发明的三维交互方法详细介绍。
本发明随后提供了一种三维交互用的GUI,如图1所示,所述GUI的主界面10主要包括场景区12,匹配区14,组合区16,属性区18。场景区12用于显示一个三维模型或者多个三维模型,用户可以在场景区12中显示的三维模型中选择第一模型。匹配区14用于显示可以与第一模型相匹配的三维模型列表,三维模型列表中可以包括一个三维模型,也可以包括多个三维模型,用户可以从匹配区14的三维模型列表中选择与第一模型匹配的第二模型。组合区16用于显示场景区12中的第一模型和匹配区14中的第二模型的组合模型;属性区18用于显示当前用户选择的第一模型的属性信息。本领域技术人员知晓,主界面10是界面的示意图,与界面相关联的菜单、工具栏、滑动条、包括查询按钮在内的功能按钮或按键等公知的人机交互接口在图1中被选择性的省略,以使得本发明的发明构思和发明点更突出。但是,这并不影响使用上述公知的人机交互接口的GUI不落入本发明的保护范围。
根据本发明,GUI位于浏览客户端上,但是本领域技术人员也知晓,在不使用图1A所示的系统的情况下,例如使用单机携带第一、二模型数据库的情况下,GUI也可以位于单机中。
如图2所示,本发明的三维交互方法包括以下步骤:
步骤S110,用户选取第一模型。
用户可以通过鼠标点击选择场景区12中的第一模型,也可以通过键盘上的快捷键选取第一模型。优选的,GUI的主界面10显示在触控设备上,因此允许用户使用手指或者触控设备(例如触控笔)选择第一模型。
场景区12中的三维模型可以通过打开单个三维模型文件的方式被导入,这种情况适用于对于单个电力元件三维模型的交互操作;也可以通过打开包括多个三维模型的场景文件的方式被导入,这种情况适用于变电站、输电线路、控制机房等包括多个三维模型的三维场景的交互操作。
可选的,当导入的三维模型只有一个时,自动选取该三维模型作为第一模型。当导入的三维模型为多个(即导入包括多个三维模型的场景)时,才需要用户选择需要进行交互操作的第一模型。
如前文所述,三维模型中包括三维数据和衔接面数据。其中,三维数据为渲染三维模型所使用的数据,一般情况下,三维数据包括点数据、线数据和面数据等空间位置数据。面数据通常为三角形的面数据(即三角面片数据)。此外,三维数据还可以包括其他类型的数据,例如翼边结构的数据。在本发明中,为简化数据存储结构,三维数据中标识空间位置的数据均为三角面片数据,即三维模型由三角面片构成,每个三角面片包括三角形的三个顶点P1、P2、P3,每个顶点具有相应的空间坐标,即P1的空间坐标为{x1,y1,z1}、P2的空间坐标为{x2,y2,z2}、P3的空间坐标为{x3,y3,z3}。三维数据中还包括三角形各顶点的颜色数据,优选的,颜色数据为顶点对应的纹理坐标,例如P1的纹理坐标为{u1,v1},P2的纹理坐标为{u2,v2},P3的纹理坐标为{u3,v3}。纹理坐标为纹理图像的像素点坐标,用于从纹理图像中获取三角形三个顶点的颜色值。另一个实施方式中,颜色数据还可以定义为顶点的颜色值,例如RGB颜色值,或者RGBA颜色值,其中A颜色表示透明度,在对于颜色要求较低的三维模型中,例如重视尺寸的电力元件或者要求较低的背景模型中,可以采用此种方式,以提升渲染效率。再一个实施方式中,颜色数据还可以包括顶点的法向量,以使得在特定光照情况下能够通过法向量模拟顶点的反射光,从而计算获得顶点的颜色数据。
根据本发明,衔接面数据用于指示当前用户选取的第一模型和其他三维模型能够进行组合衔接面。电力系统中,有些三维模型可以和任何其他三维模型进行组合,例如承载台。有些三维模型只能通过特定的位置(衔接面)和其他三维模型组合,例如配线架模型和跳线模型,即配线架模型的插口处为衔接面,跳线模型的水晶头处为衔接面。
根据本发明,根据实际衔接情况,一个三维模型可以具有一个衔接面,也可以具有多个衔接面。当具有多个衔接面时,三维模型将包括多组衔接面数据。
根据本发明的一个方面,衔接面数据为构成衔接面的所有三角面片的三角形顶点的列表。由于衔接面的主要功能是展示三维模型之间的衔接位置,因此不必要求过于精细的渲染,优选的,衔接面数据为构成衔接面的所有三角面片的包围盒的顶点的列表,从而在完成衔接面功能的同时大幅减少衔接面的数据量,包围盒为能够容纳所有三角面片的最小的长方体,包围盒可以采用长方体的8个顶点表示。优选的,包围盒的某个顶点的三条边与三角面片所在坐标系的三个坐标轴平行。例如,当三维模型具有4个衔接面数据,共包括500个三角形时,直接采用三角面片作为衔接面数据时,需要存储500*3=1500个顶点信息。而采用包围盒作为衔接面数据时,每个包围盒只需要8个顶点数据,因此共需要8*4=32个顶点数据,从而大幅度减少了存储衔接面的数据量,节约存储空间并且提升衔接面的渲染效率。更优选的,衔接面的顶点数据采用16位的定点数据表示,而不采用通常顶点数据所采用的32位或64位浮点数据表示,从而进一步节约存储空间并且提升渲染效率。在本发明的说明书中,如果不经过特指,一般认为衔接面和衔接面的包围盒的含义类似。
根据本发明,可选的,衔接面数据为构成衔接面的所有三角面片的三角形顶点的列表以及包围盒的顶点列表。
根据本发明,三维模型中进一步包括模型名称、模型描述信息和模型元数据。模型名称优选的可以与存储三维数据的文件名相同。模型描述信息为创建或修改该模型的用户提供的对模型进行简要说明的文本信息。
模型元数据包括:模型ID、衔接面数量、三维数据起始位置、三维数据长度、衔接面特征列表。模型ID为三维模型的唯一号码,32位定点数表示。衔接面数量为0时,表示该三维模型没有衔接面,即能够和任何其他三维模型衔接,当衔接面数量为其他值时,表示该三维模型具有的衔接面数量。三维数据起始位置和三维数据长度分别用于指示三维数据在三维模型中的起始位置和数据长度,均为32位定点数表示。
衔接面特征列表包括各个衔接面的衔接面ID、衔接面标识、模型数量、模型ID列表、衔接面数据起始位置。衔接面ID为三维模型内部衔接面的唯一号码,8位定点数表示,意味着每个三维模型最多能够设置256个衔接面。衔接面标识用于标识的衔接面属性,8位定点数表示:当其取值为1时,表示该衔接面只能够与衔接面特征列表中存储的衔接面衔接;(可选的)当其取值为2时,表示该衔接面优选与衔接面特征列表中存储的衔接面衔接,但也可以通过衔接面的包围盒与其他三维模型衔接。模型ID列表为能够被该衔接面衔接的所有其他模型的模型ID列表。衔接面数据起始位置为当前衔接面在三维模型中的起始位置,该实施例中,由于衔接面采用包围盒的8个顶点数据表示,因此衔接面的数据长度是固定值,不需要在元数据中表示。本领域技术人员清楚,如果采用三角面片列表的来表示衔接面,则在衔接面特征列表中还应包含衔接面的数据长度。
在图4所示的示例中,三维模型包括两个衔接面(ID1和ID2),衔接面ID1能够和其他两个三维模型(ID1_1和ID1_2)衔接,衔接面ID2能够和其他三个三维模型(ID2_1、ID2_2和ID2_3)衔接。衔接面ID1的衔接面标识为1,意味着,衔接面ID1仅能和三维模型(ID1_1和ID1_2)衔接,衔接面ID2的衔接面标识为2,意味着,衔接面ID2还可以和除了三维模型(ID2_1、ID2_2和ID2_3)之外的其他三维模型衔接,只要相互衔接的两个衔接面的包围盒符合特定的条件即可。
步骤S120,获得第一模型的衔接面数量。
根据本发明,用户选取第一模型后,获取第一模型的元数据,读取元数据中的衔接面数量。如果该衔接面数量为0,则在GUI的属性区18内显示提示信息,例如“该三维模型没有衔接面”,然后执行步骤S210;如果该衔接面数量不为0,则在属性区18内显示衔接面的数量,然后执行步骤S310。
步骤S210,输入查询词,获得匹配模型。
根据本发明,当第一模型没有衔接面时,用户(尤其是是利用浏览客户端的用户)可以通过GUI的匹配区14中的查询接口(如图1B中显示为“输入查询内容”的接口)输入查询词进行检索,从而获取与查询词匹配的匹配模型。具体步骤如下:
步骤S220,浏览客户端获得用户输入的查询词,并将查询词发送给远程服务器。
步骤S230,远程服务器根据查询词,在第一模型数据库中进行检索,获得检索结果,作为与查询词匹配的匹配模型。本领域技术人员清楚,当匹配模型为多个时,检索结果为匹配模型列表,本发明中,如无特指,属于“匹配模型”也可以表达匹配模型列表的含义上。可选的,远程服务器在模型名称和/或模型描述数据中进行检索,从而获得检索结果。
然后,执行步骤S130。
步骤S310,根据衔接面,获得匹配模型。
具体包括以下步骤:
步骤S320,在第一模型上显示衔接面。
在三维模型上显示衔接面(包围盒),例如以指定的颜色显示衔接面,或者以指定的线型(例如虚线)显示衔接面,从而以可视化的方式向用户直观的提供衔接面在三维模型上的位置。
优选的,衔接面(包围盒)以半透明的方式被附加在三维模型上,从而在向用户提供衔接面位置的同时,不影响用户直观的观察三维模型。更优选的,根据衔接面标识,以不同的颜色显示三维模型的衔接面,例如以第一颜色(红色)显示衔接面标识为1为衔接面(包围盒),以第二颜色(蓝色)显示衔接面标识为2的衔接面(包围盒)。
步骤S330,在第一模型上选择衔接面。
根据本发明,用户可以通过鼠标选择显示在三维模型上的衔接面,也可以通过键盘上的快捷键进行选择。优选的,用户使用手指或者触控设备(例如触控笔)选择三维模型上的衔接面(包围盒)。被选择的衔接面(包围盒)向用户呈现明显的被选择的效果,同时不影响用户理解被选择的衔接面标识。例如,当选择以第一颜色显示的衔接面(包围盒)时,衔接面(包围盒)仍然为红色,但是衔接面(包围盒)的边的线条呈现流动感,或者衔接面(包围盒)呈现闪烁感。
步骤S340,根据用户选取的衔接面,获得该衔接面的衔接面ID;根据衔接面ID在第一模型的元数据中进行匹配,从而获得该衔接面ID对应的模型数量N。
步骤S350,根据模型数量N,在第一模型的元数据中提取N个模型ID。
步骤S360,根据N个模型ID在第一模型数据库中进行检索,获得对应于N个模型ID的三维模型作为匹配模型。
然后,执行步骤S130。
步骤S130,在匹配模型中选择第二模型。
根据本发明,浏览器客户端可以在GUI的匹配区14中显示与衔接面对应的三维模型列表,用户可以从三维模型列表中选择第二模型,具体包括:
步骤S132,获取各个匹配模型中的元数据,例如模型ID、模型名称和模型描述信息。
步骤S134,在GUI的匹配区14中显示模型名称列表。进一步的,用户可以通过右键菜单显示模型描述信息。本领域技术人员清楚,在匹配区14中也可以显示模型ID列表,或者名称列表和ID列表的组合。
步骤S136,用户从模型名称列表中选择第二模型,使得第二模型处于选中状态。可选的,用户可以通过鼠标的单击操作选中第二模型,优选的,用户可以通过触摸操作选中第二模型。
步骤S140,判断第一、二模型是否已存在组合模型。
根据本发明,第二模型数据库中存储有用户根据第一模型数据库中的模型形成的组合模型。当已经存在第一、二模型的组合模型时,意味着之前已经有用户完成了第一、二模型的组合,因此可以提供给当前用户借鉴,提升三维模型的交互效率。
进一步的,第二模型数据库中的组合元数据进一步包括:第一组合模型ID,第二组合模型ID,第一衔接面ID,第二衔接面ID,衔接面主视图。第一、二组合模型ID分别为构成组合模型的两个三维模型的模型ID,其与第一模型数据库中的模型ID对应。第一、二衔接面ID分别为第一、二模型中相互衔接的ID。衔接面主视图为显示第一、二模型的衔接面效果的图像。
根据本发明,步骤S140中,用户(尤其是是利用浏览客户端的用户)将获得的第一模型的模型ID和第二模型的模型ID发送给远程服务器,远程服务器根据第一、二模型的模型ID,在第二模型数据库中进行检索。如果第一、二模型ID与第二模型数据库的同一条记录中的第一、二组合模型ID相同,则认为存在组合模型,进而执行步骤S410;否则执行步骤S510。本领域技术人员清楚,第一、二模型ID与第二模型数据库的同一条记录中的第一、二组合模型ID相同可以包括两种情况,即第一模型ID等同于第一组合模型ID且第二模型ID等同于第二组合模型ID,或者第一模型ID等同于第二组合模型ID且第二模型ID等同于第一组合模型ID。根据本发明,组合模型可能存在一个,也可能存在多个。
步骤S410,显示组合模型。
根据本发明,当存在第一、二模型的组合模型时,远程服务器将组合模型的元数据和组合元数据传输到浏览客户端。在浏览客户端的GUI的组合区16显示上述组合模型。可选的,以缩略图标和模型名称的形式显示组合模型。优选的,允许用户以例如选中或右键操作的方式弹出查看组合模型的衔接面主视图的窗口,以使得用户能够方便的判断组合模型是否能够被使用。
步骤S420,判断用户选择使用哪个模型。
根据本发明,第三模型为用户从组合区16中确认的组合模型。可选的,用户可以通过鼠标的双击操作选择使用第三模型,优选的,用户可以通过触摸操作选择使用第三模型。如用户选择使用第三模型,则执行步骤S430;否则,如用户认为组合模型中没有适用的模型,并且选择使用第二模型,则执行步骤S510。
步骤S430,导入第三模型。
根据本发明,浏览客户端向远程服务器发送传输第三模型的模型数据的请求,该请求中包括第三模型的模型ID,远程服务器响应该请求,从第二模型数据库中检索到响应的三维模型的模型数据并将该模型数据传输给浏览客户端,浏览客户端在GUI的场景区12中载入第三模型的模型数据。从而完成三维交互操作。
步骤S510,根据第一、二模型生成组合模型。
根据本发明,步骤S510具体包括以下步骤:
步骤S520,导入第二模型。根据本发明,浏览客户端向远程服务器发送传输第二模型的模型数据的请求,该请求中包括第二模型的模型ID,远程服务器响应该请求,从第一模型数据库中检索到响应的三维模型的模型数据并将该模型数据传输给浏览客户端,浏览客户端在GUI的场景区12中载入第二模型的模型数据。
步骤S530,在场景区12中,将第一模型与第二模型进行组合,形成组合模型。用户完成第一模型和第二模型的三维数据的合并,从而形成组合模型的三维数据。本领域技术人员清楚,组合模型的三维数据具体形成方式可以以现有技术中的任一方式完成。进一步的,用户还根据生成组合模型的组合元数据,具体包括以下步骤:
步骤S532,将第一、二模型的模型ID分别作为组合模型的第一、二组合模型ID。
步骤S534,将第一、二模型的用于衔接的衔接面ID,分别作为组合模型的第一、二衔接面ID。如果第一模型的衔接面数量为0,则将组合模型的第一、二衔接面ID设置为Null。
步骤S536,获得场景区12中的组合模型的截图,作为组合模型的衔接面主视图。
步骤S540,将组合模型上传并存储到第二模型数据库。
根据本发明,浏览客户端向远程服务器传输组合模型,远程服务器将该组合模型保存到第二模型数据库中,从而完成三维交互过程。由于组合模型被存储到第二模型数据库中,可以方便电力系统其他用户在搭建三维场景或者创造电力元件模型时使用。
本发明首先在GUI中获取三维模型的模型名称、模型描述信息、衔接面主视图等元数据和组合元数据信息,而不获取具体的三维模型和组合三维模型的三维数据。并且,仅在用户根据模型元数据和/或组合元数据确定需要衔接的三维模型时,才真正获取三维模型数据。这种处理方式能够有效避免加载数量较大的第二、三模型的三维数据时的系统消耗。尤其是在三维模型被存储在远程服务器的第一模型数据库中,而GUI在与远程服务器相互连接的浏览客户端(例如PC端或者平板电脑端)时,类似于CN102819861B中所示的电力系统三维设备场景建模的环境中,这种处理方式还能够进一步节约移动终端和服务器之间的通信消耗。
进一步的,根据本发明,三维模型中还包括三维数据的大小。优选的,在步骤S210、S310和/或S410中还包括,获取各个匹配模型的三维数据的大小,并且当某个匹配模型的大小小于特定阈值时,将该三维模型连同模型元数据一并传出到浏览客户端。从而在不影响传输效率的前提下,减少浏览客户端和远程服务器之间的交互。
本发明还提供了一种快速检索三维模型的方法。
如前文所述,本发明的三维模型包括模型元数据,模型元数据包括衔接面列表,衔接面列表包括衔接面标识。衔接面标识用于标识的衔接面属性,当其取值为1时,表示该衔接面只能够与衔接面特征列表中存储的衔接面衔接;(可选的)当其取值为2时,表示该衔接面优选与衔接面特征列表中存储的衔接面衔接,但也可以通过衔接面的包围盒与其他三维模型衔接。在步骤S320中进一步指出:更优选的,根据衔接面标识,以不同的颜色显示三维模型的衔接面,例如以第一颜色(红色)显示衔接面标识为1为衔接面(包围盒),以第二颜色(蓝色)显示衔接面标识为2的衔接面(包围盒)。
根据本发明,前述步骤S330中进一步包括,如果用户选择的是衔接面标识为1的衔接面(包围盒),执行步骤S340,如果用户选择的是衔接面标识为2的衔接面(包围盒),则如图4所示,执行本发明提供的一种快速检索三维模型的方法(步骤S600),具体包括以下步骤:
步骤S610,根据用户选取的衔接面,获得该衔接面的衔接面ID;根据衔接面ID在第一模型的元数据中进行匹配,从而获得该衔接面ID对应的模型数量N。
步骤S620,根据模型数量N,在第一模型的元数据中提取N个模型ID。
步骤S630,根据N个模型ID在第一模型数据库中进行检索,获得对应于N个模型ID的三维模型作为第一匹配模型。
步骤S700,根据衔接面(包围盒)在第一模型数据库中进行检索,获得M个三维模型作为第二匹配模型。
步骤S790,在匹配区14中显示第一匹配模型和第二匹配模型,其中第一匹配模型的位置在第二匹配模型的位置前面。
由于第一匹配模型属于衔接面直接对应的匹配模型,第二匹配模型为通过衔接面进行匹配才获得的模型,因此用户选择第一匹配模型的概率会超过选择第二匹配模型的概率,故在排序时,将将第一匹配模型置于第二匹配模型的前面。
其中,步骤S700进一步包括以下步骤:
步骤S720,获得用户选取的包围盒的边长B1={P1,Q1,R1},其中P1,Q1,R1为该包围盒共享同一顶点的三个边的边长;
步骤S730,将边长B1发送给远程服务器;
步骤S740,对于第一模型数据库中的任一三维模型,远程服务器首先提取其衔接面数量,当衔接面数量不为0时,进一步提取该三维模型的各个衔接面标识,对于衔接面标识为2的衔接面,计算其包围盒的边长B2={P2,Q2,R2},其中P2,Q2,R2为该包围盒共享同一顶点的三个边的边长。
步骤S750,如果边长B1和B2之间满足以下条件,则将该三维模型作为第二匹配模型。
其中,D为特定阈值。
根据本发明的一个方面,与现有技术类似,包围盒采用8个顶点坐标的方式表示,即三维模型的衔接面数据为8个顶点坐标。优选的,包围盒的某个顶点的三条边与三角面片所在坐标系的三个坐标轴平行。如图5所示,包围盒包括V0-V7共8个顶点,每个顶点的坐标分别为{x0,y0,z0}-{x7,y7,z7}。在图4所示的坐标系下,步骤S720中,可以采用以下方式获取包围盒的边长:
P1=x1-x0
Q1=y4-y0
R1=z3-z0
根据本发明的另一个优选方面,包围盒采用1个顶点坐标和3个边长的方式表示,即三维模型的衔接面数据为1个顶点坐标和3个边长。如图6所示,包围盒包括顶点V,其坐标为{x,y,z},以及分别沿着x轴,y轴和z轴方向的边长{P,Q,R}。此时,步骤S720中,可以直接读取包围盒的边长。与图5所示实施例或现有技术相比,具有如下优点:
第一、在步骤S700中检索第二匹配模型时,无需计算包围盒的边长,从而节省了检索时间,提升了检索效率。
第二、衔接面数据从普通的8个顶点,减少为1个顶点和3个边长(数据量上相当于1个顶点),对存储空间的需求减少75%。
本领域技术人员清楚,对于第一模型库中的任一三维模型,当其具有多个衔接面标识为2的衔接面时,只要其中一个衔接面(包围盒)的边长符合步骤S750中的情形,则将该三维模型作为第二匹配模型。
根据本发明,步骤S630之后还进一步包括:
步骤S640,浏览客户端获得用户通过匹配区14输入的查询词,并将查询词发送给远程服务器。
步骤S650,远程服务器根据查询词,在第一模型数据库中进行检索,获得检索结果。
此时,步骤S700被替换为,根据衔接面(包围盒)在步骤S650的检索结果中进行检索,获得M个三维模型作为第二匹配模型。
通过查询词的二次检索限定了检索范围,提高了检索效率。
根据本发明的优选实施例,如图7所示,所述三维模型的元数据的衔接面列表中衔接面标识为2的衔接面还进一步包括衔接面(包围盒)体积。如图8所示,所述第一模型数据库中还存储有体积索引表,所述体积索引表包括衔接面(包围盒)体积和模型ID,其中衔接面(包围盒)体积和模型ID是一对一或一对多的关系,并且按照衔接面体积由小到大的顺序排序,即图8中v1<v2<v3<v4。进一步的,对于边长为{P,Q,R}的衔接面(包围盒),衔接面的体积V计算如下:
V=Round(P)*Round(Q)*Round(R)
其中,Round函数为四舍五入的取整函数,这样虽然牺牲了一些体积的精度,但是能够保证体积V为整数,能够有效简化体积索引表,提升检索效率。
步骤S700进一步包括以下步骤:
步骤S725,获得用户选取的包围盒的边长B1={P1,Q1,R1}和体积V1,其中P1,Q1,R1为该包围盒共享同一顶点的三个边的边长;
步骤S735,将边长B1和体积V1发送给远程服务器;
步骤S745,远程服务器在第一模型数据库的体积索引表中检索体积为V2的三维模型,作为备选模型;其中V1和V2满足以下关系:
步骤S755,提取备选模型的各个衔接面标识,对于衔接面标识为2的衔接面,计算其包围盒的边长B2={P2,Q2,R2},其中P2,Q2,R2为该包围盒共享同一顶点的三个边的边长。
步骤S765,如果边长B1和B2之间满足以下条件,则将该三维模型作为第二匹配模型。
其中,A和D为特定阈值,且满足以下关系:
A=D3+3D2+3D。
通过使用体积索引表先进行检索,能够大幅度缩小检索的范围,从而大幅度提高了后续的使用边长进行检索的效率。
本发明还提供了一种三维模型的加载方法,所述三维模型可以为前文所述的第一模型、第二模型和/或第三模型。
如前文所述,本发明包括的第一模型数据库和第二模型数据库中均存储有三维模型,三维模型包括三维数据。三维数据中标识空间位置的数据均为三角面片数据,即三维模型由三角面片构成,每个三角面片包括三角形的三个顶点P1、P2、P3,每个顶点具有相应的空间坐标,即P1的空间坐标为{x1,y1,z1}、P2的空间坐标为{x2,y2,z2}、P3的空间坐标为{x3,y3,z3}。步骤S430和步骤S520中分别导入第二、三模型,但在某些情况下,例如组合模型或者需要细节非常逼真的模型数据,三维模型中包含的三角面片数据极多,从而导致三维数据量非常大,使得浏览客户端GUI的场景区12中加载来自远程服务器的三维模型所需的时间较长,影响用户体验,尤其是在多个浏览客户端并行操作的时候,甚至会影响网络传输速度。为了克服该问题,如图9所示,步骤S430和步骤S520中导入第二、三模型的模型数据的加载方法具体包括如下步骤:
步骤S900,获得三维模型中三维数据的大小。
步骤S910,当三维数据的大小小于或等于第一阈值T1时,在浏览客户端GUI的场景区中加载三维模型;否则,当三维数据的大小大于第一阈值T1时,执行步骤S930。
步骤S930,浏览客户端在场景区中加载三维模型的第一三角面片数据,形成三维模型的一部分。其中,第一三角面片数据为能够体现三维模型轮廓的三角面片数据,其中的每个三角面片的面积均大于第二阈值T2。
步骤S940,在加载完第一三角面片数据后,浏览客户端向远程服务器请求发送第二三角面片数据,远程服务器响应该请求,向浏览客户端发送第二三角面片数据。其中第二三角面片数据为能够体现三维模型细节的三角面片数据,其中的每个三角面片的面积均小于或等于第二阈值T2。
步骤S950,浏览客户端在接收到第二三角面片数据后,向用户通知完成第二三角面片数据的接收,并响应用户的刷新请求,在场景区的第一三角面片数据的基础上加载第二三角面片数据,形成完整的三维模型。
在用户进行三维模型的组合过程中,由于在步骤S930和步骤S940中先后传输了第一、二三角面片数据,使得用户在接收到第一三角面片数据后就能够进行后续的与三维模型的组合相关的操作,而不必等待所有的三维数据全部传输完毕才进行后续操作,从而提升了用户的操作体验感。同时,第二三角面片数据也可以在远程服务器相对空闲时间进行传输,从而能够充分利用网络。
根据本发明,浏览客户端的GUI进一步包括进度条和刷新按钮,所述进度条用于指示第二三角面片数据的传输进度。在步骤S950中,用户可以通过点击刷新按钮发送刷新请求,优选的,当进度条指示第二三角面片数据传输完毕时,使得刷新按钮从不可使用的灰度状态变为可以使用状态。
根据本发明,步骤S930中的第二阈值T2的计算方式如下:
步骤S932,获得三维模型中各个三角面片数据的面积,统计各三角面片的面积形成面积分布图{(S1,N1),(S2,N2),……,(Sp,Np)}。其中,(Si,Ni)表示面积为Si的三角面片的数量为Ni,i为1到p之间的整数,且满足S1<S2<……<Sp。根据实验经验可以获知,面积分布图一般如图10所示,面积较小的第二三角面片的数量很多,构成了三维模型的细节,面积较大的第一三角面片的数量较多,构成了三维模型的轮廓,居于二者之间的三角面片的数量较少,因此理想情况下的阈值T2应当为于图10的虚线圈定的部分。
该步骤中,对于任何一个三角面片,其三个顶点P1、P2、P3的空间坐标为{x1,y1,z1}、{x2,y2,z2}、{x3,y3,z3},那么其面积S的计算方法如下:
其中,Round函数为四舍五入的取整函数;
a=(x2-x1)2+(y2-y1)2+(z2-z1)2
b=(x3-x1)2+(y3-y1)2+(z3-z1)2
c=(x3-x2)2+(y3-y2)2+(z3-z2)2
a、b、c分别为三角面片三个边长的平方,通过这种方式,在获取三角形面积时,只需要计算一次开放操作,较现有技术中的海伦公式能够有效节约运算时间。通过使用取整函数,才能够形成面积分布图。
步骤S933,获得个三角面片的面积均值K和均值N。
其中,Round函数为四舍五入的取整函数;λ为经验参数,取值小于1。
步骤S934,如果面积K对应的三角面片数量小于N,那么T2=K;否则,如果面积K对应的三角面片数量大于或等于N,则执行步骤S935。
步骤S935,计算面积大于K的三角面片的面积均值K1和面积小于或等于K的三角面片的面积均值K2。令K=(K1+K2)/2,然后执行步骤S933。
其中,a的取值使得Sa=K。
根据本发明,三维模型的加载方法中,步骤S930中进一步包括:获得三维模型的衔接面的三角面片数据,浏览客户端还在场景区中加载衔接面数据的三角面片数据,使用衔接面数据和第一三角面片数据共同构成三维模型的一部分。通过加载衔接面的三角面片数据,能够使得步骤S930中的三维模型部分数据直观的显示衔接面的细节特征,从而有利用用户组合三维模型。
根据本发明的一个方面,衔接面数据为构成衔接面的所有三角面片的三角形顶点的列表。这种情况下,可以直接读取衔接面数据,从而获得衔接面的三角面片数据。
根据本发明的另一个方面,衔接面数据为构成衔接面的所有三角面片的包围盒的顶点的列表。这种情况下,通过判断三维模型的各个三角面片的顶点坐标是否位于包围盒内,如果位于,则获得将该三角面片作为衔接面的三角面片数据。优选的,在采用图6所示的包围盒的情况下,对于任一三角形的顶点坐标{x1,y1,z1},如果同时满足以下条件,则认为其位于包围盒内:
x1-x<P
y1-y<Q
z1-z<R。
根据本发明,还提供了一种快速渲染三维场景的方法。
本领域技术人员知晓,渲染(Rendering)是指用数学模型模拟客观世界中物体与可见光的相互作用生成真实感图像的过程。渲染通过渲染流水线(Rendering Pipeline)完成,渲染流水线也称为渲染流水线(Graphic Pipeline)的输入为三角面片的集合,具体包括三角面片的三个顶点坐标,以及顶点的属性,例如顶点的颜色、法向量、材质和光源、纹理等属性中的一个或多个,顶点坐标决定了顶点的位置,顶点属性决定了顶点的颜色。渲染流水线的输出为像素值的二维数组,在计算设备中,像素值的二维数组为可以直接驱动显示设备进行显示的帧缓存(Frame Buffer)。从输入到输出的过程一般包括模型变换、视点变换、光照计算、投影变换、视锥剪裁、纹理映射、alpha测试、深度测试、雾化、抖动、alpha混合等步骤。当前的计算机系统都提供了可编程的渲染流水线,根据实际情况,渲染流水线的部分步骤是根据情况可选择的,部分步骤的顺序可以根据具体情况进行合并,部分步骤的先后顺序可以根据实际情况调整。
上述渲染流水线中,深度测试是必不可少的重要步骤。在深度测试之间,渲染流水线将三角面片的顶点空间坐标转换到屏幕坐标系下的坐标。对于任一三角形的三个顶点,其空间坐标为{x1,y1,z1}、{x2,y2,z2}、{x3,y3,z3},在深度测试之前,通过旋转、平移、投影、缩放、剪裁等操作将空间坐标变换为屏幕坐标{Xp1,Yp1,Zp1}、{Xp2,Yp2,Zp2}、{Xp3,Yp3,Zp3},其中Xp和Yp是该顶点在屏幕上的像素点的位置,Zp表示该顶点在垂直屏幕防线的深度。根据三角形三个顶点的屏幕坐标,可以采用例如插值的方式获得三角形内部各个像素点的深度值。深度测试还需要使用深度缓存(Depth buffer),也称为Z缓存(Zbuffer),其中存储有当前的帧缓存的深度值。对于插值后的任一像素,如果其深度值比深度缓存中对应像素位置的深度值大或者相等,则意味着该像素被当前帧缓存中的像素遮挡,不必进行后续操作,否则意味着该像素不被当前帧缓存中的像素遮挡,将该像素的颜色写入帧缓存,并且使用该像素的深度值更新深度缓存。
本领域技术人员知晓,以上是渲染流水线的通常操作,但是如图10所述,在本发明的加载过程中,三角面片包括第一三角面片和第二三角面片,二者之间具有不同的特点。因此希望利用二者的特点,基于可编程的渲染流水线,对不同类型的三角面片设计不同的渲染流水线,即在步骤S930和S950中采用不同的渲染流水线,提升三维模型的渲染效率。
如图11所示,根据本发明提供的一种快速渲染三维场景的方法,包括:
步骤S1000,判断三角面片的类型。
步骤S1100,如果为第一三角面片,采用第一渲染流水线进行渲染。
步骤S1200,如果为第二三角面片,采用第二渲染流水线进行渲染。
其中,第一渲染流水线与第二渲染流水线可以是相同的渲染流水线,也可以是不相同的渲染流水线。例如,第一、第二渲染流水线均为现有技术中使用的渲染流水线,但是第一、第二渲染流水线为不同的渲染流水线。再如,优选的,第一渲染流水线为现有技术中使用的渲染流水线,而第二渲染流水线为根据本发明改进的渲染流水线;或者第一渲染流水线为根据本发明改进的渲染流水线,而第二渲染流水线为现有技术中使用的渲染流水线;或者最优选的,第一、第二渲染流水线均为根据本发明改进的渲染流水线。
根据本发明改进的一个方面,所述步骤S1100进一步包括:
步骤S1110,解析第一三角面片,获得三个顶点的空间坐标V11={x11,y11,z11}、V12={x12,y12,z12}、V13={x13,y13,z13}。
步骤S1112,根据三个顶点空间坐标V11、V12、V13,获得三个顶点的屏幕坐标S11={Xp11,Yp11,Zp11}、S12={Xp12,Yp12,Zp12}、S13={Xp13,Yp13,Zp13}。其中Xp和Yp表示顶点在屏幕上的像素点的位置,Zp表示该顶点在垂直屏幕防线的深度。
其中,由空间坐标到屏幕坐标的具体转换可根据多种现有技术实现,现有技术的具体内容不再赘述。
步骤S1114,获得屏幕坐标下,获得第一三角面片的最小外接矩阵M1={Xmin,Ymin,Xmax,Ymax},其中Xmin和Xmax分别为{x11,x12,x13}中的最小值和最大值,Ymin和Ymax分别为{y11,y12,y13}中的最小值和最大值。
步骤S1120,在最小外接矩阵内,以深度扫描块为单位进行扫描,根据三角面片的顶点屏幕坐标,获得深度扫描块的四个角点的深度值{D1,D2,D3,D4},并计算Dmax和Dmin。Dmax为{D1,D2,D3,D4}中的最大值,Dmin为{D1,D2,D3,D4}中的最小值。深度扫描块为正方形扫描块,正方形的边长为N个像素,N为整数。如图12所示,第一三角面片的面积较大,其内部往往包括多个深度扫描块,每个深度扫描块包括N*N个像素,例如图12中所示,每个深度扫描块包括4*4=16个像素。对于每个深度扫描块,例如图12中阴影所示的扫描块,该步骤中只需要获得(例如通过现有技术中插值的方法)四个角点(B0,B3,B12,B15)的深度值,而不必获得扫描块中所有像素点的深度值,从而提升了运行效率。
步骤S1122,读取深度块缓存中对应与当前深度扫描块的最大深度值Zmax和最小深度值Zmin。深度块缓存为根据深度缓存获得的缓存,其分辨率为深度缓存的1/N*N,N为与之配合使用的深度扫描块的边长。深度块缓存中的值包括对应于深度缓存中对应于每个深度扫描块中的像素深度的最大值和最小值。如图13所示,在N=4的情况下,深度块缓存的分辨率为深度缓存的1/16,深度块缓存中仅存储了对应深度扫描块的深度缓存的最大深度值8和最小深度值1。本领域技术人员知晓,图13中的数值仅是为方便理解的示例性数据,在实际应用中,深度缓存一般采用24位或32位的定点数。
步骤S1130,如果Dmin>=Zmax,则意味着该深度扫描块所涉及的所有像素点的深度均大于或等于深度块缓存中的深度,即被深度块缓存所对应的像素点遮挡,因此整体抛弃该深度扫描块对应的像素点,不再进行第一渲染流水线的后续处理。
步骤S1132,如果Dmax<Zmin,则意味着该深度扫描块所涉及的所有像素点的深度均小于深度块缓存中的深度,即均未被深度块缓存所对应的像素点遮挡,因此该深度扫描块对应的像素点,整体通过深度测试,计算该深度扫描块的所有像素点的深度值和颜色值,并使用颜色值更新帧缓存,使用深度值更新深度缓存和深度块缓存。本领域技术人员清楚,深度值和颜色值的具体计算可以采用现有技术中常规的计算方法,不再赘述。
步骤S1134,如果Dmin<Zmax,且Dmax>=Zmin,则意味着该深度扫描块所涉及的像素点部分被遮挡,部分没有被遮挡。因此,计算该深度扫描块的所有像素点的深度值和颜色值,进行深度测试,通过深度测试的像素点的颜色值被用于更新帧缓存,深度值被用于更新深度缓存和深度块缓存。没有通过深度测试的像素点被抛弃,不再进行第一渲染流水线的后续处理。
根据本发明,N值过小,容易使得效率提升不明显,N=1时,深度扫描块退化为单个像素;N值过大,容易提升步骤S1134被执行的次数,从而降低效率。基于此,优选的,N等于3或4。
根据本发明改进的一个方面,所述步骤S1200进一步包括:
步骤S1210,解析第二三角面片,获得三个顶点的空间坐标V21={x21,y21,z21}、V12={x22,y22,z22}、V13={x23,y23,z23}。
步骤S1212,根据三个顶点空间坐标V11、V12、V13,获得三个顶点的屏幕坐标S21={Xp21,Yp21,Zp21}、S12={Xp22,Yp22,Zp22}、S23={Xp23,Yp23,Zp23}。其中Xp和Yp表示顶点在屏幕上的像素点的位置,Zp表示该顶点在垂直屏幕防线的深度。
其中,由空间坐标到屏幕坐标的具体转换可根据多种现有技术实现,现有技术的具体内容不再赘述。
根据本发明,在渲染流水线中提供了隐藏页。隐藏页为与深度缓存具有相同分辨率的缓存,隐藏页中任一位置(i,j)处的值包括Zijmax和Zijmin,其中Zijmax和Zijmin分别为深度缓存内的以{(i,j),(i+W-1,j),(i,j+H-1),(i+W-1,j+H-1)}为顶点的矩形内所有深度值的最大值和最小值。W和H为整数,优选的W=H。如图10所示,本发明中第一三角面片较大,第二三角面片的面积较小,其具有相对理想的分界线,因此更优选的,W=H>=N,如上文所述N一般取值为3或4。如图14所示深度缓存和隐藏页的一个片段的示意图,在W=H=3的情况下,虚线框内显示出深度值和Zijmax和Zijmin的映射关系。显然的,隐藏页的分辨率也可以较深度缓存的分辨率略低,例如在W=H=N=4的情况下,如果深度缓存的分辨率为1920*1280,那么隐藏页的分辨率可以为1917*1277,从而不影响使用。此外,隐藏页也可以设计为适用于使用{Xmax,Ymax}来获得隐藏页的最大值和最小值。
步骤S1214,获得屏幕坐标下,获得第二三角面片的最小外接矩阵M2={Xmin,Ymin,Xmax,Ymax},其中Xmin和Xmax分别为{x21,x22,x23}中的最小值和最大值,Ymin和Ymax分别为{y21,y22,y23}中的最小值和最大值。
步骤S1216,如果Xmax-Xmin<=W,而且Ymax-Ymin<=H,那么执行步骤S1220;否则执行第二渲染流水线的操作,即计算该第二三角面片的所有像素点的深度值和颜色值,进行深度测试,通过深度测试的像素点的颜色值被用于更新帧缓存,深度值被用于更新隐藏页和深度块缓存。没有通过深度测试的像素点被抛弃,不再进行第二渲染流水线的后续处理。。
步骤S1220,获得第二三角面片的最大深度值Dmax和最小深度值Dmin,其中Dmax为{Zp21,Zp22,Zp23}中的最大值,Dmin为{Zp21,Zp22,Zp23}中的最小值。
步骤S1222,根据{Xmin,Ymin}获得隐藏页的最大值Zmax和最小值Zmin。
步骤S1230,如果Dmin>=Zmax,则意味着该第二三角形所涉及的所有像素点的深度均大于或等于隐藏页中的深度,即被隐藏页所对应的像素点遮挡,因此整体抛弃该深度扫描块对应的像素点,不再进行第一渲染流水线的后续处理。
步骤S1232,如果Dmax<Zmin,则意味着该第二三角形所涉及的所有像素点的深度均小于隐藏页中的深度,即均未被隐藏页存所对应的像素点遮挡,因此该第二三角形对应的像素点,整体通过深度测试,计算该第二三角形的所有像素点的深度值和颜色值,并使用颜色值更新帧缓存,使用深度值更新深度缓存和隐藏页。本领域技术人员清楚,深度值和颜色值的具体计算可以采用现有技术中常规的计算方法,不再赘述。
步骤S1234,如果Dmin<Zmax,且Dmax>=Zmin,则意味着该第二三角面片所涉及的像素点部分被遮挡,部分没有被遮挡。因此,计算该第二三角面片的所有像素点的深度值和颜色值,进行深度测试,通过深度测试的像素点的颜色值被用于更新帧缓存,深度值被用于更新隐藏页和深度块缓存。没有通过深度测试的像素点被抛弃,不再进行第二渲染流水线的后续处理。
在本发明中,充分利用第一三角面片较大和第二三角面片较小的特点,分别使用深度扫描块和隐藏页的方式进行渲染处理,小规模测试显示,综合渲染效率提升约15.7%左右,取得了良好的技术效果。
此外,根据公开的本发明的说明书,本发明的其他实现对于本领域的技术人员是明显的。实施方式和/或实施方式的各个方面可以单独或者以任何组合用于本发明的系统和方法中。说明书和其中的示例应该是仅仅看作示例性,本发明的实际范围和精神由所附权利要求书表示。