CN103024414A - 一种基于WinXP系统的3D显示方法 - Google Patents
一种基于WinXP系统的3D显示方法 Download PDFInfo
- Publication number
- CN103024414A CN103024414A CN201210519960XA CN201210519960A CN103024414A CN 103024414 A CN103024414 A CN 103024414A CN 201210519960X A CN201210519960X A CN 201210519960XA CN 201210519960 A CN201210519960 A CN 201210519960A CN 103024414 A CN103024414 A CN 103024414A
- Authority
- CN
- China
- Prior art keywords
- texture
- eye
- backup buffer
- right eye
- stereo
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Processing Or Creating Images (AREA)
Abstract
一种基于WinXP系统的3D显示方法,修改原有3D渲染流程,将渲染的视差图加工合并成立体图后,提交给显卡驱动程序,以产生3D显示效果。具体使用如下渲染步骤:创建两张width*height左右眼纹理;创建(2*width)*(height+1)立体纹理,往立体纹理里填充立体图片标识;设置左眼纹理为后备缓冲,并设置左眼投影矩阵渲染至左眼后备缓冲;设置右眼纹理为后备缓冲,并设置右眼投影矩阵;渲染至右眼后备缓冲;分别拷贝左右眼纹理至立体纹理的左上角及右上角;拷贝立体纹理至后备缓冲;提交后备缓冲。本发明能在已有3D程序基础上改进,无需大量修改代码即可实现立体显示的效果。
Description
【技术领域】
本发明涉及3D显示领域,具体涉及一种基于WinXP系统的3D显示方法。
【背景技术】
在3D技术已经趋于成熟的今天,简单的平面3D显示已经越来越不能满足人们对3D显示的需求,由此立体显示技术如今进入了飞速发展阶段,让观看者有了身临其境的立体感。何谓立体感?立体感是由人眼的视差所引起的,由于人两只眼睛有4-6cm的距离,因此两眼在看同一景物所产生的影像是不同的,在反馈回大脑后经过视觉中枢的处理就会产生立体感。如今的3D电影的立体成像技术,也是靠两部摄像机拍摄成不同的影像来模拟人两只眼睛的。同样的,立体显示技术在游戏领域也得到了充分运用,在游戏中立体显示有多种解决方案,一般采用的是最直接的做法,即利用摄像机将场景渲染两遍后得到视差图,再配合立体设备从而达到3D游戏立体化的目的。
有鉴于此,本发明人针对现有技术的缺陷深入研究,并有本案产生。
【发明内容】
本发明要解决的技术问题在于提供一种基于WinXP系统的3D显示方法。
本发明采用以下技术方案解决上述技术问题:
一种基于WinXP系统的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)/Depth
Parallax 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)为例,使用左手坐标系的投影矩阵,将其改造成立体投影矩阵。
Parallax=Sepration*Z-Sepration*Convergence
由线性代数的矩阵相乘法则可知:
由此可得立体投影矩阵
其中左眼Side为-1,右眼Side为+1
由于DX9(winXP)的先天限制,其并不支持立体缓冲,无法使用NVAPI的立体接口,在此利用NVIDIA的一个后门来实现立体渲染。在NVIDIA发布3D Vision的同时还推出了一款叫3D Stereo Player的立体视频播放软件,由视频软件的原理可知,视频文件提供的并不可能有3D信息,更不会有VS的存在,其使用的是NVIDIA为3D视频播放而留下的一个后门,因此我们也可以加以利用,立体图像合成示意图如图3所示:
通过将两张视差图合并成一张大图,并加入立体标识,NVIDIA驱动程序搜索到图片的立体标识后,就会自动分割出视差图,并将其合并成立体图。因此就需要在每帧渲染时获取到左右眼图,并按如图3流程进行加工后,就能实现立体图的成像了,其流程图如图4所示:
一种基于WinXP系统的3D显示方法,使用如下渲染步骤:
步骤1:创建两张width*height左右眼纹理;
步骤2:创建(2*width)*(height+1)立体纹理,往立体纹理里填充立体图片标识;
步骤3:设置左眼纹理为后备缓冲,并设置左眼投影矩阵;
步骤4:渲染至左眼后备缓冲;
步骤5:设置右眼纹理为后备缓冲,并设置右眼投影矩阵;
步骤6:渲染至右眼后备缓冲;
步骤7:分别拷贝左右眼纹理至立体纹理的左上角及右上角;
步骤8:拷贝立体纹理至后备缓冲;提交后备缓冲;
渲染循环按上述步骤3至步骤8,生成3D图。
本发明DX9方案需要在显存中额外创建出2张width*height大小的视差纹理作为RT,及1张(width*2)*(height+1)大小的立体纹理,并在立体纹理的最后行像素填充立体标识,然后每帧时分别渲染场景两遍至左右眼RT,再将左眼纹理填充至立体纹理左上角,右眼纹理填充至右上角,最后将立体纹理拷贝至后备缓冲并提交。
需要说明的是:在修改投影矩阵时,其所有相关的联合矩阵都必须同时修改,还包括这些联合矩阵的逆矩阵、转置矩阵等。在后处理和延迟渲染里,纹理坐标是通过顶点坐标空间变换后插值而来的,PS里所得到的纹理坐标值就是已经修改过后的,因此在屏幕空间到立体空间的逆投影转换中,也必须加入立体参数的运算。虽然DX9不支持NVAPI,但依旧可以使用其的Active和Deactive接口来动态控制立体渲染模式的开关。Convergence参数决定场景的立体深度,如果场景较大而Convergence太小或者场景太小而Convergence太大,场景物件间就不会有明显的深度差,就会让人感觉所有场景都在一个深度上,因此需要根据场景大小而调节Convergence的值,比较适合的值是将其设置为场景最大深度的一半。由于投影矩阵不同,就有可能某些离近裁面较近的物件,由于引擎场景管理的裁切算法,产生一只眼睛能看而见另一只眼睛看不见的情况,这样这个物件就不会有产生视差,也会破坏整个场景的立体感,因此在渲染左右眼场景的时候,所使用的裁切矩阵必须是一致的。
DX9方案由于驱动的限制,一般只支持全屏模式的立体显示,要让其支持窗口模式有如下几种方法:与NVIDIA官方协商将项目加入驱动列表里的3D Vision应用列表;将项目应用改为3D Vision应用列表里的应用名,如googleearth.exe;通过NVAPI往驱动列表里注册项目应用。
以上所述仅为本发明的较佳实施用例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。
Claims (1)
1.一种基于WinXP系统的3D显示方法,其特征在于:使用如下渲染步骤:
步骤1:创建两张width*height左右眼纹理;
步骤2:创建(2*width)*(height+1)立体纹理,往立体纹理里填充立体图片标识;
步骤3:设置左眼纹理为后备缓冲,并设置左眼投影矩阵;
步骤4:渲染至左眼后备缓冲;
步骤5:设置右眼纹理为后备缓冲,并设置右眼投影矩阵;
步骤6:渲染至右眼后备缓冲;
步骤7:分别拷贝左右眼纹理至立体纹理的左上角及右上角;
步骤8:拷贝立体纹理至后备缓冲;提交后备缓冲;
渲染循环按上述步骤3至步骤8,生成3D图。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210519960XA CN103024414A (zh) | 2012-12-06 | 2012-12-06 | 一种基于WinXP系统的3D显示方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210519960XA CN103024414A (zh) | 2012-12-06 | 2012-12-06 | 一种基于WinXP系统的3D显示方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103024414A true CN103024414A (zh) | 2013-04-03 |
Family
ID=47972479
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210519960XA Pending CN103024414A (zh) | 2012-12-06 | 2012-12-06 | 一种基于WinXP系统的3D显示方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103024414A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106162142A (zh) * | 2016-06-15 | 2016-11-23 | 南京快脚兽软件科技有限公司 | 一种高效的vr场景绘画方法 |
CN106412562A (zh) * | 2015-07-31 | 2017-02-15 | 深圳创锐思科技有限公司 | 三维场景中显示立体内容的方法及其系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101199210A (zh) * | 2005-07-26 | 2008-06-11 | 夏普株式会社 | 图像处理装置 |
US20110210966A1 (en) * | 2009-11-19 | 2011-09-01 | Samsung Electronics Co., Ltd. | Apparatus and method for generating three dimensional content in electronic device |
CN102509336A (zh) * | 2011-10-24 | 2012-06-20 | 克拉玛依红有软件有限责任公司 | 一种gpu加速的实时立体渲染方法 |
-
2012
- 2012-12-06 CN CN201210519960XA patent/CN103024414A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101199210A (zh) * | 2005-07-26 | 2008-06-11 | 夏普株式会社 | 图像处理装置 |
US20110210966A1 (en) * | 2009-11-19 | 2011-09-01 | Samsung Electronics Co., Ltd. | Apparatus and method for generating three dimensional content in electronic device |
CN102509336A (zh) * | 2011-10-24 | 2012-06-20 | 克拉玛依红有软件有限责任公司 | 一种gpu加速的实时立体渲染方法 |
Non-Patent Citations (1)
Title |
---|
龚敏敏: "在程序中使用NV 3D Vision", 《HTTP://WWW.CNBLOGS.COM/GONGMINMIN/ARCHIVE/2010/11/21/1883392.HTML》, 21 November 2010 (2010-11-21) * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106412562A (zh) * | 2015-07-31 | 2017-02-15 | 深圳创锐思科技有限公司 | 三维场景中显示立体内容的方法及其系统 |
CN106412562B (zh) * | 2015-07-31 | 2019-10-25 | 深圳超多维科技有限公司 | 三维场景中显示立体内容的方法及其系统 |
CN106162142A (zh) * | 2016-06-15 | 2016-11-23 | 南京快脚兽软件科技有限公司 | 一种高效的vr场景绘画方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8471898B2 (en) | Medial axis decomposition of 2D objects to synthesize binocular depth | |
US9183669B2 (en) | Method and apparatus for virtual viewpoint synthesis in multi-viewpoint video | |
Schmidt et al. | Multiviewpoint autostereoscopic dispays from 4D-Vision GmbH | |
JP4489610B2 (ja) | 立体視可能な表示装置および方法 | |
KR102121389B1 (ko) | 무안경 3d 디스플레이 장치 및 그 제어 방법 | |
CN105224288B (zh) | 双目三维图形渲染方法及相关系统 | |
CN103426163A (zh) | 用于渲染受影响的像素的系统和方法 | |
JP2005151534A (ja) | 擬似立体画像作成装置及び擬似立体画像作成方法並びに擬似立体画像表示システム | |
AU2018249563B2 (en) | System, method and software for producing virtual three dimensional images that appear to project forward of or above an electronic display | |
CN102547348B (zh) | 一种裸眼立体显示调整方法、调整装置及相应设备、系统 | |
CN106412556B (zh) | 一种图像生成方法及装置 | |
US9196080B2 (en) | Medial axis decomposition of 2D objects to synthesize binocular depth | |
CN105007477A (zh) | 基于Unity3D引擎实现裸眼3D显示的方法 | |
US11417060B2 (en) | Stereoscopic rendering of virtual 3D objects | |
CN103745448A (zh) | 光栅3d显示中超高分辨率合成图像的快速生成方法 | |
US20130210520A1 (en) | Storage medium having stored therein game program, game apparatus, game system, and game image generation method | |
CN111047711A (zh) | 一种沉浸式可交互Box影像制作方法 | |
KR100764382B1 (ko) | 컴퓨터-생성 집적영상시스템에서의 이미지 매핑장치 및 그방법 | |
CN102521876A (zh) | 一种实现3d用户界面立体效果的方法及系统 | |
CN111327886B (zh) | 3d光场渲染方法及装置 | |
CN103024414A (zh) | 一种基于WinXP系统的3D显示方法 | |
US10110876B1 (en) | System and method for displaying images in 3-D stereo | |
KR101754976B1 (ko) | 적층형 홀로그램용 콘텐츠 변환방법 및 변환장치 | |
Miyashita et al. | Display-size dependent effects of 3D viewing on subjective impressions | |
CN103108204A (zh) | 一种基于Win7或Win Vista的3D显示方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130403 |