基于左右眼空间复用的虚拟三维场景立体画面绘制方法与流程

文档序号:17150311发布日期:2019-03-19 23:21阅读:337来源:国知局
基于左右眼空间复用的虚拟三维场景立体画面绘制方法与流程

本发明属于虚拟三维场景绘制技术领域,涉及一种基于左右眼空间复用的虚拟三维场景立体画面绘制方法。



背景技术:

近年来,虚拟现实(vr)技术备受人们关注。在通常情况下,vr应用需要实时地把虚拟三维场景以图像画面的形式显示在用户眼前,以便让用户能够通过视觉感知到虚拟三维场景的存在。高沉浸感vr应用系统往往需要给用户显示立体画面。当前广泛使用的立体画面形式为基于双目视差的立体图像画面,即每幅立体画面包含分别与左、右眼相对应的两张子图。在播放立体画面时,用户的左眼只能看到与左眼相对应的子图(后面称为左眼图像),用户的右眼只能看到与右眼相对应的子图(后面称为右眼图像)。在绘制虚拟三维场景的立体画面时,实际上需要绘制左、右眼两幅子图,因此绘制立体画面的时间开销大于绘制非立体画面的时间开销。传统上,虚拟三维场景立体画面的绘制通过分别独立绘制左眼图像和右眼图像的方式来实现。使用这种立体画面绘制方式会导致绘制立体画面的时间开销大约是绘制非立体画面的时间开销的二倍。分析虚拟三维场景的立体画面可以发现,左、右眼两幅子图虽然有细微差别,但通常看起来非常相似。这表明绘制左眼图像时得到的结果可以在绘制右眼图像时被复用,从而减小绘制整幅立体画面的总时间开销。当然,对于镜面反射三维几何对象来说,其表面上的光线反射具有很强的空间方向性,因此通常难以在绘制左、右眼图像时复用镜面反射表面可视场景点的光照结果。这里所述的可视场景点就是从相机位置发射的穿过相机的虚拟像素平面上的像素的光线与虚拟三维场景的三维几何对象之间的离相机所在位置最近的交点。本发明提供一种基于左右眼空间复用的虚拟三维场景立体画面绘制方法,在绘制右眼图像时通过复用左眼相机的非镜面反射可视场景点的光照计算结果来实现虚拟三维场景立体画面绘制的加速。



技术实现要素:

本方法的目的在于,提供一种基于左右眼空间复用的虚拟三维场景立体画面绘制方法,以便加快虚拟三维场景立体画面的绘制速度。

本方法的技术方案是这样实现的:基于左右眼空间复用的虚拟三维场景立体画面绘制方法,其特征在于:首先,根据立体画面绘制要求,设置左眼相机和右眼相机的位置、水平视场角、垂直视场角、正前方向、向上方向、水平方向、虚拟像素平面上的像素行数m以及虚拟像素平面上的像素列数n共八个参数;如图1所示,左眼相机的正前方向为方向向量w1,左眼相机的向上方向为方向向量v1,左眼相机的水平方向为方向向量u1,右眼相机的正前方向为方向向量w2,右眼相机的向上方向为方向向量v2,右眼相机的水平方向为方向向量u2;方向向量u1、方向向量v1、方向向量w1确定了左眼相机的相机坐标系u1-v1-w1;方向向量u2、方向向量v2、方向向量w2确定了右眼相机的相机坐标系u2-v2-w2;三维几何对象的顶点坐标在世界坐标系x-y-z中描述;左眼相机和右眼相机的虚拟像素平面上的像素行数m取相同值,左眼相机和右眼相机的虚拟像素平面上的像素列数n取相同值;左眼相机和右眼相机的水平视场角取相同值θu,左眼相机和右眼相机的垂直视场角取相同值θv。左眼相机的虚拟像素平面上的像素的行号和列号的编号方式如图2所示,右眼相机的虚拟像素平面上的像素的行号和列号的编号方式如图3所示。然后,执行以下步骤:

步骤step101:在计算机系统的内存中创建一个包含m行、n列元素的二维数组ill;把二维数组ill的每个元素都赋值为0;二维数组ill的元素与左眼相机的虚拟像素平面上的像素一一对应;在计算机系统的内存中创建一个包含m行、n列元素的二维数组tagr;把二维数组tagr的每个元素都赋值为0;二维数组tagr的元素与右眼相机的虚拟像素平面上的像素一一对应;在计算机系统的内存中创建一个包含m行、n列元素的二维数组ilr;把二维数组ilr的每个元素都赋值为0;二维数组ilr的元素与右眼相机的虚拟像素平面上的像素一一对应;

步骤step102:从左眼相机所在位置发射穿过左眼相机的虚拟像素平面上的每个像素的中心位置的光线a001,光线a001与左眼相机的虚拟像素平面上的像素一一对应;针对每条光线a001,做如下操作:

步骤step102-1:计算光线a001与虚拟三维场景的三维几何对象之间的离左眼相机所在位置最近的交点a002,使用光线跟踪技术计算交点a002的光照值a003;计算与光线a001对应的左眼相机的虚拟像素平面上的像素在左眼相机的虚拟像素平面上的行号irow和列号icol,把二维数组ill的第irow行、第icol列的元素赋值为光照值a003;

步骤step102-2:如果交点a002所在三维几何对象表面是镜面反射表面,则转步骤step102-3,否则执行如下操作:

①判断以交点a002和右眼相机所在位置为端点的线段seg与虚拟三维场景的三维几何对象之间是否有除线段seg的两个端点外的其他交点,如果有,则转步骤step102-3,否则根据交点a002在世界坐标系x-y-z中的三维坐标,计算交点a002在相机坐标系u2-v2-w2中的三维坐标pcr,三维坐标pcr的沿u2轴的坐标分量为pcru2,三维坐标pcr的沿v2轴的坐标分量为pcrv2,三维坐标pcr的沿w2轴的坐标分量为pcrw2;

②如果|pcru2/pcrw2|大于tan(θu/2)或者|pcrv2/pcrw2|大于tan(θv/2),|x|表示对x取绝对值,则转步骤step102-3,否则令表示对x向下取整;如果ncol>n,则令ncol=n;如果nrow>m,则令nrow=m;

③令nt等于二维数组tagr的第nrow行、第ncol列元素的值,令ibt等于二维数组ilr的第nrow行、第ncol列元素的值,令ia等于光照值a003,把二维数组ilr的第nrow行、第ncol列元素赋值为ibt×nt/(nt+1)+ia/(nt+1),把二维数组tagr的第nrow行、第ncol列元素赋值为nt+1;

步骤step102-3:针对光线a001的操作结束;

步骤step103:对右眼相机的虚拟像素平面上的每个像素a004,做如下操作:

步骤step103-1:计算像素a004在右眼相机的虚拟像素平面上的行号irow和列号icol;如果二维数组tagr的第irow行、第icol列元素的值不为0,则转步骤step103-2,否则从右眼相机所在位置发射穿过像素a004的中心位置的光线a005,计算光线a005与虚拟三维场景的三维几何对象之间的离右眼相机所在位置最近的交点a006,使用光线跟踪技术计算交点a006的光照值a007;把二维数组ilr的第irow行、第icol列元素赋值为光照值a007;

步骤step103-2:针对像素a004的操作结束;

步骤step104:把二维数组ill和二维数组ilr中保存的光照值分别转换成左眼图像的像素颜色值和右眼图像的像素颜色值,并输出到立体显示设备上显示。

本发明方法提供了一种基于左右眼空间复用的虚拟三维场景立体画面绘制方法。本方法在绘制左眼图像时,如果左眼相机的可视场景点不在镜面反射表面上,则把左眼相机的可视场景点对应到右眼相机的虚拟像素平面上,并把该可视场景点的光照值作为右眼相机的相应像素对应的可视场景点的近似光照值。此外,本发明方法提供了高效地处理多个左眼相机的可视场景点对应到右眼相机的同一个像素的问题的方案,其不需要先用缓冲区保存涉及的多个左眼相机的可视场景点的光照值,最后再执行额外操作合并这些光照值。本发明方法提供了正确处理因左、右眼相机位置不同导致的可视场景点对应过程中的遮挡问题的方案。在绘制右眼图像时,不再处理已经通过可视场景点对应操作得到近似光照值的可视场景点。本发明方法可以显著提高虚拟三维场景立体画面的绘制速度。

附图说明

图1为使用左、右眼相机拍摄虚拟三维场景立体画面的示意图。

图2为左眼相机的虚拟像素平面上的像素矩阵及行列编号方式示意图。

图3为右眼相机的虚拟像素平面上的像素矩阵及行列编号方式示意图。

具体实施方式

为了使本方法的特征和优点更加清楚明白,下面结合具体实施例对本方法作进一步的描述。在本实施例中,考虑如下虚拟房间三维场景:在房间中放着一张桌子和一把椅子,在房间的一面墙上挂着一面镜子。房间中除了镜子为镜面反射对象外,其他三维几何对象都是漫反射对象。计算机系统的cpu选择intel(r)xeon(r)cpue3-1225v3@3.20ghz,内存选择金士顿8gbddr31333,硬盘选择buffalohd-ce1.5tu2;计算机操作系统选用windows7,软件编程工具选用vc++2010。

本方法的技术方案是这样实现的:基于左右眼空间复用的虚拟三维场景立体画面绘制方法,其特征在于:首先,根据立体画面绘制要求,设置左眼相机和右眼相机的位置、水平视场角、垂直视场角、正前方向、向上方向、水平方向、虚拟像素平面上的像素行数m以及虚拟像素平面上的像素列数n共八个参数;如图1所示,左眼相机的正前方向为方向向量w1,左眼相机的向上方向为方向向量v1,左眼相机的水平方向为方向向量u1,右眼相机的正前方向为方向向量w2,右眼相机的向上方向为方向向量v2,右眼相机的水平方向为方向向量u2;方向向量u1、方向向量v1、方向向量w1确定了左眼相机的相机坐标系u1-v1-w1;方向向量u2、方向向量v2、方向向量w2确定了右眼相机的相机坐标系u2-v2-w2;三维几何对象的顶点坐标在世界坐标系x-y-z中描述;左眼相机和右眼相机的虚拟像素平面上的像素行数m取相同值,左眼相机和右眼相机的虚拟像素平面上的像素列数n取相同值;左眼相机和右眼相机的水平视场角取相同值θu,左眼相机和右眼相机的垂直视场角取相同值θv。左眼相机的虚拟像素平面上的像素的行号和列号的编号方式如图2所示,右眼相机的虚拟像素平面上的像素的行号和列号的编号方式如图3所示。然后,执行以下步骤:

步骤step101:在计算机系统的内存中创建一个包含m行、n列元素的二维数组ill;把二维数组ill的每个元素都赋值为0;二维数组ill的元素与左眼相机的虚拟像素平面上的像素一一对应;在计算机系统的内存中创建一个包含m行、n列元素的二维数组tagr;把二维数组tagr的每个元素都赋值为0;二维数组tagr的元素与右眼相机的虚拟像素平面上的像素一一对应;在计算机系统的内存中创建一个包含m行、n列元素的二维数组ilr;把二维数组ilr的每个元素都赋值为0;二维数组ilr的元素与右眼相机的虚拟像素平面上的像素一一对应;

步骤step102:从左眼相机所在位置发射穿过左眼相机的虚拟像素平面上的每个像素的中心位置的光线a001,光线a001与左眼相机的虚拟像素平面上的像素一一对应;针对每条光线a001,做如下操作:

步骤step102-1:计算光线a001与虚拟三维场景的三维几何对象之间的离左眼相机所在位置最近的交点a002,使用光线跟踪技术计算交点a002的光照值a003;计算与光线a001对应的左眼相机的虚拟像素平面上的像素在左眼相机的虚拟像素平面上的行号irow和列号icol,把二维数组ill的第irow行、第icol列的元素赋值为光照值a003;

步骤step102-2:如果交点a002所在三维几何对象表面是镜面反射表面,则转步骤step102-3,否则执行如下操作:

①判断以交点a002和右眼相机所在位置为端点的线段seg与虚拟三维场景的三维几何对象之间是否有除线段seg的两个端点外的其他交点,如果有,则转步骤step102-3,否则根据交点a002在世界坐标系x-y-z中的三维坐标,计算交点a002在相机坐标系u2-v2-w2中的三维坐标pcr,三维坐标pcr的沿u2轴的坐标分量为pcru2,三维坐标pcr的沿v2轴的坐标分量为pcrv2,三维坐标pcr的沿w2轴的坐标分量为pcrw2;

②如果|pcru2/pcrw2|大于tan(θu/2)或者|pcrv2/pcrw2|大于tan(θv/2),|x|表示对x取绝对值,则转步骤step102-3,否则令表示对x向下取整;如果ncol>n,则令ncol=n;如果nrow>m,则令nrow=m;

③令nt等于二维数组tagr的第nrow行、第ncol列元素的值,令ibt等于二维数组ilr的第nrow行、第ncol列元素的值,令ia等于光照值a003,把二维数组ilr的第nrow行、第ncol列元素赋值为ibt×nt/(nt+1)+ia/(nt+1),把二维数组tagr的第nrow行、第ncol列元素赋值为nt+1;

步骤step102-3:针对光线a001的操作结束;

步骤step103:对右眼相机的虚拟像素平面上的每个像素a004,做如下操作:

步骤step103-1:计算像素a004在右眼相机的虚拟像素平面上的行号irow和列号icol;如果二维数组tagr的第irow行、第icol列元素的值不为0,则转步骤step103-2,否则从右眼相机所在位置发射穿过像素a004的中心位置的光线a005,计算光线a005与虚拟三维场景的三维几何对象之间的离右眼相机所在位置最近的交点a006,使用光线跟踪技术计算交点a006的光照值a007;把二维数组ilr的第irow行、第icol列元素赋值为光照值a007;

步骤step103-2:针对像素a004的操作结束;

步骤step104:把二维数组ill和二维数组ilr中保存的光照值分别转换成左眼图像的像素颜色值和右眼图像的像素颜色值,并输出到立体显示设备上显示。

在本实施例中,m=1024,n=768,θu=π/3rad,θv=π/3rad。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1