版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、立体视觉:基于OpenGL的立体图像对的软件实现方法 1、3D驱动原理与GL_STEREO 如果要让3D显示卡提供立体显示,则必须有两方面的技术:一是立体驱动,二是3D液晶快门。其中,立体驱动为显示驱动部份,能将Direct 3D(或OpenGL)相容的应用软件,由平面显示即时转化为立体显示,从表面上我们所看到的现象,就是普通显示变成了双影显示,这样双影显示就包含了左右眼各自的图象显示与显示器上;3D液晶快门则是一种高速的电子液晶快门,可根据显示立体驱动发出的信号同步调整开关,达到分离显示器上显示的左右眼图像,即时的送给左右眼睛,这样,我们所看到的显示器的双影显示就会变成立体显示。当然,这双影
2、图像必须有在一定的角度上的偏差,而角度通过预设值来调整。 通常,立体驱动将所产生的左右图像以交错格式、上下格式及换页格式三种方式储存在显示卡的内存中。交错格式是将左右图像各别抽取一半之后,再交错合成一张同样分辨率的影像。上下格式则将左右图像各别抽取一半压缩后,合成存入一张具有上下格式的图像。换页格式:则不作任何处理,将左右图像以原有的分辨率,分别独立存储在内存中。这三种格式以换页格式的图像质量最好。目前我们采用的是换页格式,也就是换页扫瞄模式,将左右图像交替扫瞄于显示器的屏幕,也就是先扫瞄左眼图像,再扫描右眼图像。如此不断地重复,因其扫描速度够快(如100Hz),加上人眼的视觉暂留现象,会让人
3、感觉是同时显示在屏幕上,此时,利用显示卡发生连续的同步信号给3D液晶快门眼镜,也就是说,当显示左眼图像时,3D液晶眼镜左镜片开通,右眼镜片关闭:当显示右眼图像时,3D液晶眼镜的右镜片开通,左眼镜片关闭,如此反复,左右眼就各自看到自己的图像,而在大脑中形成立体影像。 实时渲染三维数据,即把三维数据转换为屏幕上可显示的数据时,一般采用 OpenGL 或 DirectX 应用程序接口函数库。在 OpenGL 应用程序接口中,专门提供了渲染多视角的 Quad-Buffered Stereo(四方体立体缓存)函数,而专业的 OpenGL 显卡对 Quad-Buffered 提供硬件上的支持。例如 NVi
4、dia Quadro、ATI-Fire GL、3Dlabs Wildcat 工作站显卡。如果需要立体显示,可以在显卡的驱动的高级选项设置中启用Stereo 选项并根据相关硬件做适当调整或者交换左右眼等。 在OpenGL了中必须先使用GL_STEREO进行宏测试显卡是否支持stereo。2、Toe-in Method(correct) 使用这种方法时,相机是一个固定并且是产生对称的平截体,每个相机指向单一的焦距。使用Toe-in创建的图像是一个具有垂直视差的立体感,并且会产生不合适的水平增量。这种垂直视差增量会随着相机张角的增大而跳出偏移投影平面的中心。 Toe-in是一种不正确的方法,但它仍然
5、用得很多,因为它采用移动相机法并且非常容易的使用平行相机产生两个图像对。 Toe-in在OpenGL中采用gluPerspective()函数进行透视投影,左右相机位于不同位置但都是指向同一个焦点的。部分代码如下:glMatrixMode(GL_PROJECTION); / 设置投影模式glLoadIdentity();/ 设置透视投影,相机张角,投影纵横比,最近和最远处gluPerspective(camera.aperture,screenwidth/(double)screenheight,0.1,10000.0);if (stereo) CROSSPROD(camera.vd,came
6、ra.vu,right); Normalise(&right); / 获得单位矢量 / 计算相机偏移量(包括方向) right.x *= camera.eyesep / 2.0; right.y *= camera.eyesep / 2.0; right.z *= camera.eyesep / 2.0; glMatrixMode(GL_MODELVIEW); / 左右缓冲模式 glDrawBuffer(GL_BACK_RIGHT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); / 设置相机,右眼位
7、置为vp+right,指向焦点,方向vu gluLookAt(camera.vp.x + right.x, camera.vp.y + right.y, camera.vp.z + right.z, focus.x,focus.y,focus.z, camera.vu.x,camera.vu.y,camera.vu.z); MakeLighting(); MakeGeometry(); glMatrixMode(GL_MODELVIEW); glDrawBuffer(GL_BACK_LEFT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
8、); glLoadIdentity(); gluLookAt(camera.vp.x - right.x, camera.vp.y - right.y, camera.vp.z - right.z, focus.x,focus.y,focus.z, camera.vu.x,camera.vu.y,camera.vu.z); MakeLighting(); MakeGeometry(); else glMatrixMode(GL_MODELVIEW); glDrawBuffer(GL_BACK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
9、); glLoadIdentity(); gluLookAt(camera.vp.x, camera.vp.y, camera.vp.z, focus.x,focus.y,focus.z, camera.vu.x,camera.vu.y,camera.vu.z); MakeLighting(); MakeGeometry(); /* glFlush(); This isnt necessary for double buffers */ glutSwapBuffers();3、Offaxis frustums(correct method) Off-axis是一种正确的产生立体图像对的方法,它
10、不会产生垂直视差并且产生不紧迫的立体图像对。需要注意的是它的投影是必须产生一个非均匀的相机平截头体,OpenGL中支持这种投影方式。在这种情况下的视觉向量仍然是平行,并且使用glFrustum()函数去描述透视投影。如下图可计算非均匀平截头体的偏移量D:widthdiv2 = camera.near * tan(camera.aperture/2)D = 0.5 * camera.eyesep * camera.near / camera.fo透视投影的左右上下前后值为:top = widthdiv2;bottom = - widthdiv2;left = - aspectratio * wi
11、dthdiv2 0.5 * camera.eyesep * camera.near / camera.fo;right = aspectratio * widthdiv2 0.5 * camera.eyesep * camera.near / camera.fo;near = camera.neardistfar = camera.fardist相机的摆放如下:gluLookAt(camera.pos.x + right.x,camera.pos.y + right.y,camera.pos.z + right.z, / 眼睛的位置 camera.pos.x + right.x + camer
12、a.dir.x, / 相机指向,平行指向投影平面 camera.pos.y + right.y + camera.dir.y, camera.pos.z + right.z + camera.dir.z, camera.up.x,camera.up.y,camera.up.z); / 相机向上矢量详细代码如下:/* Misc stuff */ ratio = camera.screenwidth / (double)camera.screenheight; radians = DTOR * camera.aperture / 2; wd2 = near * tan(radians); ndfl
13、 = near / camera.focallength; if (stereo) /* Derive the two eye positions */ CROSSPROD(camera.vd,camera.vu,r); Normalise(&r); r.x *= camera.eyesep / 2.0; r.y *= camera.eyesep / 2.0; r.z *= camera.eyesep / 2.0; glMatrixMode(GL_PROJECTION); glLoadIdentity(); left = - ratio * wd2 - 0.5 * camera.eyesep
14、* ndfl; right = ratio * wd2 - 0.5 * camera.eyesep * ndfl; top = wd2; bottom = - wd2; glFrustum(left,right,bottom,top,near,far); glMatrixMode(GL_MODELVIEW); glDrawBuffer(GL_BACK_RIGHT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(camera.vp.x + r.x,camera.vp.y + r.y
15、,camera.vp.z + r.z, camera.vp.x + r.x + camera.vd.x, camera.vp.y + r.y + camera.vd.y, camera.vp.z + r.z + camera.vd.z, camera.vu.x,camera.vu.y,camera.vu.z); MakeLighting(); MakeGeometry(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); left = - ratio * wd2 + 0.5 * camera.eyesep * ndfl; right = ratio
16、 * wd2 + 0.5 * camera.eyesep * ndfl; top = wd2; bottom = - wd2; glFrustum(left,right,bottom,top,near,far); glMatrixMode(GL_MODELVIEW); glDrawBuffer(GL_BACK_LEFT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(camera.vp.x - r.x,camera.vp.y - r.y,camera.vp.z - r.z, ca
17、mera.vp.x - r.x + camera.vd.x, camera.vp.y - r.y + camera.vd.y, camera.vp.z - r.z + camera.vd.z, camera.vu.x,camera.vu.y,camera.vu.z); MakeLighting(); MakeGeometry(); else glMatrixMode(GL_PROJECTION); glLoadIdentity(); left = - ratio * wd2; right = ratio * wd2; top = wd2; bottom = - wd2; glFrustum(left,right,bottom,top,near,far); glMatrixMode(GL_MODELVIEW); glDrawBuffer(GL_BACK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(camera.vp.x,camera.vp.y,camera.vp.z, camera.vp.x + camera.vd.x, camera.v
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025福建福州市鼓楼区城投集团招聘2人笔试参考题库附带答案详解
- 2026中国科大地球和空间科学学院劳务派遣岗位招聘1人考试备考题库及答案解析
- 2026辽宁沈阳新华购书中心有限责任公司招聘图书管理员2人考试备考题库及答案解析
- 2026山东石油化工学院人才招聘80人考试备考题库及答案解析
- 2026年高考地理重要概念知识点考试及答案
- 2026南平市建阳区旅游发展有限公司招聘公务车驾驶员1人笔试备考题库及答案解析
- 2026四川成都兴城投资集团有限公司成都蓉城足球俱乐部有限公司招聘一线队队医等岗位7人笔试模拟试题及答案解析
- 2026年园林绿化工考试题及答案
- 2026广东韶关市始兴县澄江镇村(社区)党群服务中心专职人员招聘3人考试备考题库及答案解析
- 2026北京中关村发展集团股份有限公司中层管理人员岗位诚聘英才3人考试备考题库及答案解析
- 《老年人照料设施建筑装饰装修设计规程》上网征求意见稿
- 2026年及未来5年市场数据中国航空复合材料市场运行态势及行业发展前景预测报告
- 人教版七年级数学寒假作业(每日一练)
- 柴油机启动课件
- 动物医学毕业论文
- 论持久战课件
- (2025年)煤矿洗煤厂安全培训试题及答案(从业人员安全生产基础知识)
- 2025年全国高校辅导员素质能力大赛基础知识测试卷及答案
- 马工程政治学概论第二版教学课件导论(上)
- 2026年沈阳职业技术学院单招职业适应性测试必刷测试卷必考题
- 《机车运用与维护》第三章 铁路行车信号
评论
0/150
提交评论