一种基于WinXP系统的3D显示方法技术方案

技术编号:8537244 阅读:184 留言:0更新日期:2013-04-04 22:20
一种基于WinXP系统的3D显示方法,修改原有3D渲染流程,将渲染的视差图加工合并成立体图后,提交给显卡驱动程序,以产生3D显示效果。具体使用如下渲染步骤:创建两张width*height左右眼纹理;创建(2*width)*(height+1)立体纹理,往立体纹理里填充立体图片标识;设置左眼纹理为后备缓冲,并设置左眼投影矩阵渲染至左眼后备缓冲;设置右眼纹理为后备缓冲,并设置右眼投影矩阵;渲染至右眼后备缓冲;分别拷贝左右眼纹理至立体纹理的左上角及右上角;拷贝立体纹理至后备缓冲;提交后备缓冲。本发明专利技术能在已有3D程序基础上改进,无需大量修改代码即可实现立体显示的效果。

【技术实现步骤摘要】
—种基于Wi nXP系统的3D显不方法
本专利技术涉及3D显示领域,具体涉及。
技术介绍
在3D技术已经趋于成熟的今天,简单的平面3D显示已经越来越不能满足人们对3D显示的需求,由此立体显示技术如今进入了飞速发展阶段,让观看者有了身临其境的立体感。何谓立体感?立体感是由人眼的视差所引起的,由于人两只眼睛有4-6cm的距离,因此两眼在看同一景物所产生的影像是不同的,在反馈回大脑后经过视觉中枢的处理就会产生立体感。如今的3D电影的立体成像技术,也是靠两部摄像机拍摄成不同的影像来模拟人两只眼睛的。同样的,立体显示技术在游戏领域也得到了充分运用,在游戏中立体显示有多种解决方案,一般采用的是最直接的做法,即利用摄像机将场景渲染两遍后得到视差图,再配合立体设备从而达到3D游戏立体化的目的。 有鉴于此,本专利技术人针对现有技术的缺陷深入研究,并有本案产生。
技术实现思路
本专利技术要解决的技术问题在于提供。本专利技术采用以下技术方案解决上述技术问题,包括如下渲染步骤步骤1:创建两张width*height左右眼纹理;步骤2 :创建(2*width) * (height+1)立体纹理,往立体纹理里填充立体图片标识;步骤3 :设置左眼纹理为后备缓冲,并设置左眼投影矩阵;步骤4 :渲染至左眼后备缓冲;步骤5 :设置右眼纹理为后备缓冲,并设置右眼投影矩阵;步骤6 :渲染至右眼后备缓冲;步骤7 :分别拷贝左右眼纹理至立体纹理的左上角及右上角;步骤8 :拷贝立体纹理至后备缓冲;提交后备缓冲;渲染循环按上述步骤3至步骤8,生成3D图。本专利技术的优点在于能在已有3D程序基础上改进,无需大量修改代码即可实现立体显示的效果。附图说明下面参照附图结合实施例对本专利技术作进一步的描述。图1是本专利技术立体渲染管线图。图2是本专利技术视差投影示意图。图3是本专利技术立体图像合成示意图。图4是本专利技术流程不意图。具体实施方式NVIDIA的3D Vision立体显示解决方案是专门为游戏而量身定做的技术,本专利技术采用的也是这套方案。其配置需求需要如下一台120MHz的显示器或投影仪,G80及以上NVIDIA显卡,window Vista及以上系统,3D Vision套装(包括同步器及立体眼镜)。其工作原理如下应用程序提交两张左右眼的视差图给驱动程序后,驱动程序会在显示器上轮流显示左右眼图,比如在1,3,5吣帧显示左眼图,在2,4,6吣帧显示右眼图,在显示左图时,3D Vision同步器会通知立体眼镜关闭右眼显示,其会在右眼眼镜上放置挡板遮挡住右眼视线以实现单眼观看,同理显示右眼图时会遮挡住左眼,这样每只眼睛就只会看到属于自己这只眼睛的图片,这样接收到得视差图就会产生成出立体感。在传统的3D渲染系统里,利用摄像机模拟人的眼睛来观察整个3D场景,并在场景 渲染过程中,将所有场景里的物件透视投影至近裁面,最终显示在平面显示器上。是以我们两只眼睛在平面显示器上所看到的场景内容是完全一样的,并未对场景物件产生两眼的视差,所以虽然看到的是3D场景却无法对场景产生立体感。立体渲染则是在原单眼渲染的基础上,将视点在裁剪空间内沿着X轴方向左右平移一定距离后来模拟两只眼睛的距离,并分别在各自的近裁面上生成各自的图像,由于产生这两张图的观察位置不同,则场景内所有物件在两张图上所投影的位置也不同,这样两眼对场景内物件也就有了视差,也就形成了两张视差图,最后将视差图提交给驱动程序后就可以实现3D场景的立体显示了。立体显示主要分主动式(手动式)和被动式(自动式)两种,主动式即由应用程序向驱动程序提交两张视差图或立体图,被动式则是通过驱动程序自动完成3D场景的立体化效果。目前大多数游戏的做法都是被动式,立体渲染管线图如图1所示在单通道可编程渲染管线中,顶点通过VS (顶点着色器)进行一系列的空间变换,进入裁剪空间后进行光栅化,并在图片空间进行PS (片段着色器)计算。而在立体渲染管线中,则是通过修改VS的页脚,以实现将裁剪空间变换至立体空间,即左右眼的裁剪空间,并分别执行各自的光栅化以及PS计算,因此同时也需要两倍的RT (渲染纹理)并产生双倍的DP (绘制调用)。这里可通过NVAPI获取并设置立体显示的一些参数,如Sepration (两眼间距)以及Convergence (聚焦深度)。被动式立体显示虽然自动完成了立体化操作,但其自动化的操作同时也带来了许多问题,如天空盒需做特殊处理,UI也需特别指定深度,后处理及延迟渲染需要解决逆投影,3D物件拾取问题等等。因此本专利技术采用可控性强、代码修改量少的主动式立体化,即手动在代码里将场景渲染两遍以获取视差图。接下来推导下视差偏移量是如何计算出来的其中,Interaxial:两眼间距,Parallax :视差,Convergence :聚焦深度,Depth :顶点深度,Screen :聚焦屏幕宽度,Sepration :两眼间距比例。视差投影示意图如图2所示,利用三角形等比定律可得Parallax eye/Interaxial= (Depth - Convergence) /DepthParallax eye=Interaxial* (1- Convergence/Depth)将其转换至图片空间中,由于Interaxial/Screen与场景无关,定义其为Sepration ;Parallax image=Parallax eye/Screen=Interaxial/Screen*(1- Convergence/Depth)=Sepration*(1- Convergence/Depth)再将其转换至裁剪空间,这就需要进行透视除法的逆运算,并将其由{0,1}区间转换至{-1,1}区间,Parallax clip=Parallax image*Depth*2 =2*Sepration* (Depth-Convergence) 裁剪空间是由眼空间经过投影变换而成,而立体裁剪空间则是眼空间通过立体投影变换而成。以DirectX (以下简称DX)为例,使用左手坐标系的投影矩阵,将其改造成立体投影矩阵。ParalIax=Sepration氺Ζ—Sepration氺Convergence由线性代数的矩阵相乘法则可知 / pll、 (x,y,z,w) X= x*pH + y*pl2 + z*pl3 + w*pl4 V pl4 J''iOr f pll ’pl2x*pll + y*pl2 + z*(pl3+Sep) + w*(pl4-sSep*Con) = pi3 + SeprationV pl4 - Sepration*Convergence ^由此可得立体投影矩阵pll O O O Λr pllO O O ΛO ρ22 O O1-K Oρ22 O O ρ13 O ρ33 IZ pl3+side*SeprationO ρ33 IV ρ14 O ρ43 IJν. pl4-side*Sepration*Convergence O ρ43 I J其中左眼Side为-1,右眼Side为+1由于DX9(winXP)的先天限制,其并不支持立体缓冲,无法使用NVAPI的立体接口,在此利用NVIDIA的一个后门来实现立体渲染。在NVIDIA发布3D Vision的同时还推出了一款叫3本文档来自技高网...

【技术保护点】
一种基于WinXP系统的3D显示方法,其特征在于:使用如下渲染步骤:步骤1:创建两张width*height左右眼纹理;步骤2:创建(2*width)*(height+1)立体纹理,往立体纹理里填充立体图片标识;步骤3:设置左眼纹理为后备缓冲,并设置左眼投影矩阵;步骤4:渲染至左眼后备缓冲;步骤5:设置右眼纹理为后备缓冲,并设置右眼投影矩阵;步骤6:渲染至右眼后备缓冲;步骤7:分别拷贝左右眼纹理至立体纹理的左上角及右上角;步骤8:拷贝立体纹理至后备缓冲;提交后备缓冲;渲染循环按上述步骤3至步骤8,生成3D图。

【技术特征摘要】
1.一种基于WinXP系统的3D显示方法,其特征在于使用如下渲染步骤步骤1:创建两张width*height左右眼纹理;步骤2 :创建(2*width) * (height+1)立体纹理,往立体纹理里填充立体图片标识;步骤3 :设置左眼纹理为后备缓冲,并设置左眼投影...

【专利技术属性】
技术研发人员:林锋刘德建陈宏展杨健高强
申请(专利权)人:福建天晴数码有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1