CN103679792A - 一种三维模型的渲染方法和系统 - Google Patents
一种三维模型的渲染方法和系统 Download PDFInfo
- Publication number
- CN103679792A CN103679792A CN201310724190.7A CN201310724190A CN103679792A CN 103679792 A CN103679792 A CN 103679792A CN 201310724190 A CN201310724190 A CN 201310724190A CN 103679792 A CN103679792 A CN 103679792A
- Authority
- CN
- China
- Prior art keywords
- assembly
- state
- perspective projection
- projection matrix
- matrix
- 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
Images
Abstract
本发明适用于三维显示技术领域,提供了一种三维模型的渲染方法和系统,所述方法包括:通过三维模型解析工具将待解析三维模型解析为多个组件;通过三维图形程序接口将所述多个组件的数据发送到终端的图形处理器;创建用于记录所述多个组件状态的状态链表;通过交互设备的碰撞选择组件,从所述状态链表获取所选择组件的第一模型透视投影矩阵,并更新为第二模型透视投影矩阵;将所述第二模型透视投影矩阵确定为第三模型透视投影矩阵,渲染所述第三模型透视投影矩阵。通过本发明,可减少三维模型在拆分组合的过程中与渲染的交互过程。
Description
技术领域
本发明属于三维显示技术领域,尤其涉及一种三维模型的渲染方法和系统。
背景技术
随着计算机技术和显示技术的不断发张,如何使用三维技术带来的卓越视觉效果和丰富多彩的娱乐功能已经成为了三维显示技术领域的热点,其中与三维模型的交互是一项非常吸引人的研究方向。现有技术中,为了更好的渲染出不同的三维模型,需要通过OpenGL或者Direct3D等图形程序接口进行复杂的开发才能够完成,特别是在三维模型组件控制和三维模型组件渲染的交互过程中,会消耗终端大量的资源。
发明内容
本发明实施例的目的在于提供一种三维模型的渲染方法和系统,以解决现有技术在三维模型组件控制和三维模型组件渲染的过程中,会消耗终端大量资源的问题。
本发明实施例的第一方面,提供一种三维模型的渲染方法,所述方法包括:
通过三维模型解析工具将待解析三维模型解析为多个组件;
通过三维图形程序接口将所述多个组件的数据发送到终端的图形处理器,并将所述多个组件的三维点坐标和用于记录所述多个组件相邻关系的索引保存到终端的内存,所述索引与所述三维点坐标相关联;
创建用于记录所述多个组件状态的状态链表,所述状态链表包括:当前所有组件的索引、所有组件的位置坐标、以欧拉角表示的所有组件的方位角和渲染组件需要的模型透视投影矩阵,所述模型透视投影矩阵包括:模型矩阵、视图矩阵、透视投影矩阵;
通过交互设备的碰撞选择组件,从所述状态链表获取所选择组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备相关的第二模型透视投影矩阵;
将所述第二模型透视投影矩阵确定为第三模型透视投影矩阵,通过所述三维图形程序接口将所述第三模型透视投影矩阵发送到所述图形处理器,并通过所述图形处理器将所述第三模型透视投影矩阵对应的三维模型渲染出来,所述第三模型透视投影矩阵为进行渲染的模型透视投影矩阵。
第二方面,本发明实施例提供了一种三维模型的渲染系统,所述系统包括:
解析单元,用于通过三维模型解析工具将待解析三维模型解析为多个组件;
发送单元,用于通过三维图形程序接口将所述解析单元解析的所有组件的数据发送到终端的图形处理器,并将所述所有组件的三维点坐标和用于记录所述所有组件相邻关系的索引保存到终端的内存,所述索引与所述三维点坐标相关联;
创建单元,用于在所述发送单元发送所有组件的数据、三维点坐标和索引之后,创建用于记录所述所有组件状态的状态链表,所述状态链表包括:当前所有组件的索引、所有组件的位置坐标、以欧拉角表示的所有组件的方位角和渲染组件需要的模型透视投影矩阵,所述模型透视投影矩阵包括:模型矩阵、视图矩阵、透视投影矩阵;
更新单元,用于通过交互设备的碰撞选择组件,从所述创建单元创建的状态链表获取所选择组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备相关的第二模型透视投影矩阵;
渲染单元,用于将所述更新单元更新的第二模型透视投影矩阵确定为第三模型透视投影矩阵,通过所述三维图形程序接口将所述第三模型透视投影矩阵发送到所述图形处理器,并通过所述图形处理器将所述第三模型透视投影矩阵对应的三维模型渲染出来,所述第三模型透视投影矩阵为进行渲染的模型透视投影矩阵。
本发明实施例与现有技术相比存在的有益效果是:本发明实施例将三维模型拆分组合与渲染的过程分解开,通过拆分组合的过程获取待渲染组件的模型透视投影矩阵,并根据待渲染组件的模型透视投影矩阵将待渲染组件渲染出来,极大的减少了三维模型在拆分组合的过程中与渲染的交互过程。而且模型透视投影矩阵中的组件的位置坐标只在内存中保存一份,使用时可以通过索引从内存中直接获取所述位置坐标,减少了终端内存的消耗。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的三维模型渲染方法的流程图;
图2为本发明实施例提供的三维模型渲染系统的结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例将三维模型拆分组合与渲染的过程分解开,通过拆分组合的过程获取待渲染组件的模型透视投影矩阵,并根据待渲染组件的模型透视投影矩阵将待渲染组件渲染出来,极大的减少了三维模型在拆分组合的过程中与渲染的交互过程。而且模型透视投影矩阵中的组件的位置坐标只在内存中保存一份,使用时可以通过索引从内存中直接获取所述位置坐标,减少了终端内存的消耗。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
实施例一
如图1所示为本发明实施例提供的三维模型渲染方法的流程图,所述方法包括以下步骤:
在步骤S101中,通过三维模型解析工具将待解析三维模型解析为多个组件。
在本发明实施例中,组件是组成三维模型的基本单位,通过对组件的移动可以在后续步骤中渲染出不同的三维模型。终端在获取了待解析三维模型之后,通过三维模型解析工具将该待解析三维模型解析为多个组件,其中,三维模型解析工具可以通过工程师自己编写的程序完成,也可以借助三维模型文件解析库(如:Open Asset Import Library)的帮助。
在步骤S102中,通过三维图形程序接口将所述多个组件的数据发送到终端的图形处理器(Graphic Processing Unit,GPU),并将所述多个组件的三维点坐标OBJi(i=0~nobj)和用于记录所述所有组件相邻关系的索引Indexnear保存到终端的内存,所述索引Indexnear与所述三维点坐标OBJi(i=0~nobj)相关联。
在本发明实施例中,终端在获取了组件之后,通过三维图形程序接口(OpenGL、Direct3D等)将所有组件的数据发送到终端的GPU,其中,组件的数据包括但不限于:三维点坐标、法线坐标、纹理坐标、灯光信息和材质信息,并将所有组件的三维点坐标OBJi(i=0~nobj)和用于记录所有组件相邻关系的索引Indexnear保存到终端的内存,所述索引Indexnear与所述三维点坐标OBJi(i=0~nobj)相关联。
在步骤S103中,创建用于记录所述多个组件状态的状态链表Statelist,所述状态链表包括:当前所有组件的索引Indexobj、所有组件的位置坐标(Xp Yp Zp)、以欧拉角表示的所有组件的方位角(r p y)和渲染组件需要的模型透视投影矩阵Matrixmvp,所述模型透视投影矩阵Matrixmvp包括:模型矩阵Matrixmodel、视图矩阵Matrixview、透视投影矩阵Matrixpers。
在本发明实施例中,状态链表表示为Statelist,当前所有组件的索引用Indexobj表示,所有组件的位置坐标用(Xp Yp Zp)表示,以欧拉角表示的所有组件的方位角用(r p y)表示,渲染组件需要的模型视图投影矩阵用Matrixmvp表示,模型透视投影矩阵包括的矩阵表示为:模型矩阵Matrixmodel、视图矩阵Matrixview、透视投影矩阵Matrixpers。一个三维模型可以包括多个状态,每拆分或重组组件之后生成的新组件创建一个新的状态,用于拆分或重组的组件从原状态中删除,举例说明如下:
设一个三维模型的状态链表为Statelist1,该状态链表中包括三个组件,记为State(1)、State(2)、State(3),其中组件2、组件3通过组合之后生成了一个新组件2’,则2’生成一个新的状态链表State(2’),在状态链表Statelist内将State2和State3删除,把状态State(2’)加入状态链表Statelist内,此时状态链表Statelist中就包含两个状态State(1)和State(2’)。
在步骤S104中,通过交互设备的碰撞选择组件,从所述状态链表Statelist获取所选择组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备相关的第二模型透视投影矩阵。
在本发明实施例中,为了控制组件的移动,需要使用交互设备,与三维模型进行交互的交互设备可以有很多种,既可以直接使用手指进行控制移动、也可以使用定制的控制笔、控制棒等等进行控制移动,将组件的模型透视投影矩阵更新为与交互设备相关,可以使组件随着交互设备的移动而移动。所述通过交互设备的碰撞选择组件,从所述状态链表Statelist获取所选择组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备相关的第二模型透视投影矩阵,包括:
1、通过碰撞检测算法检测交互设备是否碰撞到组件,如果碰撞到,通过计算确定被碰撞的组件。
在本发明实施例中,交互设备是否碰撞到模型的组件,是通过碰撞检测算法来检测的,三维空间内的碰撞检测比较复杂,现在已有一些成熟的碰撞检测引擎,比如Havok、PhysX、Bullet等,可以借助这些碰撞检测引擎实现碰撞的检测,当检测到进行了碰撞之后,通过计算确定被碰撞的组件。所述通过计算确定被碰撞的组件的步骤包括:
a、通过碰撞检测算法计算出所有碰撞点的坐标(Xcj Ycj Zcj)。
b、将所述碰撞点坐标(Xcj Ycj Zcj)与状态链表Statelist中的所有组件的三维点坐标进行比对,确定所述碰撞点坐标所属的组件。
2、从状态链表Statelist中将确定的所述组件的状态单独列为状态Stateproc,从所述状态Stateproc中获取所述组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备的位置和方位角信息相关的第二模型透视投影矩阵。
在本发明实施例中,在确定了被碰撞组件之后,将该组件的状态单独列为一个状态Stateproc,从上述状态Stateproc中获取被碰撞组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备的位置和方位角信息相关的第二模型透视投影矩阵。从状态链表Statelist中将所述组件的状态单独列为状态Stateproc,包括:
a、如果所述待解析三维模型只包括被碰撞组件一个组件,则将其对应的状态列为Stateproc;或者,
b、如果所述待解析三维模型包括被碰撞组件在内的多个组件,则创建新的状态Statenew,将所述被碰撞组件的索引存储到所述Statenew,并将被碰撞组件状态内的信息存储到所述Statenew,将所述Statenew列为状态链表Stateproc,同时在状态链表Statelist内移除被碰撞组件的State。所述被碰撞组件在State内的信息包括:被碰撞组件的位置坐标、以欧拉角表示的被碰撞组件的方位角和渲染被碰撞组件需要的模型透视投影矩阵。
所述将所述第一模型透视投影矩阵更新为与所述交互设备的位置和方位角信息相关的第二模型透视投影矩阵,包括:
根据公式将第一模型透视投影矩阵更新为第二模型透视投影矩阵:
Matrixmvp=Matrixper×Matrixview×Matrixmodel
其中,在Matrixmodel的计算公式中,(r p y)与(xp yp zp)分别是被碰撞组件的方位角与位置坐标,对于不同的交互设备,(r p y)与(xp yp zp)对应的计算方式也不同,比如对于控制笔,(r p y)与(xp yp zp)可以设置为控制笔的方位角和碰撞点坐标,对于其它的交互设备,可以根据实际情况通过简单的数学计算获取符合实际情况的值;Matrixview是OpenGL渲染时需要的视图矩阵,(Ux Uy Uz)、(Vx Vy Vz)、(Nx Ny Nz)和(xcamera ycamera zcamera)分别是摄像机的右方向向量、上方向向量、朝向向量和位置坐标,是三维图形程序接口渲染时必须根据实际情况设置的参数;Matrixpers是三维图形程序接口渲染时需要的投影矩阵,ar是显示窗口的纵横比,α是三维图形程序接口成像的视角,near与far是三维图形程序接口成像时能够看到的最近和最远距离。
在步骤S105中,将所述第二模型透视投影矩阵确定为第三模型透视投影矩阵,通过所述三维图形程序接口将所述第三模型透视投影矩阵发送到所述GPU,并通过所述GPU将所述第三模型透视投影矩阵对应的三维模型渲染出来,所述第三模型透视投影矩阵为进行渲染的模型透视投影矩阵。
在本发明实施例中,终端将第二模型透视投影矩阵确定为进行渲染的模型透视投影矩阵(即第三模型透视投影矩阵),并通过三维图形程序接口将第三模型透视投影矩阵发送到终端的GPU,GPU根据第三模型透视投影矩阵将对应的三维模型渲染出来。所述将所述第二模型透视投影矩阵确定为第三模型透视投影矩阵,包括:
1、如果所述待解析三维模型只包括被碰撞组件一个组件,则将所述第二模型透视投影矩阵确定为第三模型透视投影矩阵;或者,
2、如果所述待解析三维模型包括被碰撞组件在内的多个组件,将所述被碰撞组件设为第一组件,通过所述碰撞检测算法的计算获取与所述被碰撞组件发生碰撞的第二组件,通过所述索引Indexnear确定所述第一组件与所述第二组件是否为相邻组件,如果是则把第一组件的索引存入到所述第二组件中,用加入所述第一组件的索引的第二组件的位置坐标替换所述第二模型透视投影矩阵的位置坐标,并将经过所述替换的第二模型透视投影矩阵确定为第三模型透视投影矩阵。
本发明实施例,将三维模型拆分组合与渲染的过程分解开,通过拆分组合的过程获取待渲染组件的模型透视投影矩阵,终端根据待渲染组件的模型透视投影矩阵将待渲染组件渲染出来,极大的减少了三维模型在拆分组合的过程中与渲染的交互过程,并且模型透视投影矩阵中的组件的位置坐标只在内存中保存一份,使用时可以通过索引从内存中的获取位置坐标,减少了终端内存的消耗。
实施例二
如图2所示为本发明提供的实施例的三维模型渲染系统的结构图,所述结构包括:
解析单元201,用于通过三维模型解析工具将待解析三维模型解析为多个组件。
在本发明实施例中,组件是组成三维模型的基本单位,通过对组件的移动可以渲染出不同的三维模型。终端在获取了待解析三维模型之后,解析单元201通过三维模型解析工具将该待解析三维模型解析为多个组件,其中,三维模型解析工具可以通过工程师自己编写的程序完成,也可以借助三维模型文件解析库(如:Open Asset Import Library)的帮助。
发送单元202,用于通过三维图形程序接口将所述解析单元201解析的所有组件的数据发送到终端的图形处理器(Graphic Processing Unit,GPU),并将所述所有组件的三维点坐标OBJi(i=0~nobj)和用于记录所述所有组件相邻关系的索引Indexnear保存到终端的内存,所述索引Indexnear与所述三维点坐标OBJi(i=0~nobj)相关联。
在本发明实施例中,终端在获取了组件之后,发送单元202通过三维图形程序接口(OpenGL、Direct3D等)将组件的数据发送到终端的GPU,其中,组件的数据包括但不限于:三维点坐标、法线坐标、纹理坐标、灯光信息和材质信息,并将所有组件的三维点坐标OBJi(i=0~nobj)和用于记录所有组件相邻关系的索引Indexnear保存到终端的内存,所述索引Indexnear与所述三维点坐标OBJi(i=0~nobj)相关联。
创建单元203,用于在所述发送单元202发送所有组件的数据、三维点坐标OBJi(i=0~nobj)和索引Indexnear之后,创建用于记录所述所有组件状态的状态链表Statelist,所述状态链表包括:当前所有组件的索引Indexobj、所有组件的位置坐标(Xp Yp Zp)、以欧拉角表示的所有组件的方位角(r p y)和渲染组件需要的模型透视投影矩阵Matrixmvp,所述模型透视投影矩阵Matrixmvp包括:模型矩阵Matrixmodel、视图矩阵Matrixview、透视投影矩阵Matrixpers。
在本发明实施例中,创建单元203创建的状态链表表示为Statelist,当前所有组件的索引用Indexobj表示,所有组件的位置坐标用(Xp Yp Zp)表示,以欧拉角表示的所有组件的方位角用(r p y)表示,渲染组件需要的模型视图投影矩阵用Matrixmvp表示,模型透视投影矩阵包括的矩阵表示为:模型矩阵Matrixmodel、视图矩阵Matrixview、透视投影矩阵Matrixpers。一个三维模型可以包括多个状态链表,每拆分或重组组件之后生成的新组件创建一个新的状态链表,用于拆分或重组的组件从原状态链表中删除,举例说明如下:
设一个三维模型的状态链表为Statelist,该状态链表中包括三个组件,记为State(1)、State(2)、State(3),其中组件2、组件3通过组合之后生成了一个新组件2’,则2’生成一个新的状态State(2’),在状态链表Statelist内将State2和State3删除,把State(2’)加入到状态链表Statelist内,此时状态链表Statelist中就包含两个状态State(1)和State(2’)。
更新单元204,用于通过交互设备的碰撞选择组件,从所述创建单元203创建的状态链表Statelist获取所述组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备相关的第二模型透视投影矩阵。
在本发明实施例中,为了控制组件的移动,需要使用交互设备,与三维模型进行交互的交互设备可以有很多种,既可以直接使用手指进行控制移动、也可以使用定制的控制笔、控制棒等等进行控制移动,更新单元204将组件的模型透视投影矩阵更新为与交互设备相关,可以使组件随着交互设备的移动而移动。所述更新单元204,包括:
确定子单元2041,用于通过碰撞检测算法检测交互设备是否碰撞到组件,如果碰撞到,通过计算确定被碰撞的组件。
在本发明实施例中,交互设备是否碰撞到模型的组件,是通过碰撞检测算法来检测的,三维空间内的碰撞检测比较复杂,现在已有一些成熟的碰撞检测引擎,比如Havok、PhysX、Bullet等,计算子单元2041可以借助这些碰撞检测引擎实现碰撞的检测,当检测到进行了碰撞之后,通过计算确定被碰撞的组件。确定子单元2041通过计算确定被碰撞的组件的步骤包括:
a、通过碰撞检测算法计算出所有碰撞点的坐标(Xcj Ycj Zcj)。
b、将所述碰撞点坐标(Xcj Ycj Zcj)与状态链表Statelist中的所有组件的三维点坐标进行比对,确定所述碰撞点坐标所属的组件。
更新子单元2042,用于从状态链表Statelist中将所述确定子单元2041确定的组件的状态单独列为状态Stateproc,从所述状态Stateproc中获取所述组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备的位置和方位角信息相关的第二模型透视投影矩阵。
在本发明实施例中,在确定了被碰撞组件之后,更新子单元2042将该组件的状态单独列为一个状态Stateproc,从上述状态Stateproc中获取被碰撞组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备的位置和方位角信息相关的第二模型透视投影矩阵。更新子单元2042从状态链表Statelist中将所述组件的状态单独列为状态链表Stateproc,包括:
a、如果所述待解析三维模型只包括被碰撞组件一个组件,则将其对应的状态列为Stateproc;或者,
b、如果所述待解析三维模型包括被碰撞组件在内的多个组件,则创建新的状态链表Statenew,将所述被碰撞组件的索引存储到所述Statenew,并将被碰撞组件状态内的信息存储到所述Statenew,将所述Statenew列为状态链表Stateproc,同时在状态链表Statelist内移除被碰撞组件的State,所述被碰撞组件在State内的信息包括:被碰撞组件的位置坐标、以欧拉角表示的被碰撞组件的方位角和渲染被碰撞组件需要的模型透视投影矩阵。
所述将所述第一模型透视投影矩阵更新为与所述交互设备的位置和方位角信息相关的第二模型透视投影矩阵,包括:
根据以下公式更新将第一模型透视投影矩阵更新为第二模型透视投影矩阵:
Matrixmvp=Matrixper×Matrixview×Matrixmodel
其中,在Matrixmodel的计算公式中,(r p y)与(xp yp zp)分别是被碰撞组件的方位角与位置坐标,对于不同的交互设备,(r p y)与(xp yp zp)对应的计算方式也不同,比如对于控制笔,(r p y)与(xp yp zp)可以设置为控制笔的方位角和碰撞点坐标,对于其它的交互设备,可以根据实际情况通过简单的数学计算获取符合实际情况的值;Matrixview是OpenGL渲染时需要的视图矩阵,(Ux Uy Uz)、(Vx Vy Vz)、(Nx Ny Nz)和(xcamera ycamera zcamera)分别是摄像机的右方向向量、上方向向量、朝向向量和位置坐标,是三维图形程序接口渲染时必须根据实际情况设置的参数;Matrixpers是三维图形程序接口渲染时需要的投影矩阵,ar是显示窗口的纵横比,α是三维图形程序接口成像的视角,near与far是三维图形程序接口成像时能够看到的最近和最远距离。需要说明的是上述计算公式为三维图形程序接口领域的技术人员的公知常识。
渲染单元205,用于将所述更新单元204更新的第二模型透视投影矩阵确定为第三模型透视投影矩阵,通过所述三维图形程序接口将所述第三模型透视投影矩阵发送到所述GPU,并通过所述GPU将所述第三模型透视投影矩阵对应的三维模型渲染出来,所述第三模型透视投影矩阵为进行渲染的模型透视投影矩阵。
在本发明实施例中,渲染单元205将第二模型透视投影矩阵确定为进行渲染的模型透视投影矩阵(即第三模型透视投影矩阵),并通过三维图形程序接口将第三模型透视投影矩阵发送到终端的GPU,GPU根据第三模型透视投影矩阵将对应的三维模型渲染出来。所述渲染单元205,包括:
直接确定子单元2051,用于如果所述待解析三维模型只包括被碰撞组件一个组件,则将所述第二模型透视投影矩阵确定为第三模型透视投影矩阵;或者,
间接确定子单元2052,用于如果所述待解析三维模型包括被碰撞组件在内的多个组件,将所述被碰撞组件设为第一组件,通过所述碰撞检测算法的计算获取与所述被碰撞组件发生碰撞的第二组件,通过所述索引Indexnear确定所述第一组件与所述第二组件是否为相邻组件,如果是则把第一组件的索引存入到所述第二组件中,用加入所述第一组件的索引的第二组件的位置坐标替换所述第二模型透视投影矩阵的位置坐标,并将经过所述替换的第二模型透视投影矩阵确定为第三模型透视投影矩阵。
本发明实施例将三维模型拆分组合与渲染的过程分解开,通过拆分组合的过程获取待渲染组件的模型透视投影矩阵,并根据待渲染组件的模型透视投影矩阵将待渲染组件渲染出来,极大的减少了三维模型在拆分组合的过程中与渲染的交互过程。而且模型透视投影矩阵中的组件的位置坐标只在内存中保存一份,使用时可以通过索引从内存中直接获取所述位置坐标,减少了终端内存的消耗。
本领域普通技术人员可以理解为上述实施例所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。上述装置中单元、模块的具体工作过程,可以参考前述方法实施例的对应过程,在此不再赘述。
本领域普通技术人员还可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以在存储于一计算机可读取存储介质中,所述的存储介质,包括ROM/RAM、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种三维模型的渲染方法,其特征在于,所述方法包括:
通过三维模型解析工具将待解析三维模型解析为多个组件;
通过三维图形程序接口将所述多个组件的数据发送到终端的图形处理器,并将所述多个组件的三维点坐标和用于记录所述多个组件相邻关系的索引保存到终端的内存,所述索引与所述三维点坐标相关联;
创建用于记录所述多个组件状态的状态链表,所述状态链表包括:当前所有组件的索引、所有组件的位置坐标、以欧拉角表示的所有组件的方位角和渲染组件需要的模型透视投影矩阵,所述模型透视投影矩阵包括:模型矩阵、视图矩阵、透视投影矩阵;
通过交互设备的碰撞选择组件,从所述状态链表获取所选择组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备相关的第二模型透视投影矩阵;
将所述第二模型透视投影矩阵确定为第三模型透视投影矩阵,通过所述三维图形程序接口将所述第三模型透视投影矩阵发送到所述图形处理器,并通过所述图形处理器将所述第三模型透视投影矩阵对应的三维模型渲染出来,所述第三模型透视投影矩阵为进行渲染的模型透视投影矩阵。
2.如权利要求1所述的方法,其特征在于,所述通过交互设备的碰撞选择组件,从所述状态链表获取所选择组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备相关的第二模型透视投影矩阵包括:
通过碰撞检测算法检测交互设备是否碰撞到组件,如果碰撞到,通过计算确定被碰撞的组件;
从所述状态链表中将确定的所述组件的状态单独列为状态Stateproc,从所述状态链表中获取该组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备的位置和方位角信息相关的第二模型透视投影矩阵。
3.如权利要求2所述的方法,其特征在于,所述从所述状态链表中将确定的所述组件的状态单独列为状态Stateproc包括:
如果所述待解析三维模型只包括被碰撞组件一个组件,则将其所对应的状态列为状态Stateproc;或者,
如果所述待解析三维模型包括被碰撞组件在内的多个组件,则移除所述被碰撞组件在所述状态链表内的状态,创建新的状态Statenew,将所述被碰撞组件的索引存储到所述状态Statenew,并将所述被碰撞组件在所述状态链表内的信息存储到所述状态Statenew,将所述状态Statenew列为状态Stateproc,并加入到所述状态链表内,所述被碰撞组件在所述状态链表内的信息包括:被碰撞组件的位置坐标、以欧拉角表示的被碰撞组件的方位角和渲染被碰撞组件需要的模型透视投影矩阵。
4.如权利要求3所述的方法,其特征在于,所述将所述第一模型透视投影矩阵更新为与所述交互设备的位置和方位角信息相关的第二模型透视投影矩阵,包括:
根据公式将第一模型透视投影矩阵更新为第二模型透视投影矩阵:
Matrixmvp=Matrixper×Matrixview×Matrixmodel
其中,在Matrixmodel的计算公式中,(r p y)与(xp yp zp)分别是被碰撞组件的方位角与位置坐标,Matrixview是OpenGL渲染时需要的视图矩阵,(Ux Uy Uz)、(Vx Vy Vz)、(Nx Ny Nz)和(xcamera ycamera zcamera)分别是摄像机的右方向向量、上方向向量、朝向向量和位置坐标;Matrixpers是三维图形程序接口渲染时需要的投影矩阵,ar是显示窗口的纵横比,α是三维图形程序接口成像的视角,near与far是三维图形程序接口成像时能够看到的最近和最远距离。
5.如权利要求1所述的方法,其特征在于,所述将所述第二模型透视投影矩阵确定为第三模型透视投影矩阵,包括:
如果所述待解析三维模型只包括被碰撞组件一个组件,则将所述第二模型透视投影矩阵确定为第三模型透视投影矩阵;或者,
如果所述待解析三维模型包括被碰撞组件在内的多个组件,将所述被碰撞组件设为第一组件,通过所述碰撞检测算法的计算获取与所述被碰撞组件发生碰撞的第二组件,通过所述索引Indexnear确定所述第一组件与所述第二组件是相邻组件,则把第一组件的索引存入到所述第二组件中,用加入所述第一组件的索引的第二组件的位置坐标替换所述第二模型透视投影矩阵的位置坐标,并将经过所述替换的第二模型透视投影矩阵确定为第三模型透视投影矩阵。
6.一种三维模型的渲染系统,其特征在于,所述系统包括:
解析单元,用于通过三维模型解析工具将待解析三维模型解析为多个组件;
发送单元,用于通过三维图形程序接口将所述解析单元解析的所有组件的数据发送到终端的图形处理器,并将所述所有组件的三维点坐标和用于记录所述所有组件相邻关系的索引保存到终端的内存,所述索引与所述三维点坐标相关联;
创建单元,用于在所述发送单元发送所有组件的数据、三维点坐标和索引之后,创建用于记录所述所有组件状态的状态链表,所述状态链表包括:当前所有组件的索引、所有组件的位置坐标、以欧拉角表示的所有组件的方位角和渲染组件需要的模型透视投影矩阵,所述模型透视投影矩阵包括:模型矩阵、视图矩阵、透视投影矩阵;
更新单元,用于通过交互设备的碰撞选择组件,从所述创建单元创建的状态链表获取所选择组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备相关的第二模型透视投影矩阵;
渲染单元,用于将所述更新单元更新的第二模型透视投影矩阵确定为第三模型透视投影矩阵,通过所述三维图形程序接口将所述第三模型透视投影矩阵发送到所述图形处理器,并通过所述图形处理器将所述第三模型透视投影矩阵对应的三维模型渲染出来,所述第三模型透视投影矩阵为进行渲染的模型透视投影矩阵。
7.如权利要6所述的系统,其特征在于,所述更新单元,包括:
确定子单元,用于通过碰撞检测算法检测交互设备是否碰撞到组件,如果碰撞到,通过计算确定被碰撞的组件;
更新子单元,用于从所述状态链表中将所述确定子单元确定的组件的状态单独列为状态Stateproc,从所述状态链表中获取该组件的第一模型透视投影矩阵,并将所述第一模型透视投影矩阵更新为与所述交互设备的位置和方位角信息相关的第二模型透视投影矩阵。
8.如权利要求7所述的系统,其特征在于,所述更新子单元从所述状态链表中将所述组件的状态单独列为状态Stateproc,包括:
如果所述待解析三维模型只包括被碰撞组件一个组件,则将其所对应的状态列为状态Stateproc;或者,
如果所述待解析三维模型包括被碰撞组件在内的多个组件,则移除所述被碰撞组件在所述状态链表内的状态,创建新的状态Statenew,将所述被碰撞组件的索引存储到所述状态Statenew,并将所述被碰撞组件在所述状态链表内的信息存储到所述状态Statenew,将所述状态Statenew列为状态Stateproc,并加入到所述状态链表内,所述被碰撞组件在所述状态链表内的信息包括:被碰撞组件的位置坐标、以欧拉角表示的被碰撞组件的方位角和渲染被碰撞组件需要的模型透视投影矩阵。
9.如权利要求8所述的系统,其特征在于,所述更新子单元将所述第一模型透视投影矩阵更新为与所述交互设备的位置和方位角信息相关的第二模型透视投影矩阵,包括:
根据公式将第一模型透视投影矩阵更新为第二模型透视投影矩阵:
Matrixmvp=Matrixper×Matrixview×Matrixmodel
其中,在Matrixmodel的计算公式中,(r p y)与(xp yp zp)分别是被碰撞组件的方位角与位置坐标,Matrixview是OpenGL渲染时需要的视图矩阵,(Ux Uy Uz)、(Vx Vy Vz)、(Nx Ny Nz)和(xcamera ycamera zcamera)分别是摄像机的右方向向量、上方向向量、朝向向量和位置坐标;Matrixpers是三维图形程序接口渲染时需要的投影矩阵,ar是显示窗口的纵横比,α是三维图形程序接口成像的视角,near与far是三维图形程序接口成像时能够看到的最近和最远距离。
10.如权利要求6所述的系统,其特征在于,所述渲染单元,包括:
直接确定子单元,用于如果所述待解析三维模型只包括被碰撞组件一个组件,则将所述第二模型透视投影矩阵确定为第三模型透视投影矩阵;或者,
间接确定子单元,用于如果所述待解析三维模型包括被碰撞组件在内的多个组件,将所述被碰撞组件设为第一组件,通过所述碰撞检测算法的计算获取与所述被碰撞组件发生碰撞的第二组件,通过所述索引Indexnear确定所述第一组件与所述第二组件是否为相邻组件,如果是则把第一组件的索引存入到所述第二组件中,用加入所述第一组件的索引的第二组件的位置坐标替换所述第二模型透视投影矩阵的位置坐标,并将经过所述替换的第二模型透视投影矩阵确定为第三模型透视投影矩阵。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310724190.7A CN103679792B (zh) | 2013-12-24 | 2013-12-24 | 一种三维模型的渲染方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310724190.7A CN103679792B (zh) | 2013-12-24 | 2013-12-24 | 一种三维模型的渲染方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103679792A true CN103679792A (zh) | 2014-03-26 |
CN103679792B CN103679792B (zh) | 2017-08-25 |
Family
ID=50317234
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310724190.7A Active CN103679792B (zh) | 2013-12-24 | 2013-12-24 | 一种三维模型的渲染方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103679792B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104794316A (zh) * | 2015-05-20 | 2015-07-22 | 福州大学 | 一种3d模型拆分与组合的方法 |
CN105069832A (zh) * | 2015-08-13 | 2015-11-18 | 中国航空工业集团公司西安飞机设计研究所 | 一种面向可变显示元素的运行时渲染方法 |
CN107564089A (zh) * | 2017-08-10 | 2018-01-09 | 腾讯科技(深圳)有限公司 | 三维图像处理方法、装置、存储介质和计算机设备 |
CN108009124A (zh) * | 2017-11-29 | 2018-05-08 | 天津聚飞创新科技有限公司 | 旋转矩阵计算方法及装置 |
CN109145688A (zh) * | 2017-06-28 | 2019-01-04 | 武汉斗鱼网络科技有限公司 | 视频图像的处理方法及装置 |
CN112070910A (zh) * | 2020-11-13 | 2020-12-11 | 蚂蚁智信(杭州)信息技术有限公司 | 数据处理方法及装置 |
CN114470786A (zh) * | 2022-01-27 | 2022-05-13 | 北京字跳网络技术有限公司 | 帧同步数据处理方法、装置、可读介质和电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060176295A1 (en) * | 2003-05-30 | 2006-08-10 | Lattice Technology, Inc. | 3-Dimensional graphics data display device |
CN101996073A (zh) * | 2009-08-31 | 2011-03-30 | 阿里巴巴集团控股有限公司 | 一种组件渲染方法及装置 |
CN102509331A (zh) * | 2011-10-25 | 2012-06-20 | 江苏南大先腾信息产业有限公司 | 一种基于三维引擎的动态模型搭建方法 |
CN103413343A (zh) * | 2013-08-30 | 2013-11-27 | 广州市久邦数码科技有限公司 | 一种3d图像动画引擎 |
-
2013
- 2013-12-24 CN CN201310724190.7A patent/CN103679792B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060176295A1 (en) * | 2003-05-30 | 2006-08-10 | Lattice Technology, Inc. | 3-Dimensional graphics data display device |
CN101996073A (zh) * | 2009-08-31 | 2011-03-30 | 阿里巴巴集团控股有限公司 | 一种组件渲染方法及装置 |
CN102509331A (zh) * | 2011-10-25 | 2012-06-20 | 江苏南大先腾信息产业有限公司 | 一种基于三维引擎的动态模型搭建方法 |
CN103413343A (zh) * | 2013-08-30 | 2013-11-27 | 广州市久邦数码科技有限公司 | 一种3d图像动画引擎 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104794316A (zh) * | 2015-05-20 | 2015-07-22 | 福州大学 | 一种3d模型拆分与组合的方法 |
CN105069832A (zh) * | 2015-08-13 | 2015-11-18 | 中国航空工业集团公司西安飞机设计研究所 | 一种面向可变显示元素的运行时渲染方法 |
CN109145688A (zh) * | 2017-06-28 | 2019-01-04 | 武汉斗鱼网络科技有限公司 | 视频图像的处理方法及装置 |
CN107564089A (zh) * | 2017-08-10 | 2018-01-09 | 腾讯科技(深圳)有限公司 | 三维图像处理方法、装置、存储介质和计算机设备 |
CN107564089B (zh) * | 2017-08-10 | 2022-03-01 | 腾讯科技(深圳)有限公司 | 三维图像处理方法、装置、存储介质和计算机设备 |
CN108009124A (zh) * | 2017-11-29 | 2018-05-08 | 天津聚飞创新科技有限公司 | 旋转矩阵计算方法及装置 |
CN112070910A (zh) * | 2020-11-13 | 2020-12-11 | 蚂蚁智信(杭州)信息技术有限公司 | 数据处理方法及装置 |
CN112070910B (zh) * | 2020-11-13 | 2021-03-05 | 蚂蚁智信(杭州)信息技术有限公司 | 数据处理方法及装置 |
CN114470786A (zh) * | 2022-01-27 | 2022-05-13 | 北京字跳网络技术有限公司 | 帧同步数据处理方法、装置、可读介质和电子设备 |
CN114470786B (zh) * | 2022-01-27 | 2023-12-01 | 北京字跳网络技术有限公司 | 帧同步数据处理方法、装置、可读介质和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN103679792B (zh) | 2017-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103679792A (zh) | 一种三维模型的渲染方法和系统 | |
Cheng et al. | State-of-the-art review on mixed reality applications in the AECO industry | |
CN102622776B (zh) | 三维环境重构 | |
Langlotz et al. | Sketching up the world: in situ authoring for mobile augmented reality | |
Tecchia et al. | Visualizing crowds in real‐time | |
EP2745237B1 (en) | Dynamic selection of surfaces in real world for projection of information thereon | |
EP2469474B1 (en) | Creation of a playable scene with an authoring system | |
Le Muzic et al. | Illustrative visualization of molecular reactions using omniscient intelligence and passive agents | |
US20120075433A1 (en) | Efficient information presentation for augmented reality | |
US20170165575A1 (en) | Voxel-based, real-time acoustic adjustment | |
CN103886638A (zh) | 在划分为多个区域的三维场景中对对象的物理行为仿真 | |
CN103914876A (zh) | 用于在3d地图上显示视频的方法和设备 | |
JP2020503611A (ja) | 複合現実において動的仮想コンテンツを生成するデバイスおよび方法 | |
CN104778741A (zh) | 二维图形转换为三维图形的方法和装置 | |
CN110070616A (zh) | 存储器、基于gis平台的统计数据呈现方法、装置和设备 | |
GB2476714A (en) | Computing a Collision-Free Velocity for an Agent in a Crowd Simulation Environment | |
Grasl et al. | GRAPE: using graph grammars to implement shape grammars. | |
US20170165576A1 (en) | Control of audio effects using volumetric data | |
US9135749B2 (en) | Method and apparatus for processing three-dimensional model data | |
KR100901284B1 (ko) | 3d 모델 식별자를 이용한 랜더링 시스템 및 방법 | |
Kerbl et al. | Interactive disassembly planning for complex objects | |
US10198837B2 (en) | Network graphing selector | |
Haciomeroglu et al. | A GPU-assisted hybrid model for real-time crowd simulations | |
CN116030221A (zh) | 增强现实画面的处理方法、装置、电子设备及存储介质 | |
Gonçalves et al. | St–trajvis: Interacting with trajectory data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |