著录项信息
专利名称 | 基于人眼立体视觉机制的自适应立体渲染方法 |
申请号 | CN200910034805.7 | 申请日期 | 2009-09-08 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2010-01-27 | 公开/公告号 | CN101635061 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06T15/00 | IPC分类号 | G;0;6;T;1;5;/;0;0;;;G;0;6;F;9;/;4;4查看分类表>
|
申请人 | 南京师范大学 | 申请人地址 | 江苏省南京市栖霞区灵山北路18号4幢102
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 南京泛在地理信息产业研究院有限公司 | 当前权利人 | 南京泛在地理信息产业研究院有限公司 |
发明人 | 闾国年;温永宁;盛业华;吴明光;周良辰 |
代理机构 | 南京知识律师事务所 | 代理人 | 樊文红 |
摘要
本发明涉及一种基于人眼立体视觉机制的自适立体渲染方法,目标是针对单视点透视投影的三维可视化程序,自适应地实现立体渲染输出。该方法包括下列步骤:设定自适应立体渲染控制参数:自适应立体渲染控制参数包含控制自适应立体渲染的渲染状态控制参数、单目视点变换参数、视觉模型参数和左右视点调整参数;选择自适应立体参数生成算法:通过将单视点变换参数和视觉模型参数合成,产生立体渲染所需的左右视点变换参数对;设置自适应三维渲染流水线模型:将三维场景数据经过视点变换后分为两个子渲染流程,通过左视点变换和投影变换形成左通道图像,右视点调整变换和投影变换形成右通道图像,左右两个通道形成立体输出像对。
1.基于人眼立体视觉机制的自适应立体渲染方法,其特征是,该方法包括下列步骤:
步骤1设定自适应立体渲染控制参数:自适应立体渲染控制参数包含控制自适应立体渲染的渲染状态控制参数、单视点变换参数、视觉模型参数和左右视点调整参数;
步骤2选择自适应立体参数生成算法:通过将单视点变换参数和视觉模型参数合成,产生立体渲染所需的左右视点变换参数对;
步骤3设置自适应三维渲染流水线模型:将三维场景数据经过视点变换后分为两个子渲染流程,渲染流水线中集成两个单通道的三维渲染流水线,分别是左视点渲染流水线和右视点渲染流水线,通过左视点变换和投影变换形成左通道图像,右视点调整变换和投影变换形成右通道图像,左右两个通道形成立体输出像对。
2.根据权利要求1所述的自适应立体渲染方法,其特征是,所述步骤3之后还包括以下步骤:步骤4设置自适应立体渲染流水线控制接口。
3.根据权利要求1所述的自适应立体渲染方法,其特征是,所述步骤1中自适应立体渲染控制参数包含如下三个部分:
A.单目透视投影参数,包括视点参数和透视投影参数,其中,
视点参数包括如下变量:a.视点位置,b.视点方向,c.视点的正上方向;
透视投影参数包括:a.近平面的位置,即一个垂直于Z轴,距离视点为近平面的位置ZNear的平面;b.远平面的位置,即一个垂直于Z轴,距离视点为远平面的位置ZFar的平面;c.视角,即一个视点左右边距形成的张角;d.投影平面宽高比;
B.立体视觉视点调整参数,该参数包含如下变量:
a.眼基距系数,b.视点汇聚距离系数,c.是否启用视点汇聚,该参数为真时,启动汇聚立体投影,为假时启动平行立体投影;
C.是否开启立体渲染支持状态参数,用以控制是否开启立体视觉支持。
4.根据权利要求1所述的自适应立体渲染方法,其特征是,所述步骤2的自适应立体渲染参数对生成算法具体为:基于步骤1所给参数,求解出针对三维几何坐标的左右两个坐标变换序列,每个序列均包含视点变换矩阵和投影变换矩阵。
5.根据权利要求1所述的自适应立体渲染方法,其特征是,所述步骤3中设置自适应三维渲染流水线模型具体为:应用步骤1的自适应立体渲染控制参数和步骤2的算法,结合单视点透视投影三维渲染模型实现左右两个单视点透视投影三维渲染通道。
6.根据权利要求2所述的自适应立体渲染方法,其特征是,所述自适应立体渲染流水线控制接口为API控制模式:用户程序通过API函数的方法开启/关闭自适应双目立体渲染流水线,设置人眼立体视觉模型参数;包含如下API函数:
a)开启自适应双目立体渲染流水线的函数,调用后当前流水线是否立体打开的状态IsStereoOpen状态为真;
b)关闭自适应双目立体渲染流水线的函数,调用后当前流水线是否立体打开的状态IsStereoOpen为假;
c)获取自适应双目立体渲染流水线状态的函数,返回当前流水线是否立体打开的状态;
d)设置人眼立体视觉参数的函数,可设置眼基距系数、视点汇聚距离系数、是否启用视点汇聚;
e)获取人眼立体视觉参数的函数,可获取眼基距系数、视点汇聚距离系数、是否启用视点汇聚。
7.根据权利要求2所述的自适应立体渲染方法,其特征是,所述自适应立体渲染流水线控制接口为参数文件方法:用户程序启动立体渲染流水线,并运行流水线的初始化过程,流水线的初始化过程读取指定位置的配置文件,以确定流水线的运行状态。
8.根据权利要求2所述的自适应立体渲染方法,其特征是,所述自适应立体渲染流水线控制接口为用户界面方法:用户程序启动立体渲染流水线,并运行流水线的初始化过程,流水线的初始化过程提供一个用户交互界面,以确定流水线的运行状态。
9.根据权利要求4所述的自适应立体渲染方法,其特征是,所述参数算法是:
A.当是否支持左右视点的视线相交变量IsEyeCross为假时,算法执行如下步骤:
A1)求视点偏移距离EyeDistance:
EyeDistance = EyeDistanceFactor*ZNear/tan(FieldOfView/2), 其 中EyeDistanceFactor为眼距基系数,ZNear为近平面,FieldOfView为视角;
A2)求视点坐标系在世界坐标系中的方向单位向量U、V、W:
U(ux,uy,uz),v(vx,vy,vz),w(wx,wy,wz),其中U是x轴方法向量,V是y轴方向向量,W是z轴方向向量,LookAtDirection为视点方向,UpDirection为视点的正上方向,则U=LookAtDirection
V=LookAtDirection×UpDirection
W=U×V
单位化U、V、W
U=U/|U|
V=V/|V|
W=W/|W|
A3)求左视点位置LeftEyePosition,其中EyePosition为视点位置:
LeftEyePosition=EyePosition+U·EyeDistance
A4)用LeftEyePosition,LookAtDirection和UpDirection构造左视点变换矩阵LeftEyeTransform;
A5)求右视点位置RightEyePosition:
RightEyePosition=EyePosition-U·EyeDistance
A6)用RightEyePosition,LookAtDirection和UpDirection构造右视点变换矩阵RightEyeTransform;
A7)LeftEyeTransform,RightEyeTransform即是所求矩阵,这两个矩阵均为4×4的矩阵;
B.当是否支持左右视点的视线相交变量IsEyeCross为真时,算法执行如下步骤:
B1)求近平面宽度nearWidth:
nearWidth=ZNear/tan(FieldOfView/2),其中ZNear为近平面,FieldOfView为视角;
B2)求视点偏移距离EyeDistance:
EyeDistance=EyeDistanceFactor·nearWidth,其中EyeDistanceFactor为眼距基系数,ZNear为近平面,FieldOfView为视角;
B3)求交点偏移距离EyeCrossDistance:
EyeCrossDistance = EyeCrossDistanceFactor·nearWidth, 其 中
EyeCrossDistanceFactor为视点汇聚距离系数;
B4)求视点坐标系在世界坐标系中的方向单位向量U、V、W:
U(ux,uy,uz),v(vx,vy,vz),w(wx,wy,wz),其中U是x轴方法,V是y轴方向,W是z轴方向,
则U=LookAtDirection
V=LookAtDirection×UpDirection
W=U×V
单位化U、V、W
U=U/|U|
V=V/|V|
W=W/|W|
B5)求两视线相交位置EyeCrossPoint:
EyeCrossPoint=EyePosition+V·EyeCrossDistance
B6)求左视点位置LeftEyePosition:
LeftEyePosition=EyePosition+U·EyeDistance
B7)求左视点方向向量
LeftEyeDirection=EyeCrossPoint-LeftEyePosition
B8)用LeftEyePosition,LeftEyeDirection,UpDirection构造左视点下的变换矩阵LeftEyeTransform;
B9)求右视点位置RightEyePosition:
RightEyePosition=EyePosition-U·EyeDistance
B10)求左视点方向向量
RightEyeDirection=EyeCrossPoint-RightEyePosition
B11)用RightEyePosition,RightEyeDirection和UpDirection构造右视点下的变换矩阵RightEyeTransform;
LeftEyeTransform,RightEyeTransform即是所求矩阵,这两个矩阵均为4×4的矩阵。
10.根据权利要求5所述的自适应立体渲染方法,其特征是,一个三维对象的绘制分成左右两个分离的绘制过程:
(a)用左通道的 视点变换矩阵LeftEyeTransform和 透视投影变换矩 阵
ProjectTransform构成左视点的几何变换,对三维对象进行渲染,形成左视点下图像;
(b)用右通道的视点变换矩阵RightEyeTransform和透视投影变换矩阵
ProjectTransform构成右视点的几何变换,对三维对象进行渲染,形成右视点下图像。
基于人眼立体视觉机制的自适应立体渲染方法\n技术领域\n[0001] 本发明涉及计算机图形学中的三维可视化技术,给出了一种自适应的双目立体视觉渲染方法,建立了基于该方法的自适应双目立体渲染流水线模型,支持将传统非立体显示的三维应用程序不加更改的进行立体显示,也可以简化现有的立体渲染模型,加快三维应用程序在立体渲染时的效率,降低进行开发时的难度。\n背景技术\n[0002] 人眼具有天然的立体观察能力,借助于同一物体在人的左右两个眼睛中成像的差异,大脑可以获得物体的三维视觉。经典的计算机实时三维渲染的流水线,采用的绘制模型是基于三角面片的绘制模型,流水线的输入是由一系列三维几何顶点组成的三角面片的集合,由这个三角面片集合表示三维对象的几何形态,顶点包含三维的几何坐标,还包含颜色、纹理坐标、法线向量等参数供三维渲染之用。三维几何顶点经过一系列的坐标变换(世界变换、视点变换、投影变换、视口变换)等,由三维空间坐标,变换为二维图像上的坐标。\n三维流水线实现复杂,计算量巨大,工业界在降低应用复杂性,提高运算速度方面开展了两方面的工作:其一是定义标准的API(Application Programming Interface)接口,这个工作将复杂的三维渲染流水线以标准接口的方式提供,使得应用程序开发者通过标准接口编写三维渲染程序,API负责控制流水线的渲染流程;其二是开发具有三维渲染加速功能的硬件设备(显卡),通过硬件来实现渲染流水线的算法,提高实时渲染的效率。\n[0003] 三维应用程序通过3D API完成对三维场景的渲染,通过3D API可以将三维建模的对象在一定的参数下,通过透视投影的方式绘制到一幅图像(帧缓冲区)中,如果将相同的数据再按照人眼的立体视觉模型在两个视点下进行渲染,则可以产生两幅图像,形成立体像对,供立体输出和立体观察。但是这种方式需要三维应用程序独立的调用两次渲染过程,分别设置左视点参数、右视点参数,相同的数据要两次经过独立的渲染,才能产生立体像对。对于仅仅使用单视点绘制的程序,只能产生透视投影的效果,而不能产生真三维立体显示效果,而大部分的三维应用程序都是基于单视点透视投影技术的,所以,当需要这些三维应用程序的实现真三维立体输出时,必须更改程序的源代码,显示调用三维立体渲染过程。针对现有的立体显示技术存在的缺陷,本发明提出基于人眼立体视觉机制的自适应立体渲染方法,简化三维立体渲染的开发流程,实现任意三维应用程序自适应地实现真立体三维显示与观察。\n发明内容\n[0004] 本发明的目的是改进现有三维可视化程序的开发模式,支持在不改变现有单视点三维渲染程序的情况下,针对单视点透视投影的三维可视化程序,自适应地实现双通道的三维立体输出。\n[0005] 计算机三维显示的基本原理是将三维场景经过一系列的几何变换和处理之后,生成一幅二维栅格图像在屏幕设备上输出。三维场景中包含一系列的三维对象,三维对象是由一系列三维顶点构成的几何图元组合而成。三维顶点是一个包含三维空间位置及其对应的渲染参数的结构。首先对顶点数据进行坐标变换和顶点的光照计算,在坐标变换中,描述物体几何形状的顶点被变换到视点为中心的坐标系下,而光照计算确定每个顶点应该具有的颜色和亮度,这些几何对象最终被栅格化成像素,在帧缓存中等待显示。如图1所示。\n[0006] 三维图形渲染的坐标变换都是将上一步变换结果作为输出的,构成一个顶点坐标变换的流水线,如附图2所示。所有三维对象的坐标均被统一到了同一个坐标系下,经过投影和裁剪形成规格化的坐标,通过栅格化变换形成图像像素。\n[0007] Z缓冲区算法又称深度缓冲算法。由于二维平面坐标在透视投影下可以对应无限多个三维坐标。所以栅格化的几何对象包含了每个像素对应和视点距离相关的称为深度值的参数,如果栅格化的像素的深度值小于该位置原来像素的深度值,就用这个像素的值代替原来位置的值,这就保证了总是距离视点最近的像素被保存下来。\n[0008] 本发明的另一个基础是人眼的立体视觉原理。人有两只眼,两只眼有一定间隔,使得统一物体的影象在两眼中存在一些差异,大脑会根据这种差异产生立体感。三维立体显示就是基于这一原理,分别对两个视点进行渲染,生成两幅图像,分别呈现给左右眼,以获得立体感。\n[0009] 本发明的技术方案是:基于人眼立体视觉机制的自适应立体渲染方法,该方法包括下列步骤:\n[0010] 步骤1设定自适应立体渲染控制参数:自适应立体渲染控制参数包含控制自适应立体渲染的渲染状态控制参数、单视点变换参数、视觉模型参数和左右视点调整参数;\n[0011] 步骤2选择自适应立体参数生成算法:通过将单视点变换参数和视觉模型参数合成,产生立体渲染所需的左右视点变换参数对;\n[0012] 步骤3设置自适应三维渲染流水线模型:将三维场景数据经过视点变换后分为两个子渲染流程,通过左视点变换和投影变换形成左通道图像,右视点调整变换和投影变换形成右通道图像,左右两个通道形成立体输出像对。\n[0013] 上述技术方案的具体说明如下:\n[0014] (1)在一个双通道渲染流水线中集成两个单通道的三维渲染流水线,分别是左视点渲染流水线(Left Pipe Line)和右视点渲染流水线(Right Pipe Line)。\n[0015] (2)将人眼的视觉模型参数(眼基距、视点交点)引入到双通道流水线中。\n[0016] (3)用户按照单视点透视投影方式设定双通道流水线,主要通过视点参数,包括视点位置(EyePostion)、视点方向(LookAtDirection)、视点上方向(UpDirection);透视投影参数,包括近平面位置(ZNear)、远平面位置(ZFar)、视角(FieldOfView)、宽高比(Aspect)。如图3所示。\n[0017] (4)根据视觉模型参数和单视点透视投影参数,左右两个视点是位于视点坐标系的X轴上距离原点两侧且与原点距离相等的点,设定视点距离参数(EyeDistance),构造出左右两个视点位置。按照立体渲染的基本原理,左右两个视点的视线可以平行,也可以相交,如果相交,则交点一定位于视点坐标系的y轴上。设定参数表示交点距原点的距离EyeCrossDistance。\n[0018] 因为经过视点变换之后,所有数据都在视点空间形成的参数空间中,所以近平面宽度ZNearWidth为基本单位,EyeDistance和EyeCrossDistance由该距离表示,有 参 数EyeDistanceFactor 和EyeCrossDistanceFactor。 使 得EyeDistance =ZNearWidth*EyeDistanceFactor,EyeCrossDistance=EyeCrossDistanceFactor*ZNearWidth。\n[0019] (5)左右两个流水线共享相同的投影矩阵,而左右两个视点变换矩阵(LeftEyeTransform,RightEyeTransform)的关键参数,可以由如下算法求出:\n[0020] 算法分两种情况实现,考虑是否支持左右视点的视线相交(IsEyeCross):\n[0021] A.当IsEyeCross为假时,算法执行如下步骤:\n[0022] a1.求视点偏移距离EyeDistance:\n[0023] EyeDistance=EyeDistanceFactor*ZNear/tan(FieldOfView/2)[0024] a2.求视点坐标系在世界坐标系中的方向单位向量U、V、W:\n[0025] U(ux,uy,uz),v(vx,vy,vz),w(wx,wy,wz)。其中U是x轴方法向量,V是y轴方向向量,W是z轴方向向量。\n[0026] 则U=LookAtDirection\n[0027] V=LookAtDirection×UpDirection\n[0028] W=U×V\n[0029] 单位化U、V、W\n[0030] U=U/|U|\n[0031] V=V/|V|\n[0032] W=W/|W|\n[0033] a3.求左视点位置LeftEyePostion:\n[0034] LeftEyePostion=EyePostion+U·EyeDistance\n[0035] a4.用LeftEyePostion和LookAtDirection,UpDirection构造左视点变换矩阵[0036] LeftEyeTransform。\n[0037] a5.求右视点位置RightEyePostion:\n[0038] RightEyePostion=EyePosition-U·EyeDistance\n[0039] a6.用RightEyePostion和LookAtDirection,UpDirection构造右视点变换矩阵[0040] RightEyeTransform。\n[0041] a7.LeftEyeTransform,RightEyeTransform即是所求矩阵,这两个矩阵均为4×4的矩阵。\n[0042] B.当IsEyeCross为真时,算法执行如下步骤:\n[0043] b1.求近平面宽度nearWidth:\n[0044] nearWidth=ZNear/tan(FieldOfView/2)\n[0045] b2.求视点偏移距离EyeDistance:\n[0046] EyeDistance=EyeDistanceFactor·nearWidth\n[0047] b3.求交点偏移距离EyeCrossDistance:\n[0048] EyeCrossDistance=EyeCrossDistanceFactor·nearWidth\n[0049] b4.求视点坐标系在世界坐标系中的方向单位向量U、V、W:\n[0050] U(ux,uy,uz),v(vx,vy,vz),w(wx,wy,wz)。其中U是x轴方法,V是y轴方向,W是z轴方向。\n[0051] 则U=LookAtDirection\n[0052] V=LookAtDirection×UpDirection\n[0053] W=U×V\n[0054] 单位化U、V、W\n[0055] U=U/|U|\n[0056] V=V/|V|\n[0057] W=W/|W|\n[0058] b5.求两视线相交位置EyeCrossPoint:\n[0059] EyeCrossPoint=EyePosition+V·EyeCrossDistance\n[0060] b6.求左视点位置LeftEyePostion:\n[0061] LeftEyePostion=EyePostion+U·EyeDistance\n[0062] b7.求左视点方向向量\n[0063] LeftEyeDirection=EyeCrossPoint-LeftEyePostion\n[0064] b8.用LeftEyePosition,LeftEyeDirection,UpDirection构造左视点下的变换矩阵\n[0065] LeftEyeTransform。\n[0066] b9.求右视点位置RightEyePostion:\n[0067] RightEyePostion=EyePostion-U·EyeDistance\n[0068] b10.求左视点方向向量\n[0069] RightEyeDirection=EyeCrossPoint-RightEyePostion\n[0070] b11.用RightEyePostion,RightEyeDirection,UpDirection构造右视点下的变换矩阵\n[0071] RightEyeTransform。\n[0072] LeftEyeTransform,RightEyeTransform即是所求矩阵,这两个矩阵均为4×4的矩阵。\n[0073] (6)基于人眼视觉模型的集成双通道立体渲染流水线的渲染流程如下:\n[0074] 61.设置人眼视觉模型参数:眼基距系数(EyeDistanceFactor)、视点汇聚距离系数(EyeCrossDistanceFactor)、是否启用视点汇聚(IsEyeCross)。\n[0075] 62.开始一帧场景绘制。\n[0076] 63.设置单目透视投影参数:视点参数,包括视点位置(EyePostion)、视点方向(LookAtDirection)、视点的正上方向(UpDirection);透视投影参数,包括近平面的位置(ZNear)、远平面的位置(ZFar)、视角(FieldOfView)、投影平面宽高比(aspect)。\n[0077] 64.按照上述(5)中的算法计算出左右通道的视点变换矩阵\n[0078] LeftEyeTransform,RightEyeTransform,透视投影变换矩阵ProjectTransform。\n[0079] 65.绘制一个三维对象:用LeftEyeTransform,ProjectTransform等变换,在左通道中渲染三维对象;用RightEyeTransform,ProjectTransform等变换,在由通道中渲染三维对象。左右通道中的绘制可以采用并行方式也可以采用串行方式。\n[0080] 66.对场景中的所有三维对象依次采用步骤65)的过程进行绘制。\n[0081] 67.结束一帧场景的绘制。\n[0082] 作为本发明的进一步改进,对基于视觉机制的集成双通道立体渲染流水线模型的用户接口如下:\n[0083] (X)API模式:用以在编程层次控制视觉参数和状态控制参数:\n[0084] X1.开启自适应双目立体渲染流水线的函数,调用IsStereoOpen状态为真。\n[0085] X2.关闭自适应双目立体渲染流水线的函数,调用后IsStereoOpen为假。\n[0086] X3.获取自适应双目流水线的状态的函数,返回当前流水线是否立体打开的状态(IsStereoOpen)\n[0087] X4.设置人眼立体视觉参数的函数,可设置眼基距系数(EyeDistanceFactor)、视点汇聚距离系数(EyeCrossDistanceFactor)、是否启用视点汇聚(IsEyeCross)。\n[0088] X5.获取人眼立体视觉参数的函数,可获取眼基距系数(EyeDistanceFactor)、视点汇聚距离系数(EyeCrossDistanceFactor)、是否启用视点汇聚(IsEyeCross)。\n[0089] (Y)参数文件方式:在计算机存储设备的特定位置存储如下信息块:\n[0090] Y1.否立体打开的状态(IsStereoOpen);\n[0091] Y2.人眼立体视觉参数:人眼镜基距系数(EyeDistanceFactor)、视点汇聚距离系数(EyeCrossDistanceFactor)、是否启用视点汇聚(IsEyeCross)。\n[0092] 用户程序启动流水线时,从特定位置读取上述信息,并保存到流水线中的相应变量中。\n[0093] (Z)用户界面方式:用户程序启动流水线时,提供输入界面(字符界面和图形界面),输入\n[0094] 如下信息保存在保存到流水线中的相应变量中:\n[0095] Z1.否立体打开的状态(IsStereoOpen);\n[0096] Z2.人眼立体视觉参数:人眼镜基距系数(EyeDistanceFactor)、视点汇聚距离系数(EyeCrossDistanceFactor)、是否启用视点汇聚(IsEyeCross)。\n附图说明\n[0097] 图1是计算机三维显示的基本原理图\n[0098] 图2是三维图形渲染流水线示意图\n[0099] 图3是单视点透视投影方式设定双通道流水线示意图\n[0100] 图4是本发明实施例1流程图\n具体实施方式\n[0101] 下面结合附图和实施例做进一步说明。\n[0102] 实施例1\n[0103] 基于人眼立体视觉机制的自适应立体渲染方法,该方法包括下列步骤:\n[0104] 步骤1设定自适应立体渲染控制参数:自适应立体渲染控制参数包含控制自适应立体渲染的渲染状态控制参数、单视点变换参数单视点变换参数、视觉模型参数和左右视点调整参数;\n[0105] 步骤2选择自适应立体参数生成算法:通过将单视点变换参数和视觉模型参数合成,产\n[0106] 生立体渲染所需的左右视点变换参数对;\n[0107] 步骤3设置自适应三维渲染流水线模型:将三维场景数据经过视点变换后分为两个子渲染流程,通过左视点变换和投影变换形成左通道图像,右视点调整变换和投影变换形成右通道图像,左右两个通道形成立体输出像对;\n[0108] 步骤4设置自适应立体渲染流水线控制接口。\n[0109] 本实施例的具体实施过程如图4所示。\n[0110] 基于人眼视觉模型的集成双通道立体渲染流水线的渲染流程如下:\n[0111] 设置人眼视觉模型参数:眼基距系数(EyeDistanceFactor)、视点汇聚距离系数(EyeCrossDistanceFactor)、是否启用视点汇聚(IsEyeCross)。\n[0112] 开始一帧场景绘制。\n[0113] 如图3所示,设置单目透视投影参数:视点参数,包括视点位置(EyePostion)、视点方向(LookAtDirection)、视点的正上方向(UpDirection);透视投影参数,包括近平面的位置(ZNear)、远平面的位置(ZFar)、视角(FieldOfView)、投影平面宽高比(aspect)。\n[0114] 按照以下的算法计算出左右通道的视点变换矩阵LeftEyeTransform,RightEyeTransform,透视投影变换矩阵ProjectTransform。\n[0115] 绘制一个三维对象:用LeftEyeTransform,ProjectTransform等变换,在左通道中渲染三维对象;用RightEyeTransform,ProjectTransform等变换,在由通道中渲染三维对象。左右通道中的绘制可以采用并行方式也可以采用串行方式。对场景中的所有三维对象依次采用本方法进行绘制。\n[0116] 结束一帧场景的绘制。\n[0117] 透视投影变换矩阵ProjectTransform的算法如下:\n[0118] 算法分两种情况实现,考虑是否支持左右视点的视线相交(IsEyeCross):\n[0119] A.当IsEyeCross为假时,算法执行如下步骤:\n[0120] a1.求视点偏移距离EyeDistance:\n[0121] EyeDistance=EyeDistanceFactor*ZNear/tan(FieldOfView/2)[0122] a2.求视点坐标系在世界坐标系中的方向单位向量U、V、W:\n[0123] U(ux,uy,uz),v(vx,vy,vz),w(wx,wy,wz)。其中U是x轴方法向量,V是y轴方向向量,W是z轴方向向量。\n[0124] 则U=LookAtDirection\n[0125] V=LookAtDirection×UpDirection\n[0126] W=U×V\n[0127] 单位化U、V、W\n[0128] U=U/|U|\n[0129] V=V/|V|\n[0130] W=W/|W|\n[0131] a3.求左视点位置LeftEyePostion:\n[0132] LeftEyePostion=EyePostion+U·EyeDistance\n[0133] a4.用LeftEyePostion和LookAtDirection,UpDirection构造左视点变换矩阵[0134] LeftEyeTransform。\n[0135] a5.求右视点位置RightEyePostion:\n[0136] RightEyePostion=EyePosition-U·EyeDistance\n[0137] a6.用RightEyePostion和LookAtDirection,UpDirection构造右视点变换矩阵[0138] RightEyeTransform。\n[0139] a7.LeftEyeTransform,RightEyeTransform即是所求矩阵,这两个矩阵均为4×4的矩阵。\n[0140] B.当IsEyeCross为真时,算法执行如下步骤:\n[0141] b2.求近平面宽度nearWidth:\n[0142] nearWidth=ZNear/tan(FieldOfView/2)\n[0143] b2.求视点偏移距离EyeDistance:\n[0144] EyeDistance=EyeDistanceFactor·nearWidth\n[0145] b3.求交点偏移距离EyeCrossDistance:\n[0146] EyeCrossDistance=EyeCrossDistanceFactor·nearWidth\n[0147] b4.求视点坐标系在世界坐标系中的方向单位向量U、V、W:\n[0148] U(ux,uy,uz),v(vx,vy,vz),w(wx,wy,wz)。其中U是x轴方法,V是y轴方向,W是z轴方向。\n[0149] 则U=LookAtDirection\n[0150] V=LookAtDirection×UpDirection\n[0151] W=U×V\n[0152] 单位化U、V、W\n[0153] U=U/|U|\n[0154] V=V/|V|\n[0155] W=W/|W|\n[0156] b5.求两视线相交位置EyeCrossPoint:\n[0157] EyeCrossPoint=EyePosition+V·EyeCrossDistance\n[0158] b6.求左视点位置LeftEyePostion:\n[0159] LeftEyePostion=EyePostion+U·EyeDistance\n[0160] b7.求左视点方向向量\n[0161] LeftEyeDirection=EyeCrossPoint-LeftEyePostion\n[0162] b8.用LeftEyePosition,LeftEyeDirection,UpDirection构造左视点下的变换矩阵\n[0163] LeftEyeTransform。\n[0164] b9.求右视点位置RightEyePostion:\n[0165] RightEyePostion=EyePostion-U·EyeDistance\n[0166] b10.求左视点方向向量\n[0167] RightEyeDirection=EyeCrossPoint-RightEyePostion\n[0168] b11.用RightEyePostion,RightEyeDirection,UpDirection构造右视点下的变换矩阵\n[0169] RightEyeTransform。\n[0170] LeftEyeTransform,RightEyeTransform即是所求矩阵,这两个矩阵均为4×4的矩阵。\n[0171] 对基于视觉机制的集成双通道立体渲染流水线模型的用户控制接口可以采用下列三种模式之一:\n[0172] (X)API模式:用以在编程层次控制视觉参数和状态控制参数:\n[0173] X1.开启自适应双目立体渲染流水线的函数,调用IsStereoOpen状态为真。\n[0174] X2.关闭自适应双目立体渲染流水线的函数,调用后IsStereoOpen为假。\n[0175] X3.获取自适应双目流水线的状态的函数,返回当前流水线是否立体打开的状态[0176] (IsStereoOpen)\n[0177] X4.设置人眼立体视觉参数的函数,可设置眼基距系数(EyeDistanceFactor)、视点汇聚距离\n[0178] 系数(EyeCrossDistanceFactor)、是否启用视点汇聚(IsEyeCross)。\n[0179] X5.获取人眼立体视觉参数的函数,可获取眼基距系数(EyeDistanceFactor)、视点汇聚距离\n[0180] 系数(EyeCrossDistanceFactor)、是否启用视点汇聚(IsEyeCross)。\n[0181] (Y)参数文件方式:在计算机存储设备的特定位置存储如下信息块:\n[0182] Y1.是否立体打开的状态(IsStereoOpen);\n[0183] Y2.人眼立体视觉参数:人眼镜基距系数(EyeDistanceFactor)、视点汇聚距离系数(EyeCrossDistanceFactor)、是否启用视点汇聚(IsEyeCross)。\n[0184] 用户程序启动流水线时,从特定位置读取上述信息,并保存到流水线中的相应变量中。\n[0185] (Z)用户界面方式:用户程序启动流水线时,提供输入界面(字符界面和图形界面),输入如下信息保存在保存到流水线中的相应变量中:\n[0186] Z1.是否立体打开的状态(IsStereoOpen);\n[0187] Z2.人眼立体视觉参数:人眼镜基距系数(EyeDistanceFactor)视点汇聚距离系数(EyeCrossDistanceFactor)、是否启用视点汇聚(IsEyeCross)。\n[0188] 下面是用软件方法,在C++语言环境下,实现自适应的双通道渲染立体渲染:\n[0189] (1)定义结构体类型:\n[0190] struct Matrix{double mm[4][4];};\n[0191] 表示一个矩阵。\n[0192] (2)定义一个结构体:\n[0193] struct Vector3d{double x,y,z};\n[0194] 表示一个三维空间的点和向量。\n[0195] (3)定义一个结构体\n[0196] \n[0197] 表示单视点的位置和方向信息。\n[0198] (4)定义结构体\n[0199] \n[0200] (5)定义结构体\n[0201] \n[0202] \n[0203] 表示透视投影参数\n[0204] (6)定义类和实现单视点流水线类\n[0205] \n[0206] 在这个类中实现单视点的绘制流水线。\n[0207] (7)定义和实现双视点立体流水线\n[0208] \n[0209] \n[0210] 这个类实现双通道自适应立体绘制:\n[0211] 1)调用setEyeModel,设置视觉模型\n[0212] 2)调 用 设 置 投 影 信 息,同 时 设 置 LeftPipeline和RightPipeline 的ProjectMatrix\n[0213] 3)调用beginScene开始一帧绘制\n[0214] 4)调用setCamera,将根据算法设置LeftPipeline和RightPipeline的流水线中的setViewMatrix。\n[0215] 5)调用drawGeometry绘制一个几何体\n[0216] 6)调用endScene结束一帧绘制。
法律信息
- 2019-03-29
专利权的转移
登记生效日: 2019.03.11
专利权人由南京师范大学变更为南京泛在地理信息产业研究院有限公司
地址由210097 江苏省南京市宁海路122号变更为210023 江苏省南京市栖霞区灵山北路18号4幢102
- 2012-10-24
- 2010-03-24
- 2010-01-27
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2008-09-17
|
2008-05-12
| | |
2
| |
2009-07-08
|
2009-02-06
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |