一种将虚拟3d场景转换为立体视图的方法

文档序号:6433697阅读:407来源:国知局
专利名称:一种将虚拟3d场景转换为立体视图的方法
技术领域
本发明涉及3D视频制作领域,尤其涉及一种将虚拟3D场景转换为立体视图的方法。
背景技术
目前,3D内容的缺乏严重制约着3D产业的发展。2D转3D技术试图把现有的2D 视频转为3D,但因为技术的不成熟,要么转换很费时导致成本很高,要么转换出的3D内容效果不明显,从而影响3D产业的正常发展。而基于计算机图形(Computer Graphic, CG)技术的3D内容制作技术越来越成熟,且能展现出很好的3D效果。基于CG技术的3D内容制作是指将计算机生成的3D场景从不同角度投影成立体视图,再合成为3D内容,多用于动画内容的3D制作。在生活内容的3D制作后期,为了添加字幕或logo,或为了增加一些三维特效,也有用到基于CG技术的3D内容制作。可见基于CG技术的3D内容制作技术在3D内容制作过程中起着非常重要的作用。基于CG技术生成3D场景的工具很多,如0penGL、3D max 等。立体视图的3D内容有多个视图(用于裸眼3D)和两个视图(也称左右视图)之分。
立体视图的3D内容制作过程中,为达到把场景转换成立体视图的目的,所采用的方法基本上都借用OpenGL现有的投影机制,从3D场景的不同角度投影出两张或多张2D视图充当立体视图,就像用相机在不同角度上取景一样。各方法的不同之处主要体现在投影方式的选取(如正交投影、透视投影)、投影方向与坐标轴的夹角等方面。在众多方法中, 比较可行也比较常见的方法有两种内八字透视投影法(Teo-in perspective method)和平行不对禾尔透视投影法(Parallel-axis asymmetric frustum perspective method) 如图2-a所示,内八字透视投影法中两个相机聚焦于同一观察点,即观察方向跟坐标轴ζ轴相交,采用OpenGL中自带的函数gluPerspective进行投影来获取立体视图。此方法产生的立体视图能同时呈现凹凸两种3D效果,但不足之处如图3所示,此方法在产生水平视差的同时也产生了垂直视差,越靠近视景体的上下边缘,垂直视差越严重。垂直视差是3D内容不需要的,且会严重影响3D效果的体验。平行不对称透视法如图2-b所示,两个相机观察方向都跟ζ轴平行,采用glFrustum函数进行透视投影,视景体相对于观察方向不对称。此方法能消除内八字透视投影中产生的垂直视差,但无论在χ轴方向上怎样移动视景体或投影面,都无法在立体视图中同时获得正负视差,即不能同时得到凹凸两种3D效果,导致3D 效果不明显。
综上,现有技术在将场景转换为立体视图时,会出现3D效果不明显以及存在垂直视差的问题。发明内容
有鉴于此,本发明提供了一种将虚拟3D场景转换为立体视图的方法,在生成的立体视图中消除了垂直方向上的视差,且能同时实现凹凸两种3D效果,可增强3D效果的体验。
为达到上述目的,本发明实施例的技术方案是这样实现的
一种将虚拟3D场景转换为立体视图的方法,对于OpenGL中的任意虚拟3D场景, 预先设置观察点为坐标系的原点,进行转换时,执行以下步骤
根据视点中心位置和观察点的坐标,确定旋转角度和平移距离,旋转、平移视点及场景,生成新的模型视图矩阵;
根据视点中心位置和各视点的坐标,确定各个视点的错切角度;
根据各个视点的错切角度,生成与各视点一一对应的错切矩阵,将各个错切矩阵分别右乘所述新的模型视图矩阵,投影后得到各视点的立体视图。
本发明的有益效果为,通过于投影之前在X轴方向上对模型视图矩阵进行了错切变换,然后根据需要灵活选用投影方式进行立体视图的截取,可同时获得凹凸两种3D效果,且不会产生垂直视差,可增强3D效果的体验。


图1为本发明实施例的方法流程图2_a为现有技术的内八字透视投影法的示意图2_b为现有技术的并行不对称透视投影法的示意图3为现有技术的内八字投影法产生垂直视差的示意图4为本发明实施例的基于OpenGL的3D生成和体验系统示意图5为本发明实施例的错切变换原理示意图6为本发明实施例的视点3及对应视景体内物体的错切示意图7为本发明实施例的场景和视点错切变换的流程图8为本发明实施例的旋转平移后4个视点的位置示意图9为本发明实施例的视点2及对应视景体内物体的错切示意图10为本发明实施例的视点2和视点3同步错切后的视差示意图11-a为本发明实施例的glOrtho函数正交投影的示意图11-b为本发明实施例的glFrustum函数透视投影的示意图11-c为本发明实施例的gluPerspective函数透视投影的示意图12为本发明实施例的斜投影产生不同3D效果的示意图13为本发明实施例的凹陷凸出3D效果的形成原理示意图14为本发明实施例的垂直视差产生和消除示意图15-a为本发明实施例的视点2的视图的示意图15-b为本发明实施例的视点3的视图的示意图15-c为本发明实施例的红青模式的两个视图的3D源的示意图15-d为本发明实施例的左右格式的两个视图的3D源的示意图15-e为本发明实施例的两个视图叠加后的效果示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下通过具体实施例并参见附图,对本发明进行详细说明。
本发明中,基于OpenGL的3D生成和体验的系统流程如图4所示,即
步骤1 确定与OpenGL相关的参数,如视口大小、投影方式、视景体大小和视点位置;
步骤2 根据步骤1中视景体的大小调整虚拟3D场景;
步骤3 在投影前对视点和虚拟3D场景进行错切变换;
步骤4 投影错切后的场景形成视图并存储视步骤5 将存储的视图根据3D显示设备的性质,按需要的3D格式合成3D源,将合成的3D源以图像的形式发送至3D显示设备,体验其3D效果;
步骤6 为了获得好的3D效果,根据3D原理、错切变换和步骤5中的3D效果对步骤1中的OpenGL相关参数进行适当的修正。
本发明旨在现有OpenGL流水线机制基础上提供一种将虚拟3D场景转换为立体视图的方法。步骤1、步骤2和步骤4中的投影是OpenGL流水线机制的基本内容,步骤4中存储视图可调用OpenGL自带的函数glReadPixels从缓存中读出图像数据并存为需要格式的视图,步骤5中涉及到的3D显示设备的特性和3D源的格式属于0penGL、3D显示设备的基本使用原理。
相对于现有技术,本发明在OpenGL流水线机制中的投影步骤前引进了错切变换 (步骤幻,解决了现有技术中不能同时获得凹凸2种3D效果或立体图中有垂直视差的问题。同时,在错切变换的基础上,根据3D原理和步骤5的3D效果体验,步骤6给出了调节 OpenGL参数的方法,保证获得好的3D效果。
所述错切变换,如图5所示,是指三维坐标的y值和ζ值不变,χ值以ζ轴为依赖轴呈线性变换。设错切方向与ζ轴的夹角为^ ,错切表达式如下
权利要求
1.一种将虚拟3D场景转换为立体视图的方法,其特征在于,对于OpenGL中的任意虚拟 3D场景,预先设置观察点为坐标系的原点,进行转换时,执行以下步骤根据视点中心位置和观察点的坐标,确定旋转角度和平移距离,旋转、平移视点及场景,生成新的模型视图矩阵;根据视点中心位置和各视点的坐标,确定各个视点的错切角度;根据各个视点的错切角度,生成与各视点一一对应的错切矩阵,将各个错切矩阵分别右乘所述新的模型视图矩阵,投影后得到各视点的立体视图。
2.根据权利要求1所述的方法,其特征在于,所述投影后得到各视点的立体视图后进一步包括根据虚拟3D场景中任意一点在立体视图中的视差的约束关系和3D效果指标,调整物体的坐标、视图的水平分辨率、视景体的大小、视点位置,直到获得较好的3D效果。
3.根据权利要求2所述的方法,其特征在于,所述虚拟3D场景中任意一点在立体视图中的视差的约束关系包括^…2(z -zr) tan θ= Wldth ^^Th^ · , <-D . , ,D . , yy IOlLrιχpixel _ pixel-max, pixel-max _其中,Widthx*视景体近截面X轴方向上的宽度,width为视口的水平分辨率,任意视点的错切角度θ为该视点和原点的连线、与原点到视点中心位置的连线之间的夹角, Z0=-^x2c+y2c+Z2c , (χ。,y。,zc)为旋转平移前视点中心位置的坐标,ζ为场景中物体的ζ坐标值;is/tiHiewidth xcVl + x2 不丨丨 η了鬼先 艮据D .丨 =-Y导到Dpixel_max,pixel"max2.54ax其中,a为3D显示器的尺寸,χ为显示器屏幕的长宽比,c为人两眼之间的距离。
4.根据权利要求1所述的方法,其特征在于,所述根据观察点和视点中心位置的坐标, 确定旋转角度和平移距离,旋转、平移视点及场景,包括顺序执行 OpenGL 操作 glRotated (2 π - a , 1,0,0), glRotated (γ ,0,1,0),glTranslated(0, 0, ^x1c +y2c +z2c );或者将OpenGL旋转平移前的坐标系右乘矩阵 cos β, 0, sin β, 0-sin a sin β, cos a, sin a cos β, 0 -cos a sin β, - sin a, cos a cos β, 0OA-^2c+y2c+4 Λ_其中,(xc, yc, zc)为旋转平移前视点中心位置的坐标,α、β由下列式子确定[1]
5.根据权利要求1所述的方法,其特征在于,所述根据视点中心位置和各视点的坐标, 确定各个视点的错切角度,包括设旋转平移前各视点中任意视点的坐标为(X” Ii, Zi),则所述任意视点的错切角度为该视点和原点的连线、与原点到视点中心位置的连线之间的夹角,记为θ
6.根据权利要求1所述的方法,其特征在于,所述根据各个视点的错切角度,生成与各视点一一对应的错切矩阵,包括设旋转、平移后的世界坐标系为坐标系则在坐标系下,位于Γ轴正半轴的所有视点的错切矩阵均为
全文摘要
本发明公开了一种将虚拟3D场景转换为立体视图的方法。执行如下步骤可将OpenGL中任意虚拟的3D场景转换为立体视图旋转平移世界坐标系,新坐标系以观察点为原点,视点的中心位置到观察点连线为Z轴正半轴。根据视点的中心位置和观察点的坐标,确定旋转角度和平移距离;根据视点中心位置和各视点的坐标,确定各视点的错切角度,生成对应的错切矩阵,右乘各视点的模型视图矩阵,投影后得到各视点相应的图像数据;根据视差的约束条件和3D效果体验调整3D场景的坐标、视图的水平分辨率、视景体大小和视点位置,改善立体视图的3D效果。本发明OpenGL处理流程中通过插入错切变换和参数调整可消除3D效果不明显及存在垂直视差的问题,获得最佳3D效果。
文档编号G06T15/00GK102509334SQ20111028224
公开日2012年6月20日 申请日期2011年9月21日 优先权日2011年9月21日
发明者卞爱友, 李中梅, 肖炳珠 申请人:北京捷成世纪科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1