完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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投影线的参数方程为: 在投影平面上z=d,可得 将式(2)带入式(1)得点P在投影平面的坐标(xr,yr): 同理,点P和Leye的投影线在投影平面上的投影点坐标是: 可得水平视差: 由此可见,当zp>d时,0<E<e,此时为正视差;当zp<d时,E<0,此时为负视差;而当zp=d时,E=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存储顶点,数组 translatevertexr存储右眼投影计算后坐标,数组translatevertexl存储左眼投影计算后的坐标,对相应的点进行投影计算: 使用OpenGL的透视投影变换,需设置前后裁剪面到观察者的距离及前裁剪面的宽度和高度等。前裁剪面的宽度用该宽度与高度的比值表示,取显示窗口的宽度和高度之比。 double Near.Far;//前后裁剪面距观察者的距离 int rati/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生成立体图像对,并借助红绿滤光眼镜观察,得到了较好的立体视觉效果。立体显示威廉希尔官方网站 的引入增强了人在虚拟环境中的沉浸感,可广泛应用于建筑物和视景漫游、虚拟战争演练场和各种模拟训练等多种场合。 |
|
|
|
只有小组成员才能发言,加入小组>>
793 浏览 0 评论
1152 浏览 1 评论
2528 浏览 5 评论
2861 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2711 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1073浏览 3评论
195浏览 2评论
457浏览 2评论
370浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 03:27 , Processed in 1.109030 second(s), Total 48, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号