发明名称 一种三维虚拟场景立体画面的绘制方法
摘要 本发明公开一种三维虚拟场景立体画面的绘制方法,属于真实感三维虚拟场景绘制技术领域。传统的三维虚拟场景立体画面绘制方法采用分别独立绘制左右眼虚拟相机的图像画面的方式实现立体画面的绘制。本发明方法首先绘制左眼虚拟相机的图像画面,记录从左眼虚拟相机位置向左眼虚拟相机的像平面上的像素发射的所有主光线与三维虚拟场景的面片的相交信息以及相应的源自光源的漫反射光照值和源自环境光的漫反射光照值;在绘制右眼虚拟相机的图像画面时,基于左眼虚拟相机的图像画面的绘制结果,计算源自光源的漫反射光照值和源自环境光的漫反射光照值,避免了大量的重复光照计算,可实现15%~30%的立体画面绘制加速。
申请公布号 CN102243768B 申请公布日期 2013.01.30
申请号 CN201110162976.5 申请日期 2011.06.17
申请人 长春理工大学 发明人 陈纯毅;杨华民;蒋振刚;范静涛;丁莹;韩成;冯欣;底晓强;陈占芳;李奇
分类号 G06T15/10(2006.01)I 主分类号 G06T15/10(2006.01)I
代理机构 代理人
主权项 1.一种三维虚拟场景立体画面的绘制方法,其特征在于,所需的数据结构及实现步骤如下:目的在于提供一种三维虚拟场景立体画面的绘制方法,首先绘制左眼虚拟相机的图像画面,并记录从左眼虚拟相机光心位置向左眼虚拟相机的像平面上的像素发射的所有主光线与三维虚拟场景的面片的相交信息以及相应的源自光源的漫反射光照值和源自环境光的漫反射光照值;在绘制右眼虚拟相机的图像画面时,利用绘制左眼虚拟相机的图像画面时记录的源自光源的漫反射光照值和源自环境光的漫反射光照值,来避免大量的重复光照计算,从而提高三维虚拟场景立体画面的绘制速度;方法提供一种光照数据记录结构,其包括源自光源的漫反射光照值成员变量I<sub>s</sub>、源自环境光的漫反射光照值成员变量I<sub>e</sub>、交点位置成员变量P<sub>s</sub>和交点处的面片索引号成员变量Id;方法提供一种像素位置映射结构,其包括标识成员变量tag、左眼图像像素行号成员变量L<sub>i</sub>、左眼图像像素列号成员变量L<sub>j</sub>、右眼图像像素行号成员变量R<sub>i</sub>、右眼图像像素列号成员变量R<sub>j</sub>、交点处的面片索引号成员变量idp;方法的第一部分绘制三维虚拟场景的左眼虚拟相机的图像画面,同时记录所有从左眼虚拟相机光心位置向左眼虚拟相机的像平面上的像素发射的主光线与三维虚拟场景中的面片的交点位置及相应的源自光源的漫反射光照值和源自环境光的漫反射光照值,具体步骤如下:步骤S101:创建一个光照数据记录结构类型的二维矩阵R,其包括M×N个元素,M为左眼虚拟相机的像平面上的像素行数,N为左眼虚拟相机的像平面上的像素列数,二维矩阵R中的元素与左眼虚拟相机的像平面上的像素一一对应;将二维矩阵R的每个元素的源自光源的漫反射光照值成员变量I<sub>s</sub>和源自环境光的漫反射光照值成员变量I<sub>e</sub>初始化为0;步骤S102:从左眼虚拟相机光心位置向左眼虚拟相机的像平面上的每个像素发射主光线A01,并测试主光线A01与三维虚拟场景的面片是否相交;如果不相交,则将主光线A01对应的像素的颜色值设置为背景色,否则计算交点位置P<sub>i</sub>,记录交点处的面片索引号IDS;判断交点位置P<sub>i</sub>所在面片的光源漫反射系数k<sub>d</sub>是否为0,若不为0,则利用蒙特卡洛方法计算交点处的源自光源的漫反射光照值I<sub>1</sub>,否则源自光源的漫反射光照值I<sub>1</sub>设置为0;判断交点位置P<sub>i</sub>所在面片的环境光漫反射系数k<sub>e</sub>是否为0,若不为0,则利用环境遮蔽体算法计算源自环境光的漫反射光照值I<sub>2</sub>,否则源自环境光的漫反射光照值I<sub>2</sub>设置为0;将I<sub>1</sub>、I<sub>2</sub>、P<sub>i</sub>和IDS分别赋值给二维矩阵R中与主光线A01相对应的元素的源自光源的漫反射光照值成员变量I<sub>s</sub>、源自环境光的漫反射光照值成员变量I<sub>e</sub>、交点位置成员变量P<sub>s</sub>和交点处的面片索引号成员变量Id;判断交点位置P<sub>i</sub>所在面片的镜面反射系数k<sub>s</sub>是否为0,若不为0,则利用蒙特卡洛方法计算源自光源的镜面反射光照值I<sub>3</sub>,同时生成镜面反射二次光线,并递归地跟踪计算源自镜面反射二次光线的光照值I<sub>4</sub>,否则源自光源的镜面反射光照值I<sub>3</sub>设置为0,源自镜面反射二次光线的光照值I<sub>4</sub>设置为0;将I<sub>1</sub>+I<sub>2</sub>+I<sub>3</sub>+I<sub>4</sub>作为主光线A01对应的像素的颜色值;如果三维虚拟场景中的某点105在左眼虚拟相机101的像平面102上的成像点位于像素p<sub>1</sub>上,在右眼虚拟相机102的像平面104上的成像点位于像素p<sub>2</sub>上,则像素p<sub>1</sub>和像素p<sub>2</sub>相对于点105构成映射关系;方法的第二部分计算左眼虚拟相机的像平面上的像素与右眼虚拟相机的像平面上的像素的映射关系,具体步骤如下:步骤S201:创建一个像素位置映射结构类型的二维矩阵R′,其包括M×N个元素,M为右眼虚拟相机的像平面上的像素行数,N为右眼虚拟相机的像平面上的像素列数,二维矩阵R′中的元素与右眼虚拟相机的像平面上的像素一一对应;将二维矩阵R′的每个元素的标识成员变量tag初始化为0;步骤S202:建立x-y-z坐标系,其原点位于右眼虚拟相机的像平面的中心,z轴正方向与右眼虚拟相机的前向方向向量F相同,y轴正方向与右眼虚拟相机的向上方向向量U相同,x轴正方向与向量F×U相同;根据右眼虚拟相机的水平方向视场角α和垂直方向视场角β以及右眼虚拟相机光心位置到x-y-z坐标系原点的距离确定右眼虚拟相机的像平面上的有效矩形成像区域A;步骤S203:对二维矩阵R中的每个元素E<sub>R</sub>,做如下计算:连接元素E<sub>R</sub>的交点位置成员变量P<sub>s</sub>表示的空间位置和右眼虚拟相机光心位置P<sub>c</sub>,得到一条直线段L,计算直线段L与右眼虚拟相机的像平面的交点S<sub>1</sub>,判断交点S<sub>1</sub>是否在有效矩形成像区域A之内,如果交点S<sub>1</sub>在有效矩形成像区域A内,则:根据右眼虚拟相机的图像分辨率和有效矩形成像区域A的几何尺寸,计算右眼虚拟相机的像平面的像素的水平方向几何尺寸s<sub>x</sub>和垂直方向几何尺寸s<sub>y</sub>;创建一个像素位置映射结构类型的变量V,变量V的标识成员变量tag设置为1,变量V的左眼图像像素行号成员变量L<sub>i</sub>设置为元素E<sub>R</sub>的行号,变量V的左眼图像像素列号成员变量L<sub>j</sub>设置为元素E<sub>R</sub>的列号,变量V的右眼图像像素行号成员变量R<sub>i</sub>设置为<img file="FSB00000967727700021.GIF" wi="261" he="160" />变量V的右眼图像像素列号成员变量R<sub>j</sub>设置为<img file="FSB00000967727700022.GIF" wi="245" he="147" />其中x<sub>S1</sub>、y<sub>S1</sub>分别为交点S<sub>1</sub>在x-y平面内的横、纵坐标,变量V的交点处的面片索引号成员变量idp设置为元素E<sub>R</sub>的交点处的面片索引号成员变量Id;将变量V赋值给二维矩阵R′中行号为变量V的右眼图像像素行号成员变量R<sub>i</sub>表示的行号、列号为变量V的右眼图像像素列号成员变量R<sub>j</sub>表示的列号的元素;方法的第三部分在方法的第一部分和第二部分的计算结果的基础上,绘制右眼虚拟相机的图像画面,具体步骤如下:步骤S301:从右眼虚拟相机光心位置向右眼虚拟相机的像平面上的每个像素Pix发射主光线301,并测试主光线301与三维虚拟场景的面片是否相交;如果不相交,则将主光线301对应的像素的颜色值设置为背景色,否则计算交点位置P<sub>i</sub>′,记录交点处的面片索引号IDS′;步骤S302:将像素Pix对应的二维矩阵R′的元素赋值给变量V′;如果变量V′的标识成员变量tag为1且IDS′等于V′的交点处的面片索引号成员变量idp的值,则转步骤S303,否则转步骤S304;步骤S303:将二维矩阵R中的元素E<sub>R</sub>′赋值给变量W,其中元素E<sub>R</sub>′的行号为V′的左眼图像像素行号成员变量L<sub>i</sub>表示的行号,元素E<sub>R</sub>′的列号为V′的左眼图像像素列号成员变量L<sub>j</sub>表示的列号;判断交点位置P<sub>i</sub>′所在面片的镜面反射系数k<sub>s</sub>是否为0,若不为0,则按照蒙特卡洛方法计算源自光源的镜面反射光照值I<sub>3</sub>′,同时生成镜面反射二次光线,并递归地跟踪计算源自镜面反射二次光线的光照值I<sub>4</sub>′,否则源自光源的镜面反射光照值I<sub>3</sub>′设置为0,源自镜面反射二次光线的光照值I<sub>4</sub>′设置为0;求变量W的源自光源的漫反射光照值成员变量I<sub>s</sub>、变量W的源自环境光的漫反射光照值成员变量I<sub>e</sub>、光照值I<sub>3</sub>′、光照值I<sub>4</sub>′等四个量的和,将其作为主光线301对应的像素的颜色值;转步骤S305;步骤S304:判断交点位置P<sub>i</sub>′所在面片的光源漫反射系数k<sub>d</sub>是否为0,若不为0,则利用蒙特卡洛方法计算交点处的源自光源的漫反射光照值I<sub>1</sub>′,否则源自光源的漫反射光照值I<sub>1</sub>′设置为0;判断交点位置P<sub>i</sub>′所在面片的环境光漫反射系数k<sub>e</sub>是否为0,若不为0,则利用环境遮蔽体算法计算源自环境光的漫反射光照值I<sub>2</sub>′,否则源自环境光的漫反射光照值I<sub>2</sub>′设置为0;判断交点位置P<sub>i</sub>′所在面片的镜面反射系数k<sub>s</sub>是否为0,若不为0,则按照蒙特卡洛方法计算源自光源的镜面反射光照值I<sub>3</sub>′,同时生成镜面反射二次光线,并递归地跟踪计算源自镜面反射二次光线的光照值I<sub>4</sub>′,否则源自光源的镜面反射光照值I<sub>3</sub>′设置为0,源自镜面反射二次光线的光照值I<sub>4</sub>′设置为0;将I<sub>1</sub>′+I<sub>2</sub>′+I<sub>3</sub>′+I<sub>4</sub>′作为主光线301对应的像素的颜色值;步骤S305:计算结束。
地址 130022 吉林省长春市卫星路7089号