虚拟现实中立体显示技术研究与实现

2011-12-16 20:45:38来源: 互联网 关键字:虚拟  虚拟现实  现实  实中  中立

1 引言

  虚拟现实(Virtual Reality)是一种新兴的、极有应用前景的计算机综合性技术。采用以计算机技术为核心的现代高科技生成逼真的视觉、听觉、触觉一体化的特定范围的虚拟环境。立体显示是虚拟现实的关键技术之一,它使人在虚拟世界里具有更强的沉浸感,立体显示的引入可以使各种模拟器的仿真更加逼真。研究立体成像技术并利用现有的微机平台,结合相应的软硬件系统在平面显示器上显示立体视景。

2 立体视觉概述

  据研究,人的大脑能从以下4个方面获得深度(距离)线索:静态图像中的深度线索、由运动造成的深度线索、生理上的深度线索以及双目视差线索,这里仅研究双目视差线索。当用双眼看同一景物时,由于左、右眼在空间所处位置不同,两只眼晴的视角会有所不同,看到的图像也不一样,会有视差,如图1a所示。具有视差的双眼图像经大脑融合,可产生含有立体深度信息的立体图像。一般将双目所见的一对具有视差的二维图像称为立体图像对。若模仿产生这一对平面图像,并采取技术措施,使左眼只能看见右边的图像,而右眼只能看见左边的图像,则人类的视觉系统就会融合该二维空间中一对稍有差别的图像,从而生成具有立体感受的图像。根据投影面、人眼以及观察对象之间的相对位置,可有正视差(图1b)、负视差(图1c)和零视差(图1d)之分。

 

3 双中心投影算法

  由以上研究可知,立体图像对的产生是由于左、右眼观察到的物体透视结果不同。因此在立体显示的视景仿真中设置两只虚拟的眼睛,一个获取左眼的图像,另一个获取右眼的图像,分别将左右眼的图像传送给相应的眼睛。因此。在立体显示中,需要采用包含两个视点的透视投影方法一双中心投影算法。图2为双中心投影。

  左视点Leye和右视点Reye均位于X轴上,两视点间的距离为e,两视点连线中心为坐标原点,则左视点的坐标为(-e/2,0,0),右视点的坐标为(+e/2,0,0)。投影平面平行于XY平面,到左右视点的距离均为d。三维空间中一点P(xp,yp,zp)在左视点投影中的坐标为(xl,yl,zl),在右视点投影中的坐标为(xr,yr,zr),则zl=zr=d。点P(xp,yp,zp)和Reye投影线的参数方程为:

  由此可见,当zp>d时,0

4 OpenGL实现立体显示

  开放性图形库OpenGL(Open Graphic Library)是一个三维计算机图形和模型库。它独立于操作系统和硬件环境,适用于从个人计算机到工作站的广泛计算机环境。

  OpenGL在三维真实感图形制作中具有优秀的性能,用该图形库不仅能方便地制作出高质量的静止彩色图像,还能创造出高质量的动画效果。借助Windows编程环境还可控制模型的人机交互。由于其开放性和高度的可重用性,目前已成为业界标准。

  4.1 立体图像对的绘制

  按上述投影算法计算出立体图像对后,应用OpenGL绘制立体图像对,分别用红、绿两种颜色绘制右眼和左眼的图像。以一个变长为10 cm,中心点在原点的正方体为例,设两视点间距离e为5 cm,投影面距高观察者d为40 cm,考察正方体的一个顶点(5,5,5),由上述投影算法可得:xr=32 cm,xl=48 cm,yl=yr=4040 cm,zr=zl=d=40 cm对8个顶点分别计算后,连接相应的立体透视投影点,即可得该立方体的立体图像对。用数组vertex[8][3]存储顶点,数组translatevertexr[8][3]存储右眼投影计算后坐标,数组translatevertexl[8][3]存储左眼投影计算后的坐标,对相应的点进行投影计算:

   


  使用OpenGL的透视投影变换,需设置前后裁剪面到观察者的距离及前裁剪面的宽度和高度等。前裁剪面的宽度用该宽度与高度的比值表示,取显示窗口的宽度和高度之比。

  double Near.Far;//前后裁剪面距观察者的距离

  int ratio=width/height;//显示屏的宽和高之比

  ViewHeight2=Near*tan(radians);//计算视野的高度

  ViewWidth2=ViewHeight2*ratio;//计算视野的宽度

  计算右眼的视野范围;

  left=-ViewWidth2-0.5*e*0.3;

  right=ViewWidth2-0.5*e*0.3;

  投影并绘制模型:

  glFrustum(left,right,bottom,top,Near,Far);

  glDrawBuffer(GL_BACK_RIGHT);//使用右后缓存

  gluLookAt(0+e/2。0,5。0+d/2,0,-5,0,1,0);

  //确定右眼位置

  glColor3f(1.0,0.0,0.0);//用红色绘制

  draw();//计算立体图像对并绘制

  同理绘制左眼的图像,如图3所示。

  4.2 双缓存区的使用

  OpenGL提供双缓存技术,支持两个完整颜色缓存的硬件或软件。绘制一个缓存时,显示另一个缓存中的内容。每绘制好一帧便交换缓存;这样刚才被显示的缓存被用来绘制,而用来绘制的缓存被显示。这样,当显示器刷新时,缓存区进行交换,画面就不会闪烁。

  OpenGL也支持立体观察,实现左颜色缓存和右颜色缓存,它们分别用于左立体图像和右立体图像。可在初始化时,分别使用参数PFD_DOUBLEBUFFER和PFD_STERE-O_DONTCARE支持立体显示和双缓存。使用双缓存时,通常只绘制后缓存,使用函数glDrawBuffer()还可指定将立体图像渲染到具体的某个缓存。

  例如,绘制右眼图像时使用右后缓存区glDrawBuffer(GL_BACK_RIGHT),绘制左眼时使用左后缓冲区glDraw-Buffer(GL_BACK_LEFT)。

  4.3 立体图像的观察

  使用简单的滤光镜就可观察有立体感的图像。其原理是:由于滤光片(实验中使用红、绿滤光片)吸收其他光线,只让相同颜色的光线通过,因此左、右眼各透过不同颜色的光。当使用滤光镜观察计算机屏幕上的立体图像对时,就会看到具有深度感受的图像。在实验中发现,刷新频率对图像立体效果的形成具有重要作用。刷新频率过低,由于人眼所维持的图像已消失,不能得到三维立体感受;刷新频率过高就会出现一只眼睛可看到两幅图像的现象。将显示的刷新频率设置合适,在程序中设置图像刷新频率设置为50 Hz,利用红绿滤光镜观察模型的立体成像,得到较明显的立体视觉效果。

5 结论

  根据立体显示原理,采用双目视差算法对物体进行立体显示,利用OpenGL生成立体图像对,并借助红绿滤光眼镜观察,得到了较好的立体视觉效果。立体显示技术的引入增强了人在虚拟环境中的沉浸感,可广泛应用于建筑物和视景漫游、虚拟战争演练场和各种模拟训练等多种场合。

关键字:虚拟  虚拟现实  现实  实中  中立

编辑:鲁迪 引用地址:http://www.eeworld.com.cn/afdz/2011/1216/article_4264.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:欧拟斥资数亿美元惊人研制 超级电脑可预测未来
下一篇:IBM预测未来5年创新技术:人体发电上榜

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
虚拟
虚拟现实
现实
实中
中立

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 视频监控 智能卡 防盗报警 智能管理 处理器 传感器 其他技术 综合资讯 安防论坛

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved