发明内容
本发明的目的在于提供一种三维界面显示装置、方法及终端,采用所述三维界面显示装置及方法的终端,在没有三维图形硬件时,能够获得真实的三维界面。
为了达到本发明的目的,本发明采用以下技术方案:
一种三维界面显示装置,包括三维界面视图模块、三维控制器,以及三维渲染引擎,其中,
三维界面视图模块,用于检测用户对三维图形的操作并将其发送至三维控制器;
三维控制器,用于依据用户的操作向三维处理引擎发送三维界面渲染指令;
三维渲染引擎,用于依据所述三维界面渲染指令对***作的三维图形执行渲染处理。
优选地,所述三维界面视图模块包括图形用户界面窗口数据模块、用户输入检测模块,以及屏幕交互模块,其中,
图形用户界面窗口数据模块,用于封装图形用户界面GUI的窗口信息;
用户输入检测模块,用于检测用户对三维图形的操作并将其发送至三维控制器;
屏幕交互模块,用于显示三维界面。
优选地,所述三维渲染引擎至少包括模型坐标变换模块、世界坐标变换模块、物体剔除模块、***渲染列表模块、背面消除模块、相机坐标变换模块、光照着色模块、三维物体空间裁剪模块、纹理映射模块、透视变换模块、图像空间裁剪模块、以及光栅化模块中的一种,其中,
模型坐标变换模块,用于对三维图形的模型坐标进行变换;
世界坐标变换模块,用于依据三维图形的位置将模型坐标变换为世界坐标;
物体剔除模块,用于在执行世界坐标到相机坐标变换之前,选择并剔除三维图形中相对相机视点而言不可见的部分;
***渲染列表模块,用于将三维图形的可见部分的每个多边形面***到渲染列表中;
背面消除模块,用于消除被遮挡的三维图形中的多边形面;
相机坐标变换模块,用于依据相机视点对三维图形进行变换;
三维物体空间裁剪模块,用于依据三维视景体对三维图形中可见的部分进行裁剪;
光照着色模块,用于将三维图形由线框渲染为实体,以增强三维图形的三维真实感;
纹理映射模块,用于将一幅二维图像作为纹理贴到三维图形的一个多边形面上;
透视变换模块,用于将相机坐标变换为透视坐标,以使得三维图形变换为二维图片;
图像空间裁剪模块,用于将透视坐标变换为屏幕坐标;进一步用于将越过了屏幕边界的三维图形的部分进行裁剪;
光栅化模块,用于渲染三维图形到显示缓冲区。
优选地,所述三维渲染引擎依据三维界面渲染指令对***作的三维图形执行渲染处理的步骤包括:
依据用户对三维图形的操作,将三维图形的模型坐标值变换为世界坐标值;
将三维图形的每个多边形面***到渲染列表中;
创建照相机变换矩阵;
消除处于背面的多边形;
依据相机视点将三维图形的世界坐标值变换为相机坐标值;
根据三维视景体对只能看到一部分的三维图形进行裁剪;
对渲染列表执行深度排序;
将三维图形的相机坐标值变换为屏幕坐标值,将三维图形由线框渲染为实体;
绘制渲染场景,并将渲染后的三维图形保存到显存中。
一种终端,其包括如上所述的三维界面显示装置,所述装置包括三维界面视图模块、三维控制器,以及三维渲染引擎,其中,
三维界面视图模块,用于检测用户对三维图形的操作并将其发送至三维控制器;
三维控制器,用于依据用户的操作向三维处理引擎发送三维界面渲染指令;
三维渲染引擎,用于依据所述三维界面渲染指令对***作的三维图形执行渲染处理。
一种三维界面显示方法,其三维界面显示装置包括三维界面视图模块、三维控制器,以及三维渲染引擎,所述方法包括:
三维界面视图模块检测用户对三维图形的操作并将其发送至三维控制器;
三维控制器依据用户的操作向三维处理引擎发送三维界面渲染指令。
优选地,所述三维界面视图模块包括图形用户界面窗口数据模块、用户输入检测模块,以及屏幕交互模块,其中,
图形用户界面窗口数据模块,用于封装图形用户界面GUI的窗口信息;
用户输入检测模块,用于检测用户对三维图形的操作并将其发送至三维控制器;
屏幕交互模块,用于显示三维界面。
优选地,所述三维渲染引擎至少包括模型坐标变换模块、世界坐标变换模块、物体剔除模块、***渲染列表模块、背面消除模块、相机坐标变换模块、光照着色模块、三维物体空间裁剪模块、纹理映射模块、透视变换模块、图像空间裁剪模块、以及光栅化模块中的一种,其中,
模型坐标变换模块,用于对三维图形的模型坐标进行变换;
世界坐标变换模块,用于依据三维图形的位置将模型坐标变换为世界坐标;
物体剔除模块,用于在执行世界坐标到相机坐标变换之前,选择并剔除三维图形中相对相机视点而言不可见的部分;
***渲染列表模块,用于将三维图形的可见部分的每个多边形面***到渲染列表中;
背面消除模块,用于消除被遮挡的三维图形中的多边形面;
相机坐标变换模块,用于依据相机视点对三维图形进行变换;
三维物体空间裁剪模块,用于依据三维视景体对三维图形中可见的部分进行裁剪;
光照着色模块,用于将三维图形由线框渲染为实体,以增强三维图形的三维真实感;
纹理映射模块,用于将一幅二维图像作为纹理贴到三维图形的一个多边形面上;
透视变换模块,用于将相机坐标变换为透视坐标,以使得三维图形变换为二维图片;
图像空间裁剪模块,用于将透视坐标变换为屏幕坐标;进一步用于将越过了屏幕边界的三维图形的部分进行裁剪;
光栅化模块,用于渲染三维图形到显示缓冲区。
优选地,所述三维渲染引擎依据三维界面渲染指令对***作的三维图形执行渲染处理的步骤包括:
依据用户对三维图形的操作,将三维图形的模型坐标值变换为世界坐标值;
将三维图形的每个多边形面***到渲染列表中;
创建照相机变换矩阵;
消除处于背面的多边形;
依据相机视点将三维图形的世界坐标值变换为相机坐标值;
根据三维视景体对只能看到一部分的三维图形进行裁剪;
对渲染列表执行深度排序;
将三维图形的相机坐标值变换为屏幕坐标值,将三维图形由线框渲染为实体;
绘制渲染场景,并将渲染后的三维图形保存到显存中。
通过上述本发明的技术方案可以看出,本发明的有益效果是,对于没有三维图形硬件加速的终端(例如手机),也可以使用该本发明提供的三维界面显示装置、方法去获得真实感较强的三维界面,从而为用户提供更好的交互体验。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明实施例提供了一种三维界面显示装置,包括三维界面视图模块10、三维控制器20,以及三维渲染引擎30,其中,
三维界面视图模块10,用于检测用户对三维图形的操作并将其发送至三维控制器20;
三维控制器20,用于依据用户的操作向三维处理引擎发送三维界面渲染指令;
三维渲染引擎30,用于依据所述三维界面渲染指令对***作的三维图形执行渲染处理。
具体实施时,本发明实施例提供的三维界面显示装置采用MVC模式进行设计,将三维渲染引擎30、三维界面视图模块10、三维控制器20进行分离及解耦,使三维界面的设计和开发有了很大的灵活性。
其中,所述三维界面视图模块10用于解决可移植性问题,因为本发明实施例提供的三维界面显示装置是需要独立于手机图形用户界面GUI的,这样可以减少不同终端(例如手机,本发明实施例将主要以手机为例进行说明)上三维界面的开发成本。所以,提供三维界面视图模块10将手机图形用户界面GUI封装,以致在将三维界面显示装置移植到新的手机时,需要做的仅仅是在新的手机上对三维界面视图模块10进行修改,而其它部分不变。例如,在不同的手机上,显示的三维界面是相同的,不同的是仅仅修改其三维界面视图模块10。
三维界面视图模块10还用来和用户交互。具体来说,它封装了手机图形用户界面GUI的窗口,并具备用户输入一级屏幕输出功能,用以传递用户输入给三维控制器20。
具体地,继续参照图1,所述三维界面视图模块10包括图形用户界面窗口数据模块101、用户输入检测模块102,以及屏幕交互模块103,其中,
图形用户界面窗口数据模块101,用于封装图形用户界面GUI的窗口信息;
用户输入检测模块102,用于检测用户对三维图形的操作并将其发送至三维控制器20;
屏幕交互模块103,用于显示三维界面。
所述三维控制器20用于解决可扩展性问题,这是因为对于各种三维界面,它们的用户体验是不同的,但三维图形渲染是一致的,用户交互方式也是一致的。所以,在实际的实施过程中,各种不同的三维界面可以拥有各自的三维控制器20,而对于三维图形的渲染处理则统一由三维处理引擎处理,对于人机交互则统一由三维界面视图模块10处理。
在实际应用中,允许三维界面更换三维控制器20,而且可以根据用户需要动态地打开或关闭相对应的三维控制器20,甚至在运行期间可以进行三维控制器20的替换。例如,手机运行时,可以使得三维界面在各种风格之间进行切换。
三维控制器20的功能是用来取得用户输入并解读,例如解读用户对三维图形的操作,以获取用户对三维界面的操作用意。具体来说,它依据用户对于三维图形的操作,改变三维界面的视觉效果。
另外,三维渲染引擎30用于解决高性能问题,因为三维界面显示装置的处理速度性能必须非常快,才能在没有硬件加速的情况下,进行流畅地三维界面显示。所以,将性能消耗最多和代码量最多的三维渲染引擎30独立出来,专门用于高性能三维渲染。而且,在优化三维渲染引擎30性能时,不用修改各种手机上的三维界面。
三维渲染引擎30的功能是用来渲染三维图形的,它持有所有三维图形的数据、状态和程序逻辑。具体来说,它负责处理三维图形的数据结构(包括所有的光源、运动和常规状态信息)以及从用户或相机所在的视点渲染三维图形。
继续参照图1,所述三维渲染引擎30至少包括模型坐标变换模块301、世界坐标变换模块302、物体剔除模块303、***渲染列表模块304、背面消除模块305、相机坐标变换模块306、光照着色模块307、三维物体空间裁剪模块308、纹理映射模块309、透视变换模块310、图像空间裁剪模块311、以及光栅化模块312中的一种,其中,
模型坐标变换模块301,用于对三维图形的模型坐标进行变换。对三维图形的模型坐标进行变换。例如在原地执行旋转、缩放或其他顶点操作,即修改模型坐标。
世界坐标变换模块302,用于依据三维图形的位置将模型坐标变换为世界坐标;
物体剔除模块303,用于在执行世界坐标到相机坐标变换之前,选择并剔除三维图形中相对相机视点而言不可见的部分。在执行世界坐标到相机坐标变换之前,需要判断哪些三维图形相对相机视点而言是可见的,以免错误地渲染它们。
***渲染列表模块304,用于将三维图形的可见部分的每个多边形面***到渲染列表中。渲染列表是一个指针数组,其中每个指针指向一个自包含的、可渲染的多边形面。可见三维图形的每个多边形面都会***到渲染列表中。
背面消除模块305,用于消除被遮挡的三维图形中的多边形面;
相机坐标变换模块306,用于依据相机视点对三维图形进行变换;
三维物体空间裁剪模块308,用于依据三维视景体对三维图形中可见的部分进行裁剪;
光照着色模块307,用于将三维图形由线框渲染为实体,以增强三维图形的三维真实感;
纹理映射模块309,用于将一幅二维图像作为纹理贴到三维图形的一个多边形面上;
透视变换模块310,用于将相机坐标变换为透视坐标,以使得三维图形变换为二维图片;
图像空间裁剪模块311,用于将透视坐标变换为屏幕坐标;进一步用于将越过了屏幕边界的三维图形的部分进行裁剪;
光栅化模块312,用于渲染三维图形到显示缓冲区。
其中,所述三维渲染引擎30依据三维界面渲染指令对***作的三维图形执行渲染处理的步骤包括:
(1)依据用户对三维图形的操作,将三维图形的模型坐标值变换为世界坐标值;
(2)将三维图形的每个多边形面***到渲染列表中;
(3)创建照相机变换矩阵;
(4)消除处于背面的多边形;
(5)依据相机视点将三维图形的世界坐标值变换为相机坐标值;
(6)根据三维视景体对只能看到一部分的三维图形进行裁剪;
(7)对渲染列表执行深度排序;
(8)将三维图形的相机坐标值变换为屏幕坐标值,将三维图形由线框渲染为实体;
(9)绘制渲染场景,并将渲染后的三维图形保存到显存中。
更为具体地,请参考图5,其为本发明实施例提供的绘制三维界面的流程图,所述绘制流程包括如下步骤:
步骤S401、变换模型坐标。对三维立方体执行翻转、缩放或其他顶点操作,修改了三维立方体的模型坐标值。根据三维图形的位置将模型坐标变换为世界坐标。
步骤S402、将物体***到渲染列表中。为了更快地绘制,将每个物体中的多边形提取出来,统一地保存在渲染列表中。渲染列表是一个指针数组,其中每个指针指向一个自包含的、可渲染的多边形面,可见三维图形的每个多边形面都会***到渲染列表中。
步骤S403、创建照相机变换矩阵。用于下面步骤中的矩阵运算。
步骤S404、消除处于背面的多边形。执行世界坐标到相机坐标变换之前,需要判断哪些三维图形对相机而言是可见的,以免错误地渲染它们。人眼看不到的背面是不用绘制的,通过使用照相机变换矩阵,消除渲染列表中处于背面的多边形。
步骤S405、变换世界坐标到相机坐标。根据相机位置和视角对可能的可见三维图形进行变换。
步骤S406、对多边形进行三维裁剪。根据三维视景体对只能看到一部分的三维图形进行裁剪。
步骤S407、对渲染列表执行深度排序。用于加速渲染列表中多边形的绘制。
步骤S408、变换相机坐标到屏幕坐标。将三维图形由线框渲染为实体,来增强三维图形的三维真实感。使用一幅二维图像作为纹理贴到三维图形的一个多边形面上。将相机坐标变换为透视坐标,三维图形变换为二维图像。将透视坐标变换为屏幕坐标,有些多边形图像可能越过了屏幕边界,需要对其裁剪。
步骤S409、绘制渲染场景。渲染三维图形的最终图像到手机屏幕的显存中。例如,三维立方体是以不透明方式绘制,三维立方体镜像是以半透明的方式绘制,所述三维立方体镜像模拟了所述三维立方体的倒影,其翻转方向就像倒影一样,和三维立方体的翻转方向相反。
步骤S410、完成三维立方体的绘制。
相应地,本发明实施例还提供了一种终端,其包括如上所述的三维界面显示装置,继续参照图1,所述装置包括三维界面视图模块10、三维控制器20,以及三维渲染引擎30,其中,
三维界面视图模块10,用于检测用户对三维图形的操作并将其发送至三维控制器20;
三维控制器20,用于依据用户的操作向三维处理引擎发送三维界面渲染指令;
三维渲染引擎30,用于依据所述三维界面渲染指令对***作的三维图形执行渲染处理。
本发明实施例提供的终端,由于其包含如上文所述的三维界面显示装置,且由于上文对该三维界面显示装置进行了详细的描述,这里将不再对其进行重复赘述。
如图2所示,本发明实施例还提供了一种三维界面显示方法,其三维界面显示装置包括三维界面视图模块10、三维控制器20,以及三维渲染引擎30,所述方法包括:
S101、三维界面视图模块10检测用户对三维图形的操作并将其发送至三维控制器20;
S102、三维控制器20依据用户的操作向三维处理引擎发送三维界面渲染指令;
S103、三维渲染引擎30依据所述三维界面渲染指令对***作的三维图形执行渲染处理。
对于所述三维界面显示装置详细说明,请参考上文所述,这里不再重复说明。
如图3所示,其为本发明实施例制作三维立方体的流程示意图,所述流程包括:
步骤S201、设置绘制区域。确定三维立方体在手机屏幕中的位置,三维立方***于绘制区域之内的部分会被绘制出来,位于绘制区域之外的部分会被裁剪掉,而不会被绘制。
步骤S202、设置有效区域。对于触摸屏手机,用户的触摸位置位于有效区域之内时,三维立方体才会做出交互反应。例如,用户的手指在有效区域移动时,三维立方体会向手指移动方向翻转,用户的手指在有效区域之外移动时,三维立方体不会翻转。
步骤S203、新建帧缓冲区。本发明三维界面引擎使用双缓冲机制,在手机屏幕中,被逐行扫描出来的是帧缓冲区中完整的三维界面,而不是绘制三维界面的过程。
步骤S204、判断是最后一个面。循环处理三维立方体的六个平面。
步骤S205、新建三维立方体的平面。制作三维立方体的每个平面,具体步骤见下文关于图4的描述。
步骤S206、新建绘制区域背景。该图像作为三维立方体的背景。
步骤S207、新建照相机。模拟了人的眼睛,在三维空间中,人通过眼睛观察三维物体,离自己近的物体看上去大,而离自己远的物体看上去小,这会产生真实的空间感。
步骤S208、新建深度缓存。在三维空间中,离自己近的物体会挡住离自己远的物体,深度缓存保存了物体的远近位置。二维空间使用X、Y两个坐标轴,三维空间使用X、Y、Z三个坐标轴,深度缓存中的值代表了Z坐标轴上的值。
步骤S209、新建渲染场景。这是绘制三维物体时的上下文,渲染场景包括渲染列表、深度缓存、屏幕显存、透明度的具体数据,它决定三维物体以何种方式绘制出来。
步骤S210、新建半透明表。半透明的三维立方体镜像102是三维立方体101的倒影,绘制镜像时要用到该半透明表。
步骤S211、完成三维立方体的制作。
如图4所示,其为本发明实施例提供的制作三维立方体每个平面的流程示意图。它详细描述了上述步骤S205的具体实现内容,其实现步骤如下:
步骤S301、设置三维立方体面标示。三维立方体有六个面,位于上下左右前后,其数值是各不相同的,通过标示决定赋予该面何种数值。
步骤S302、新建顶点列表。该列表保存了三维立方体面每个顶点的位置,使用的是模型坐标,所有多边形是由顶点构成的。
步骤S303、新建纹理坐标列表。该列表保存了要贴在该面上,纹理的坐标位置,通过这些坐标位置对图像进行采样,然后构成了纹理的像素数据。
步骤S304、新建顶点纹理映射表。该列表建立了顶点与纹理坐标一一对应的关系,决定了该顶点使用纹理中哪个具体的像素数据。
步骤S305、新建多边形列表。该列表保存了多边形数据,这里的多边形都是三角形,使用三角形的好处是三角形的每个顶点都是共面的,而且三角形结构简单,易于三维图形算法快速绘制。三角形是三维图形渲染流水线绘制的基本图元,所有三维物体是由三角形构成的。
步骤S306、设置物***置。确定三维物体在三维空间中的位置,即它在世界坐标系中的位置。
步骤S307、设置物体坐标轴。为了准确翻转,三维物体有用于记录朝向的模型坐标轴,使用世界坐标。这样沿X、Y、Z三个坐标轴翻转时,才能知道三维物体的朝向。
步骤S308、使物体大小匹配绘制区域。三维立方体会自动匹配绘制区域的大小,使它自己能被完整地被绘制出来。
步骤S309、新建纹理。每个三维立方体面都会填一张图像,使用纹理对图像缩放采样,已匹配三维立方体面的大小。
步骤S310、设置所有列表的值。顶点列表、纹理坐标列表、多边形列表会填上准确的数值,这些数值在绘制流程中使用。
步骤S311、完成三维立方体面的制作。
在本发明实施例中,所述三维渲染引擎30依据三维界面渲染指令对***作的三维图形执行渲染处理的步骤包括:
(1)依据用户对三维图形的操作,将三维图形的模型坐标值变换为世界坐标值;
(2)将三维图形的每个多边形面***到渲染列表中;
(3)创建照相机变换矩阵;
(4)消除处于背面的多边形;
(5)依据相机视点将三维图形的世界坐标值变换为相机坐标值;
(6)根据三维视景体对只能看到一部分的三维图形进行裁剪;
(7)对渲染列表执行深度排序;
(8)将三维图形的相机坐标值变换为屏幕坐标值,将三维图形由线框渲染为实体;
(9)绘制渲染场景,并将渲染后的三维图形保存到显存中。
更为具体地,请参考图5,其为本发明实施例提供的绘制三维界面的流程图,所述绘制流程包括如下步骤:
步骤S401、变换模型坐标。对三维立方体执行翻转、缩放或其他顶点操作,修改了三维立方体的模型坐标值。根据三维图形的位置将模型坐标变换为世界坐标。
步骤S402、将物体***到渲染列表中。为了更快地绘制,将每个物体中的多边形提取出来,统一地保存在渲染列表中。渲染列表是一个指针数组,其中每个指针指向一个自包含的、可渲染的多边形面,可见三维图形的每个多边形面都会***到渲染列表中。
步骤S403、创建照相机变换矩阵。用于下面步骤中的矩阵运算。
步骤S404、消除处于背面的多边形。执行世界坐标到相机坐标变换之前,需要判断哪些三维图形对相机而言是可见的,以免错误地渲染它们。人眼看不到的背面是不用绘制的,通过使用照相机变换矩阵,消除渲染列表中处于背面的多边形。
步骤S405、变换世界坐标到相机坐标。根据相机位置和视角对可能的可见三维图形进行变换。
步骤S406、对多边形进行三维裁剪。根据三维视景体对只能看到一部分的三维图形进行裁剪。
步骤S407、对渲染列表执行深度排序。用于加速渲染列表中多边形的绘制。
步骤S408、变换相机坐标到屏幕坐标。将三维图形由线框渲染为实体,来增强三维图形的三维真实感。使用一幅二维图像作为纹理贴到三维图形的一个多边形面上。将相机坐标变换为透视坐标,三维图形变换为二维图像。将透视坐标变换为屏幕坐标,有些多边形图像可能越过了屏幕边界,需要对其裁剪。
步骤S409、绘制渲染场景。渲染三维图形的最终图像到手机屏幕的显存中。例如,三维立方体是以不透明方式绘制,三维立方体镜像是以半透明的方式绘制,所述三维立方体镜像模拟了所述三维立方体的倒影,其翻转方向就像倒影一样,和三维立方体的翻转方向相反。
步骤S410、完成三维立方体的绘制。
上述说明示出并描述了本发明的一个优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。