专利名称:一种实现三维模型矩阵变换的方法
技术领域:
本发明涉及信息技术行业计算机虚拟现实领域,尤其涉及一种在三维渲染引擎系统底层实现三维模型矩阵变换的方法。
背景技术:
随着计算机硬件、三维图形技木、虚拟现实技术的发展,逼真的三维视觉世界正在逐步走入人们的生活,它给人们呈现的梦幻般的境界,正在引起人们的广泛关注,建立三维视图体系并进行推广和发展已经成为当前技术的热门领域。在虚拟现实领域,三维渲染引擎侧重于交互和三维动画的实时性,在三维场景中需要对三维模型进行实时的旋转、平移和缩放的矩阵变换,实时矩阵变换需要占用大量的内存资源,尤其对于场景中有大批三维模型需要进行实时变换时,对于硬件的资源需求将非常巨大,因此,在三维引擎系统底层对 于三维模型批量矩阵变换提出好的解决方案就更加重要。在三维渲染引擎系统中,当对三维场景中的三维模型进行矩阵变换如平移、缩放、旋转时,场景中的三维模型需要实时计算并更新变换后的坐标值,此时引擎底层需要实时进行大量的数学运算。对于简单的三维模型如长方体、圆球之类,实时变换的运算量相对较小,而对于复杂度较高的三维模型比如人物角色,或者对于批量人物角色同时进行矩阵变换,如果三维引擎底层仍然逐点进行实时运算,则对于硬件资源的占用将非常大,甚至可能使系统崩溃。
发明内容
(一 )要解决的技术问题为解决上述的一个或多个问题,本发明提供了一种在三维渲染引擎系统底层实现三维模型矩阵变换的方法,以使用户能够方便使用,满足用户的功能需求,同时尽量降低软件开发对硬件资源的占用率。( ニ )技术方案根据本发明的ー个方面,提供了ー种实现三维模型矩阵变换的方法。该方法包括步骤A,设置ー个对应于该三维场景的场景根节点,多个分别对应于三维场景中多个三维模型的三维模型节点,该多个三维模型节点全部继承自场景根节点,属于场景根节点的子节点;步骤B,将用户选中要编辑的三维模型对应的三维模型节点添加入矩阵变换节点,将矩阵变换节点作为场景根节点的一个子节点,将该三维模型节点作为矩阵变换节点的子节点,矩阵变换节点的坐标中心与三维模型节点的坐标中心重合;步骤C,将用户对三维模型的矩阵变换操作映射于该三维模型对应矩阵变换节点的矩阵变换操作,获得该矩阵变换节点对应的矩阵向量;步骤D,将选定被编辑三维模型上所有坐标点的坐标值与该矩阵向量进行矩阵运算,获得矩阵变换后所述三维模型上所有坐标点的坐标值,从而实现三维模型的矩阵变换。(三)有益效果
从上述技术方案可以看出,本发明三维渲染引擎系统具有下列有益效果(I)本发明中,通过矩阵变换节点进行三维模型的矩阵变换简化了三维场景实时计算的运算量,节省硬件资源的占用率;(2)本发明中,只对矩阵变换节点进行记录操作,使三维渲染引擎底层对于命令操作的记录更加简化。
图I为本发明实施例实现三维模型矩阵变换方法中初始状态下场景根节点和三维模型节点关系的示意图;图2为本发明实施例实现三维模型矩阵变换方法中操作状态下场景根节点和三维模型节点关系的示意图; 图3为本发明实施例实现多个同级三维模型矩阵变换方法中操作状态下场景根节点和三维模型节点关系的示意图;图4为本发明实施例实现不同级三维模型矩阵变换方法中操作状态下场景根节点和三维模型节点关系的示意图;图5为在实际场景下,本发明实施例实现不同级三维模型矩阵变换方法中操作状态下场景根节点和三维模型节点关系的示意具体实施例方式为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并參照附图,对本发明进一歩详细说明。虽然本文可提供包含特定值的參数的示范,但应了解,參数无需确切等于相应的值,而是可在可接受的误差容限或设计约束内近似于相应的值。在本发明的一个示例性实施例中,提出了一种在三维渲染引擎系统底层实现矩阵变换的方法。在三维场景中具有一个或多个三维模型,用户需要对该三维场景中的其中一个三维模型进行矩阵变换,则本实施例包括步骤S102,设置ー个对应于该三维场景的场景根节点,多个分别对应于三维场景中多个三维模型的三维模型节点,该多个三维模型节点全部继承自场景根节点,属于场景根节点的子节点;图I为本发明实施例实现三维模型矩阵变换方法中初始状态下场景根节点和三维模型子节点关系的示意图。如图I所示,此刻的矩阵变换节点则为虚拟存在的,即不会引入场景根节点。步骤S104,将用户选中要编辑的三维模型对应的三维模型节点添加入矩阵变换节点,矩阵变换节点成为场景根节点的一个子节点,同时该三维模型节点作为矩阵变换节点的子节点,矩阵变换节点的坐标中心与三维模型节点的坐标中心重合,如图2所示。步骤S106,将用户对三维模型的矩阵变换操作,映射于该三维模型对应矩阵变换节点的矩阵变换操作,获得该矩阵变换节点对应的矩阵向量;换句话说,用户在操作界面上对选中三维模型的矩阵变换操作,并不是直接对该三维模型对应三维模型节点进行矩阵变换操作,而是映射于与该三维模型节点同坐标中心的矩阵变换节点之上。
以用户对三维模型做平移操作为例说明,当用户希望三维场景中的三维模型从三维世界坐标系(1,2,3)平移到(2,5,8)的位置,三维模型的起初坐标中心即在世界坐标系的(1,2,3)位置,同样添加的矩阵变换节点的坐标中心也在世界坐标系的(1,2,3)位置。当用户平移三维模型至位置(2,5,8)时,三维模型的坐标中心需要经过(2-1,5-2,8-3)即三维矢量(1,3,5)的数学变换,即在X轴方向沿正方向移动1,Y轴方向沿正方向移动3,Z轴方向沿正方向移动5。三维渲染引擎底层所进行的操作是首先对矩阵变换节点经过三维矢量(1,3,5)的数学变换,即在X轴方向沿正方向移动1,Y轴方向沿正方向移动3,Z轴方向沿正方向移动5。所进行的变换矩阵向量即为三维矢量(1,3,5)。步骤S108,将选定被编辑三维模型上所有坐标点的坐标值与该矩阵向量相乗,获得矩阵变换后所述三维模型上所有坐标点的坐标值,从而实现三维模型的矩阵变换。承接步骤S106的例子,本步骤包括SlOSa:三维模型底层实现和记录了矩阵变换节点实现平移操作所进行的变换矩阵向量(1,3,5);SlOSb :选中的三维模型实现上述变换矩阵向量(1,3,5)的坐标变换。要编辑的三维模型中心坐标为(1,2,3),需要经过变换矩阵向量(1,3,5)的数学变换,即在X轴方向沿正方向移动1,Y轴方向沿正方向移动3,Z轴方向沿正方向移动5 ;SlOSc:三维模型本身会包含很多曲线曲面等,每个曲线曲面在三维场景中都会有对应的坐标值,所有的这些曲线曲面同样需要经过变换矩阵向量(1,3,5)的数学变换。此时即需要对三维模型的所有曲线曲面的所有坐标点全部进行三维矢量(1,3,5)的数学变 换。通过此运算即完成了对ー个三维模型的一次平移操作。而借助于底层矩阵变换节点的存在,仅需要记录和保存变换矩阵向量(1,3,5),而不需要记录和保存三维模型所有曲线曲面所进行的变换矩阵向量(1,3,5)的运算。步骤S110,当用户对选中三维模型编辑结束后,矩阵变换节点撤销。撤销后的矩阵变换接点成为虚拟节点,恢复步骤S102中三维场景中的拓扑结构。经过本步骤的操作,不会增大场景的节点数,同时也不改变三维场景中相应的三维拓扑结构。本实施例中,只对矩阵变换节点进行矩阵变换操作,从而节省了被编辑节点上大量坐标点的中间过程的大量变换运算,不仅使用户能够方便使用,满足用户的功能需求,同时降低了软件开发对硬件资源的占用率。通过上述实施例,对于场景中的一个三维模型可以很方便的完成矩阵变换操作,如果用户需要对场景中的多个三维模型节点同时进行相同的矩阵变换操作,即批处理运算时,选中的多个三维模型节点仍然共用一个矩阵变换节点,成为矩阵变换节点的子节点,而不需要为每ー个变换节点添加一个矩阵变换节点。在该场景下上述步骤S104包括将用户选中要编辑的多个三维模型对应的三维模型节点添加入一个矩阵变换节点,该矩阵变换节点成为场景根节点的一个子节点,同时该多个三维模型节点作为矩阵变换节点的子节点,矩阵变换节点的坐标中心与该多个三维模型节点的相对坐标中心重合,如图3所示。当然,该多个三维模型可以为同级的三维模型,也可以为不同级的三维模型,如图4所示。对于该步骤,具体实现的过程如下S104a/ :接收三维场景中用户选中的要编辑的多个三维模型节点;
S104V :对选中的多个三维模型节点添加一个矩阵变换节点,此时矩阵变换节点的坐标中心不与该多个三维模型节点中一个三维模型节点的坐标中心重合,而是根据所选三维模型的具体坐标位置,做平均计算,得出一个相对中心坐标值作为该矩阵变换节点的坐标中心。例如选中四个三维模型的坐标中心有(1,1,1), (2,2,2), (-1, -I, -I),(-2,-2,_2),则通过计算各坐标中心在每个三维轴上的平均点,得到相对中心位置(0,0,O)。上述步骤S108包括将选定被编辑多个三维模型上所有坐标点的坐标值与该矩阵向量进行矩阵运算,获得矩阵变换后所述多个三维模型上所有坐标点的坐标值,从而实现多个三维模型的矩阵变换。下面以ー个具体场景为例进行表述,实施例图示如图5。三维场景中的三维模型以节点的模式组织起来,三维场景根节点为场景中所有节点的父节点,场景中有ー个人物角色、ー头牛、一座房子、ー个球,则每个三维模型都是场景根节点的子节点,这些子节点都是平行关系。有的复杂的三维模型本身又有子节点,比如人物角色,其头、躯干、手、脚又是人 体节点的子节点。此时,人体的各个子节点就属于场景根节点的更下ー层子节点。如果对场景中的ー个人物整体或者ー头牛做矩阵变换,则采取图2的方法。如果同时对ー个人物整体和ー头牛做矩阵变换,则采取图3的方法。如果对ー个人物的头和ー头牛做矩阵变换,则可以采取图4的方法。对于矩阵变换节点的坐标中心设置以及整个场景的子节点层级关系如下述步骤实施,整体实施例示意图见图5。在该场景的三维模型的矩阵变换操作包括步骤S104a":用户用鼠标点击选中要编辑的三维模型节点,包括ー头牛和人物角色的头;步骤S104b":三维渲染引擎底层会为三维模型添加一个矩阵变换节点。矩阵变换节点的中心坐标节点可參照S104b'进行计算得到。此时场景的节点层次关系会有所改变。在执行这个编辑操作的过程中,人物角色的头和牛会成为矩阵变换节点的子节点,如图5所示;步骤S106,将用户对人物角色的头和牛的矩阵变换操作,映射于该矩阵变换节点的矩阵变换操作,获得该矩阵变换节点对应的矩阵向量;步骤S108 :将选定被编辑的人物角色的头和牛上所有坐标点的坐标值与该矩阵向量相乗,获得矩阵变换后人物角色的头和牛上所有坐标点的坐标值;步骤S110,当这些操作结束后,矩阵变换节点撤销,人物角色的头重新成为人物角色的子节点。通过本实施例,实现了处于同级或不同级的多个三维模型的矩阵变换操作,避免了对多个三维模型分别进行矩阵变换,方便了用户使用,进ー步降低了软件开发对硬件资源的占用率。同时,本方法还可以实现操作撤销。在实现操作撤销时在步骤S106之后还包括记录矩阵变换节点所对应的矩阵向量,即只记录ー个(1,3,5)的矩阵变换向量;在步骤SllO之后还包括步骤S112a,矩阵变换节点进行上述矩阵向量的逆运算,即矩阵变换节点的中心坐标由三维世界坐标系的(2,5,8)变换到原始坐标(1,2,3);S112b,该矩阵变换节点对应ー个或多个三维模型的中心节点以及所有曲线曲面的坐标点都需要经过上述矩阵变换向量的逆运算,从而实现了操作撤销,即在X轴方向沿负方向移动1,Y轴方向沿负方向移动3,Z轴方向沿负方向移动5。同时,本方法还可以实现重复撤销。在实现操作重复时在步骤S106之后还包括记录矩阵变换节点所对应的矩阵向量,即(1,3,5);
在步骤SllO之后还包括S114a :矩阵变换节点重新进行上述矩阵向量,即三维矢量(I,3,5),的数学变换,即在X轴方向沿正方向移动1,Y轴方向沿正方向移动3,Z轴方向沿正方向移动5 ;S114b :三维模型的中心节点以及所有曲线曲面的坐标点都进行上述矩阵变换向量(1,3,5)的运算,即在X轴方向沿正方向移动1,Y轴方向沿正方向移动3,Z轴方向沿正方向移动5。通过本实施例,对于编辑操作的撤销重复等记录,也只针对变换矩阵做记录,而不需要记录所有编辑节点的中间变换数据。上述只是以平移操作为例进行详细说明,对于缩放和旋转操作仍然是类似的步骤,只是进行计算的坐标变换向量会有不同而已。此外,需要说明的是,整个发明所阐述引入的矩阵变换节点主要为了简化计算和简化中间过程保存操作的数据量,并不会修改整个场景的原始节点层次关系。值得注意的是,图中未绘示或描述的元件或实现方式,为所属技术领域中普通技术人员所知的形式,并没有给出详细、具体说明。以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进ー步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.ー种实现三维模型矩阵变换的方法,包括 步骤A,设置ー个对应于该三维场景的场景根节点,多个分别对应于三维场景中多个三维模型的三维模型节点,该多个三维模型节点属于场景根节点的子节点; 步骤B,将用户选中要编辑的三维模型对应的三维模型节点添加入矩阵变换节点,将矩阵变换节点作为场景根节点的一个子节点,将该三维模型节点作为矩阵变换节点的子节点,矩阵变换节点的坐标中心与三维模型节点的坐标中心重合; 步骤C,将用户对三维模型的矩阵变换操作映射于该三维模型对应矩阵变换节点的矩阵变换操作,获得该矩阵变换节点对应的矩阵向量; 步骤D,将选定被编辑三维模型上所有坐标点的坐标值与该矩阵向量进行矩阵运算,获得矩阵变换后所述三维模型上所有坐标点的坐标值,从而实现三维模型的矩阵变换。
2.根据权利要求I所述的实现三维模型矩阵变换的方法,其中,所述用户选中要编辑的三维模型为多个,所述步骤B包括 将用户选中要编辑的多个三维模型对应的三维模型节点添加入一个矩阵变换节点,将该ー个矩阵变换节点作为场景根节点的一个子节点,同时将该多个三维模型节点作为矩阵变换节点的子节点,矩阵变换节点的坐标中心与多个三维模型节点的相对坐标中心重合。
3.根据权利要求2所述的实现三维模型矩阵变换的方法,其中,所述用户选中要编辑的三维模型为同级或不同级的三维模型。
4.根据权利要求I所述的实现三维模型矩阵变换的方法,其中, 所述步骤C之后还包括记录矩阵变换节点所对应的矩阵向量; 所述步骤D之后还包括矩阵变换节点进行上述矩阵向量的逆运算;该矩阵变换节点对应三维模型的中心节点以及所有曲线曲面的坐标点都经过上述矩阵变换向量的逆运算,从而实现了三维模型矩阵变换的撤销。
5.根据权利要求I所述的实现三维模型矩阵变换的方法,其中, 在步骤C之后还包括记录矩阵变换节点所对应的矩阵向量; 在步骤D之后还包括矩阵变换节点重新进行上述矩阵向量的运算;三维模型的中心节点以及所有曲线曲面的坐标点都进行上述矩阵变换向量运算。
6.根据权利要求I至5中任ー项所述的实现三维模型矩阵变换的方法,其中,所述步骤D之后还包括 当用户对选中三维模型编辑结束后,撤销矩阵变换节点,撤销后的矩阵变换接点成为虚拟节点,恢复场景根节点和三维模型节点的拓扑结构。
7.根据权利要求I至5中任ー项所述的实现三维模型矩阵变换的方法,其中,所述步骤C中,用户对三维模型的矩阵变换操作包括以下操作中的ー种或多种平移、缩放和旋转。
全文摘要
本发明公开了一种实现三维模型矩阵变换的方法。该方法包括设置一个对应于该三维场景的场景根节点,多个分别对应于三维场景中多个三维模型的三维模型节点;将用户选中要编辑的三维模型对应的三维模型节点添加入矩阵变换节点,将矩阵变换节点作为场景根节点的一个子节点,将该三维模型节点作为矩阵变换节点的子节点;将用户对三维模型的矩阵变换操作映射于该三维模型对应矩阵变换节点的矩阵变换操作,获得该矩阵变换节点对应的矩阵向量;将选定被编辑三维模型上所有坐标点的坐标值与该矩阵向量进行矩阵运算,获得矩阵变换后所述三维模型上所有坐标点的坐标值,从而实现三维模型的矩阵变换。本发明简化了三维场景实时计算的运算量,节省硬件资源的占用率。
文档编号G06T19/00GK102663829SQ20121007411
公开日2012年9月12日 申请日期2012年3月20日 优先权日2012年3月20日
发明者任雁鹏, 曹玮, 梁利平 申请人:中国科学院微电子研究所