双目三维图形渲染方法及相关系统的制作方法

文档序号:9471128阅读:744来源:国知局
双目三维图形渲染方法及相关系统的制作方法
【技术领域】
[0001] 本发明涉及立体视觉处理技术领域,具体涉及一种双目三维(3D)图形渲染方法 及相关系统。
【背景技术】
[0002] 众所周知现实世界是三维立体世界,人类的眼睛在观看三维世界时,由于双眼水 平分开在两个不同的位置上,所看到的物体图像是不同的。左右眼看到的图像的视觉角度 不同,分别称为左视图和右视。由于视差的存在,通过人类的大脑,可以使人感受到具有景 深和层次感的3D世界,这就是双目视差原理。根据这一原理,如果能够让双眼分别看到两 幅不同视觉角度的视图,就可以使人感受到一个具有景深和层次感的立体3D视图。
[0003] 3D显示器就是基于双目视差原理而设计。当要产生实时的立体3D图像时,需 要实时地产生左右眼的图像,使观看者持续感受到立体感。这一过程通常需要修改渲染 管线(RenderingPipeline)来完成。3D图形渲染管线负责执行一系列必要的步骤从而 把3D场景转换为可以在显示器上显示的2D图像。3D图形渲染管线通常大致包括以下步 骤:从局部坐标系转换到世界坐标系;从世界坐标系转换到视图坐标系;投影变换;和视口 (viewport)变换。目前比较流行的一种图形API(应用程序接口,ApplicationProgramming Interface)OpenGL(开放性图形库,OpenGraphicLibrary)有自己的這染管线。
[0004] OpenGL可以实现单目渲染,它是一种跨平台、跨编程语言的API,适合用于在传统 的2D显示器上渲染具有立体感的3D图形。GPU硬件平台上通常可以支持OpenGL,GPU渲 染管线是一种硬件加速、高效地将三维信息转化成二维图像的处理流程。OpenGL也提供了 双目3D渲染的应用编程接口,但是要求GPU硬件上有相应的支持,否则无法使OpenGL在3D 显示器上呈现出双目3D效果。
[0005] 此外,基于现有的GPU(图形处理器,GraphicProcessingUnit)渲染管线,立体效 果主要有入屏和出屏两种,入屏是指看到的物体好像在屏幕的后面,出屏是指看到的物体 效果好像在屏幕的前面。例如在渲染火焰喷射效果时,出屏能给人一种火焰烧到人的感官 效果。在常规的GPU渲染的投影变换阶段,例如采用OpenGL进行渲染,视点在原点,沿着-Z 方向观察,会形成一个金字塔形的平截头体,即由两个一远一近、相互平行的平面(称为远 平面和近平面)截断而形成的一个锥体。任何在锥体外的图元都会被裁剪掉,留在锥体内 的图元会经过透视变换,投影到近平面上,透视变换得到的伪深度作为像素是否可见的判 断依据。若简单的利用视点位移和深度信息,只会将近平面后面的图元投影到近平面上,只 能实现入屏的立体效果。

【发明内容】

[0006] 根据本发明的第一方面,本发明提供一种双目三维图形渲染方法,包括投影变换 步骤,所述投影变换步骤包括:在近平面和远平面之间增加中平面作为投影面,将近平面与 远平面之间的图元投影到中平面上。
[0007] 根据本发明的第二方面,本发明提供一种立体影像重现方法,包括:
[0008] 创建步骤:创建用于分别存放不同视点的图像数据的至少两个视帧缓冲区;
[0009] 渲染步骤:接收至少两种视点的包含三维图形的数据,对每个视点的数据进行渲 染,所述渲染包括使用如上所述的双目三维图形渲染方法,将渲染结果存入对应的视帧缓 冲区;
[0010] 合成步骤:将所述至少两个视帧缓冲区中的渲染结果进行合成得到立体帧,输出 所述立体帧。
[0011] 根据本发明的第三方面,本发明提供一种立体影像重现系统,包括:
[0012] 创建模块,用于创建用于分别存放不同视点的图像数据的至少两个视帧缓冲区;
[0013] 渲染模块,用于接收至少两种视点的包含三维图形的数据,对每个视点的数据进 行渲染,所述渲染包括使用如上所述的双目三维图形渲染方法,将渲染结果存入对应的视 帧缓冲区;
[0014] 合成模块,用于将所述至少两个视帧缓冲区中的渲染结果进行合成得到立体帧, 输出所述立体中贞。
[0015] 根据本发明的第四方面,本发明提供一种双目三维图形渲染与显示系统,包括:
[0016] 存储设备,用于保存包含三维图形的数据文件;
[0017] 处理器,用于对所述存储设备中的数据文件进行解析处理;
[0018] 处理器内存,用于提供分别存放不同视点的数据的至少两个视帧缓冲区;
[0019] 图形处理器,用于对所述处理器处理后的数据文件实现三维图形渲染,所述渲染 包括使用如上所述的双目三维图形渲染方法,生成不同视点的视帧;
[0020] 所述处理器内存还用于存放所述图形处理器生成的不同视点的视帧;
[0021] 所述处理器还用于对所述不同视点的视帧进行合成,得到立体帧;
[0022] 三维显示器,用于显示所述立体帧。
[0023] 本发明的有益效果是:通过增加的中平面,将近平面与远平面之间的图元投影到 中平面上,则近平面与中平面之间的图元会有出屏的立体效果,中平面与远平面之间的图 元会有入屏的立体效果;从而,使得在3D显示设备中使用现有的渲染管线时不需要特别的 硬件,就可以渲染"出屏"和"入屏"效果。
【附图说明】
[0024] 图1是GPU渲染管线中投影变换阶段扩展的三维示意图;
[0025] 图2是双目视差原理的示意图;
[0026] 图3是本发明一种实施例的双目三维图形渲染与显示系统的结构示意图;
[0027] 图4是本发明一种实施例中GPU的图形处理管线;
[0028] 图5是本发明一种实施例的立体影像重现方法的流程示意图。
【具体实施方式】
[0029] 下面通过【具体实施方式】结合附图对本发明作进一步详细说明。
[0030] 首先对下面用到的一些术语或概念进行解释。左视帧,是指在三维影像显示中表 示使观看者的左眼看到的二维视图;类似地,右视帧,是指在三维影像显示中表示使观看者 的右眼看到的二维视图。立体帧,是指根据3D显示器的类型,将渲染后的左视帧和右视帧 合成而得到的3D视帧。
[0031] 已知OpenGL渲染管线,可以实时、高效地将三维信息转化为二维图像。但如前面
【背景技术】的描述,现有的GPU采用的OpenGL渲染管线进行渲染时无法同时顾及入屏和出 屏,也无法不需要GPU硬件支持就能实现基于双目视差的3D渲染。
[0032] [实施例1]
[0033] 为了使现有的GPU渲染管线既能渲染出入屏效果,也能渲染出屏效果,而不需 要GPU硬件上有相应的支持,本实施例的双目三维图形渲染方法中,增加了一个中平面 (middleplane),如图1所示,该中平面介于近平面和远平面之间,把中平面当作投影面,将 近平面与远平面之间的图元投影到中平面上,则近平面与中平面之间的图元会有出屏的立 体效果,中平面与远平面之间的图元会有入屏的立体效果。为了保证在裁剪阶段只保留近 平面与远平面之间的图元,伪深度必须保持不变,即介于[-1,1]之间。
[0034] 设近平面、中平面和远平面与原点的距离分别是N、M、F,近平面与远平面之间的伪 深度是[-1,1],则透视变换矩阵M1如下所示:
[0036] 经过透视变换后,还需要将透视的结果进行位移和缩放操作,变换到[-1,1]之间 的立方体内。设中平面的上、下、左、右的坐标分别是top、bottom、left和right,则位移和 缩放操作的矩阵表示M2如下所示:
[0038] 可以用0表示观察者视角的大小,投影面是中平面,贝丨jtop、bottom、left和right可以通过下面的等式计算得到:
[0043] 由于模型视图变换阶段对视点由原点向水平方向上进行e/2和-e/2的位移,需要 对投影变换做一定的修正。该修正与位移相关,设位移量用s表示,修正矩阵M3如下所示:
[0045] 综上,投影变换阶段的矩阵可以用矩阵Mpt表示如下:
[0047] 在左眼的投影矩阵Mpt中,s= -e/2 ;在右眼的投影矩阵Mpt中,s=e/2。
[0048] [实施例2]
[0049] 图2显示出由于双目视差而产生左右眼角度不同的视图,存储左右眼视图的缓冲 区分别为左视帧和右视帧,左右视帧中的对象物体与景深有关。
[0050] 本实施例基于双目视差原理和GPU渲染管线,提供了一种双目三维图形渲染与显 示系统,如图3所示,为该系统的结构示意图,该系统包括五个模块:
[0051] (1)外部存储设备200 :用于存储场景数据,如3D网格数据、图像数据、配置数据 等;
[0052] (2)处理器(CPU) 201 :用于对文件的解析、场景数据的处理、以及立体帧的合成操 作;
[0053] (3)GPU202 :实现图形渲染管线的主要部件,生成左右视图;
[0054] (4)处理器内存204 :存储左右视帧缓冲区以及程序数据;
[0055] (5) 3D显示器203 :用于显示立体视帧。
[0056] CPU将场景数据从外部存储器的文件中解析出来,存入处理器内存中,根据渲染命 令,选择性地把场景数据通过CPU或者DMA(直接内存存取,DirectMemoryAccess)发送到 GPU硬件中,通过GPU的渲染管线,完成场景的3D渲染。GPU需要对场景数据分别进行左右 视帧渲染,每次渲染完成后,需要将帧缓冲区中的数据由GPU传输到处理器内存中。左右视 帧场景渲染完成后,根据3D显示器的类型,将处理器内存中的左右视帧合成双目3D视帧, 再把3D视帧传输到GPU的帧缓冲区中,最后在3D显示器上显示。
[0057] 图4是GPU的渲染管线,存储在内存中的
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1