[计算机]虚拟现实显示技术原理概述
虚拟现实显示技术原理概述
一、 三维图形应用技术
1. 概述
1) 三维真实感显示技术
利用透视、消隐、材质、纹理、光照、阴影等技术模拟真实世界,生成有较强真实感的图像。
2) 三维立体显示技术
根据人眼感受客观物体的原理生成二幅具有微小视差的图像对,通过用立体显示设备观看,恢复在三维真实感显示中丢失的大部分深度信息,生成具有立体深度层次的场景,产生很强的沉浸感。
3) 计算机动画技术
虚拟现实中的显示技术通过综合以上三项技术,生成具有逼真效果和立体层次的虚拟环境,同时实时交互地改变场景。
2 三维图形真实感显示技术
2.1 图形真实感处理的基本困难
实际图像的复杂性。实际的物理世界存在许多的表面纹理、细微的色彩层次、阴影和反射,并且有一定的不规则性,它们形成了人们大脑中“真实形象”的图像。 2.2 真实感图形绘制的目标
在计算机图形设备上生成彩色照片那样的具有真实感的图形。
2.3 生成真实感图形的主要技术
1) 建模技术
用三维坐标构造物体表面的方法简称建模。通常用细小的平面(三角形、四边形)逼近物体表面,或者用一些关键点的坐标来精确地构造。
2) 投影技术
大多数实际的显示设备只能显示二维图像,因而必须将三维目标映射到二维坐标空间,
1
这一过程称为投影(Projection)。
两种基本类型:透视投影和平行投影。
平行投影的视景体为平行管道,这种投影通常用在建筑蓝图绘制和计算机辅助
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
方面。
平行投影
透视投影的视景体为棱台,这种投影符合人们习惯,即离视点近的物体大离视点远的物体小,远到极点即消失成为灭点,因此可增加真实感。
透视投影
3) 消隐技术
消隐决定了在一个三维观察空间里相对于观察者位置目标的哪些线段、棱边、表面是可见的,哪些是不可见的。
在虚拟现实中考虑到实时性问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
,通常采用最简单的Z缓冲器算法。Z缓冲器用来存贮每一可见像素相应的深度或Z坐标。
算法:
(1) 计算点(x,y)深度Z(x,y);
(2) 如果Z(x,y)位于Z缓冲器(x,y)像素的前面,则将Z(x,y)写入Z缓冲器(x,y)像素位置;将点(x,y)的像素属性写入帧缓冲器。
(3) 否则,即不更新帧缓冲器,也不更新Z缓冲器。
4) 明暗模型
2
在计算机图形学中,光滑的曲面表面常用多边形予以逼近和表示,明暗模型决定了每个小多边形轮廓(或内部)颜色的使用方式:
(1) 平面明暗处理
每个小多边形轮廓(或内部)用单一的颜色勾画(或填充);
(2) 光滑明暗处理
每个小多边形轮廓(或内部)用许多不同的颜色处理。
5) 光照模型
根据光学物理的有关定律,计算画面上景物表面各点投射到观察者眼中的光线亮度及色彩公式。
光照射到物体表面产生反射光和透射光,进入人眼产生视觉效果。简单的光照模型只考虑被照明物体表面的反射光影响,包括三个分量:
环境反射光(环境光):ambient light,从环境中所有方向均匀入射物体表面,并向各方向等量反射出去。类似于无影灯光。
漫反射光(漫射光):diffuse light,来自某一方向的特定光源,在各个方向上均匀发散出去。垂直于物体时比倾斜时更明亮;视点无论在何处都一样亮。
镜面反射光(镜面光):specular light,来自特定方向,并沿另一方向反射出去。任何一个有光泽的表面上都有镜面反射现象,如金属表面的高光现象。
另:
辐射光:emitted,直接从物体发出,不受任何光源影响。
漫反射 漫反射 漫反射 漫反射 强镜面光 弱镜面光 辐射光
与上对应
多环境光
多有颜色
的环境光
使用方法:
3
1)要使光照有效,首先需启用光照;并且使所定义的每一个光源有效。 2)光照条件一般对多边形正面设置(对应球的外部),需要时可启用双面光照(即在背面多定义了一个法向量)。
3)每个光源都能对一个场景提供环境光(ambient),此外还有一个全局环境光,它不来自任何特定的光源,称全局环境光(没有类似于light1的参数,计算量大,使用受限)。 4)通常,在一个有光泽的表面上,光线最强的部分由镜面反射引起,其余部分反射出来的光由漫反射引起。
6) 纹理映射
在三维图形中,纹理映射的方法运用得很广,尤其对于描述具有真实感的物体。纹理生成模式分为两类:
(1) 颜色纹理
在光滑表面上额外地增加特定的图案且仍保持光滑性不变。花纹图案的来源有两种:来自一幅数字平面图象;由数学函数定义,调节特定的参数可以控制和修改形成的纹理图案。 (2) 几何纹理
用于构造凹凸不平的表面纹理。
产生方法:在表面每一点上沿其表面法向附加一个比较小的矢量,也就是对表面该点处法向产生扰动,从而改变该点在绘制时的明暗度。
3(三维立体显示技术
3.1 立体视觉
人用单、双眼看景物时都具有立体感,但单眼时的辨别精度比双眼时低。
单眼立体视觉:有很强的心理和经验因素。
双眼立体视觉:与人眼生理因素有关。
VR系统中的立体显示主要依据双眼立体因素 —— 双眼视差。
双眼视差
用双眼观看同一物体时,左右两眼视线方位不同,物体在左右两眼视网膜上所成的像就有差异,这种差异称为双眼视差。视差通过视觉皮层融合,产生立体感。视差与视距的平方成反比,当视距超过50米以后,立体感消失。
3.2 立体图
VR系统中的立体图与一般图形系统中的三维图形不一样,主要区别:
立体图:
(1) 以左右眼作为视点,分别计算它们的透视投影视图,然后把这两幅图分别送到左、右眼。
4
(2) 若要使人们对人工合成的图形或图像产生立体感,必须借助于立体显示设备。通常在每只眼睛前放一具彼此独立的显示器,而显示的图像是由对应着该点的视点坐标分别计算出来的,当左右眼显示器接收到图像后,通过大脑把各自分别观察到的两幅图像叠加并融合在一起,便产生一幅具有深度感的三维立体图像。
通常的三维图形:
(1) 透视投影只考虑了单个视点,左、右眼视线交于屏幕的同一点。
(2) 它的视觉立体感效果是通过透视、消隐、阴影等的处理而获得,因此所产生的立体感效果不强,而且立体感部分地依赖于人类的经验和想象。
3.3 立体图像的生成算法
视觉系统中三维立体图像的生成,通常采用三种算法。
1) 合成立体图像
熟知的,如立体电影、立体眼镜、偏振镜等。采用立体电影合成立体图的原理,是利用二台彩色摄像机同步摄像得到二幅图像,借助于立体眼镜将二幅图像融合成一幅图像,便获得具有深度感的立体图像。
2) 基于投影变换原理的左右眼视图生成方法
同计算机图形学中的三维图形处理的方法类似,对虚拟环境中的物体进行建模(生成线框图)和渲染(在线框图上加上颜色、纹理、阴影以及其它物理特性)生成一幅逼真图形。区别仅在于从单视点投影变为双视点投影,对生成的三维立体图形分别计算左、右眼视图。 3) 基于相关性的立体图像生成算法
一种根据左眼的光线跟踪图推导出右眼视图的方法(Ezell和Hodges,1990年;Adelson和Hodges,1993年),使用重投影方法产生可见面光线跟踪场景,即把第一个视图中的像素移到第二个视图中的相应位置。
3.4 立体显示的实现方式
在显示端显示出两幅或多幅具有双眼视差的平面图像,并使左、右两眼分别看到平面视差图像对中的对应图像,再利用人眼的融合作用将两幅平面视差图像在大脑感觉空间中融合而形成立体图像。
3.5 发展方向 —— 裸眼3D显示技术
(1) 电子全息术:
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
和重现光波,从而产生3D效果。如视频会议领域的“全息网真”技术。
(2) 方向多路显示:应用光学现象把不同视觉的图像分别引导到人的两只眼睛。
(3) 体块显示:体三维成像扫描,真正的三维立体效果。由三维空间的体像素构成立体图像。
5
4 计算机动画技术
动画技术是实现虚拟现实不可缺少的手段,真实感图形技术为我们绘制出逼真的画面,立体显示技术进一步为我们恢复了深度信息,但尽管有了这些强有力的手段,要想使观察者可以随意观看物体结构,产生临场参与感,则必须要使用计算机动画这种技术。一般来说,计算机生成动画有三种方法:块图形动画(BITBLT动画)、帧动画(Frame Animation)和实时动画。
4.1 块图形动画
块图形动画只操作屏幕上很小一部分图像进行动画,所以可以达到非常高的速度,很容易超过显示屏的刷新速度。
4.2 帧动画
首先形成一系列整屏的图像,并把每一幅存贮在一个独立的图形页中,在所有图形页都形成后,以某种特定的顺序依次显示出来,由此产生动画。
这种动画可生成非常生动效果,在动画过程中,图形数据不需要移动或改变,取而代之的仅仅是硬件上的调整:选择不同的图形页做显示页。因此速度也很快,可以得到平滑的动效果,但内存开销很大。
4.3 实时动画
是真正的交互式动画。实时动画一般使用两个图形页,其中一个做显示页,另一个做作图页,用户只能看到显示页的图像,在作图页完成一幅图像后,把该页切换成显示页,把原来显示页变成作图页,这样不断切换循环下去。
实时动画的速度取决于图像内容的复杂程度,对于一个很复杂的物体,其动画速度会慢一些,但实时动画具有良好的交互性。
二、三维虚拟环境的建模 1 三维物体的视图过程
1.1 从三维空间到二维空间
三维目标视图过程的复杂性有两个主要原因:
1)空间维数的增加使得目标物体的视图效果与观察者的位置和方向相关; 2)实际的显示设备只能显示二维图像,因而必须将三维目标映射到二维坐标空间。
由于包括有多种不同类型的3D空间,因而要在屏幕上显示某个点时必须进行相应的空间坐标变换,变换顺序通常为:
6
屏幕 图像平面 对象 世界 视点 坐标系 坐标系 坐标系 坐标系 坐标系 (窗口) (视口)
空间坐标变换顺序
1.2 三维空间坐标系及三维图形显示
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
在具体进行三维图形编程时,必须了解上述三维图形世界中的几种坐标系的概念,以及用这些概念表达的三维图形显示流程。
计算机本身只能处理数据, 坐标建立了图形和数据之间的联系。
1)对象坐标系
也称物体坐标系、局部坐标系。 在上述各坐标系中,对象坐标系所在的对象空间是整个坐标变换的基础,对象坐标系遵循右手法则。
在对象空间中,首先定义3D图元(即简单的三维实体)的基本尺寸,然后通过控制3D图元的位置、旋转角度、比例等属性进行模型变换,构建一个完整的图形目标。然后将完整的图形目标重新定义在一个新的世界坐标系里,形成在世界坐标系下更加复杂整的图形目标。 2)世界坐标系
世界坐标系也遵循右手法则。其长度单位要适合对被显示物体的描述,因此是一个计算单位任意(可以是米、公里、光年等)的公共坐标系。
Yw
Ow
Zw
Xw
世界坐标系
3)视点坐标系
视点坐标系遵循左手法则。视点坐标系用于定义视景体(Viewing Volume)、视点变换,
及视景体对目标的一系列操作。 Ye
视点坐标系 三维视景体作用(对目标的操作):进行目标裁剪和投影变换。
目标裁剪的目的: Ze
Oe 只显示视景体内的物体,视景体外多余的部分裁剪掉。
投影变换的目的:三维图形变换为二维图形。
Xe
7
4)图像平面坐标系
图像平面坐标系是由在世界坐标系里选择的一个包含有视图目标的矩形子区域定义的,这个矩形子区域称窗口。三维图形经过投影变换后就转换到这个二维的窗口内。
视点
(投影中心) 5) 屏幕坐标系
计算机对数据化的显示物体作了加工处理后要在显示设备上显示,这就要求在显示器屏幕上定义一个二维直角坐标系,这个坐标系称为屏幕坐标系。
屏幕坐标系坐标轴的方向通常取成平行于屏幕的边缘,坐标原点取在左下角,长度单位为一个像素的长度。(多种)
在屏幕坐标系内定义一个矩形,称为视口(Viewport),视景体投影到窗口内的图形(图像平面坐标系中)经过一个线性变化映射到视口中(视口变换)在视口内显示,这就是最终人们看到的图像。
三维图形的显示流程如图所示:
世界坐标系中 图像平面坐标系 三维 对象坐标系中 视景体的
三维裁剪及投影 图形显示 的三维物体 几何变换 的三维物体
视口 变换
屏幕上最终
看到的图像 三维图形显示流程
2(Open GL变换
早期从事三维图形开发的技术人员都不得不在自己的程序中编写大量的矩阵变换函数,为调试这些与自己的软件开发目标关系并不十分密切的函数费脑筋,而Open GL通过一系列函数提供一种直观的编程环境,大大简化了三维图形程序。
8
2.1 几何变换——与三维建模有关
通常几何变换有三个:平移、旋转、缩放。每种变换通过一个相应的矩阵与当前矩阵相乘实现。
几何变换有两种形式:
1)将某个目标对象的点集变换为另一个目标对象的点集,但这两个点集都是在同一个坐标系里定义的。在这种变换形式里,坐标系没有改变,目标对象相对坐标原点发生了相应变换。
对应于:对象坐标系中的模型建模。
2)另一种等效形式是将目标对象的变换看作为坐标系的变换,当目标对象是由许多子目标组合形成时,这个观点是十分有意义的。因为在这种情形下,每个子目标通常都是在各自的局部坐标系里定义的,而最终我们希望用一个公共坐标系来表示这个完整的目标对象。
对应于:将各自的对象坐标系中搭建的完整模型集成到世界坐标系中。 2.2 投影变换---与视景体定义有关
为了使被显示的物体能以合适的位置、大小和方向显示出来,必须要通过投影。投影的两种方法。
1) 正射投影(Orthographic Projection)
又称平行投影,其视景体是一个长方体,无论物体距离视点多远,投影后物体大小尺寸总是不变,常用于建筑篮图绘制和计算机辅助设计等方面。
创建平行视景体的函数对应一个正射投影矩阵,在视点坐标系中定义(视点坐标系下的参数值),由7个参数定义:视景体六个平面的位置坐标(与坐标轴的截距)及从眼睛(视点)至远剪切平面的距离。
2) 透视投影(Perspective Projection)
透视投影符合人们心理习惯,视景体为一棱台,这种投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面。
9
创建透视视景体的函数对应一个透视投影矩阵,在视点坐标系中定义。
定义方式1:近剪取平面的上下左右坐标,及远、近剪取平面距视点的距离。
定义方式2:视野在水平面的张角(视角)、投影平面宽度与高度的比值以及远、近剪取平面距视点的距离。
视点的默认状态
Y
右上
Zw O Oe
左下 世界坐标系 X
视点坐标系
例:void glFrustum(GL double left,GL double right,GL double bottom,GL double top,GL double near,GL double far)
视景体在视点坐标系中的坐标值:
近剪取平面的左下角坐标:(left,bottom,near)[对应世界坐标系中的值(left,bottom,- near)]
近剪取平面的右上角坐标:(right,top,near)[对应世界坐标系中的值(right,top,- near)]
2.3 剪取变换
在Open GL中,除了视景体剪取外,还有附加平面剪取,用户可以自己定义一个或多个附加剪取平面,以去掉场景中无关的目标。
2.4 视口变换——-对应目标在屏幕上的显示方式
在计算机图形学中,视口变换是指将经过几何变换、投影变换和剪取变换后的物体(即图像平面坐标系中的物体 )显示于屏幕上的视口内的过程。相关函数参数:
视口在屏幕坐标系中的左下角x,y坐标、视口的宽度及高度。
10
视口函数将窗口内的图像变为最终的视口中的图像,也就是说它将物体的坐标从图象平面坐标系转换到了屏幕坐标系。在实际应用中视口的长宽比率总是等于视景体剪取平面的长宽比率,以避免投影后的图像显示于视口内时发生变形。
三、OSG
教程
人力资源管理pdf成真迷上我教程下载西门子数控教程protel99se入门教程fi6130z安装使用教程
中的概念对照 1(StepIntoOpenSceneGraph_Freesouth
,P52:2.2.2 osgViewer对于视口的控制,
1)如果把石头从A移到B:可以移动石头,也可以移动视口。因此OSG中有移动视口与(视景体)移动物体两大类型的操作,同样旋转与缩放也是一样的。
移动后
的视口
3)关于视口的基本知识:
对于一个观察系统必须含有以下几个要素:
1:一个观察点的坐标,这是必须的,必须得清楚你在什么位置进行观察。(视点)
2:一个关于观察点的坐标系,这是定位当前空间内所有物体的坐标系,是必须的。(视点坐标系、视景体)
3:一个观察平面,如果说你从显示器上看一栋楼时,严格的说你仅仅只看到显示器这样一个平面,也就是说有一个观察平面,场景的二维图像贴到该平面上。(图像平面坐标系)
4:观察的范围的平截体,举个例子说如果你闭上眼晴就什么也看不到了,这就是观察范围的定义。 (剪取平面)
这四个要素不可缺少,下面将以图示来说明这四个要素分别在现实中代表什么: 如下图所示:
11
图2.8
图中C表示观察点(视点),灰色平面称为观察平面(图像平面或视景体的远平面),而C与观察平面间的部分称为视见体(简化的视景体),这是现实生活中最小的视见体。 其中基于平行与观察平面的坐标系称为观察坐标系(视点坐标系)。
拿人本身来讲,看物体时可以仰头看,这说明当前视口(视点)绕当前观察坐标系平行于视平面的X轴进行旋转(Y向上的右手坐标系/Open GL 的坐标系。),同样你也可以扭头看,这是视口绕当前观察坐标系平行于视平面的Y轴进行旋转,当然你也可以转歪着脖子看,这就是绕垂直于视平面的Z轴进行旋转,这些轴的定位不能说与平行于地平线垂直于天空的坐标系毫无关系(视点坐标系与世界坐标系是有关系的)。
yv Yw
o xv
zv
y t
O Xw z xtt
Zw
观察坐标系与世界坐标系存在一个矩阵的关系,也就是存在一个矩阵与之相乘可以使观察坐标转换为世界坐标。这个矩阵可以想象得到,与仰角、方位角以及视点有关,关于此可以查阅相关资料。(通常,视点坐标系中的变换对编程者是透明的,可将视景体也看作是一个三维模型,在世界坐标系中对视点进行位置角度变换,来模仿人眼的实际行为。)
下面来介绍两种最常见视见体几何模型: 透视投影 平行投影。
12
观察体的意义,需要根据观察场景进行裁切,透视变换,顶点混合等等处理,观察体的数学意义非常重大,因为漫游系统所见的东西为了保证效率都是经过根据观察体进行处理过的东西。下面来介绍世界坐标系与局部坐标系的转化:
局部坐标系:一个物体,给人的第一感觉是它基于Y轴对称,其实这时指的是它的局部坐标系,为了建模的方便性,我们以参照物为原点是有现实意义的,但是更多的操作则是在世界坐标系中。
世界坐标系,每个物体都有自己的局部坐标系,就像刚才说的眼晴一样。众多物体所在的全局坐标系称为世界坐标系,大多数的计算是基于世界坐标系的。
/////////////////////////////////////// 坐标系:
使用Y轴向上的右手坐标系(opengl的坐标系)的命令:
Producer和osg::Matrix(OSG 开源教程)
使用Z轴向上的右手坐标系的命令:
osgGA::MatrixManipulator矩阵(osgProducer::Viewer中使用)
osg::MatrixTransform(内部可以使用osg::Matrix)
osg::PositionAttitudeTransform (Z朝上 )
确定:开发系统使用Z轴向上的右手坐标系,即世界坐标系与物体坐标系均采用Z轴向上的右手坐标系。
视景体可看作一特殊的模型,同其他模型一样在世界坐标系中进行平移旋转。
13
osg::MatrixTransform:在OSG中坐标轴是可以设置的,默认X轴是X轴,向里的是Y轴,而向上是Z轴(OSG 程序设计)
Transform 类是一个无法由应用程序实例化的虚基类。用户应当使用osg::MatrixTransform
或osg::PositionAttitudeTransform 来替代它,这两者均继承自Transform。它们提供了不同的变换接口。根据用户程序的需要,可以使用其中任意一个或者同时使用这两者。
……
Transform 节点允许用户指定参考系。缺省情况下,参考系是相对的
(osg::Transform::RELATIVE_RF),可以创建连续级联的变换。而OSG 也允许用户指定绝对参考系。
osg::ref_ptr
mt = new osg::MatrixTransform;
mt->setReferenceFrame( osg::Transform::ABSOLUTE_RF );
(OpenSceneGraph快速入门指导)
总结:(StepIntoOpenSceneGraph_Freesouth)
很多时候复杂的移动操作要涉及几个类,一般有以下几个:
Osg::Matrix*:*表示如osg::Matrixd,osg::Matrixf等 一般负责生成矩阵或是向量,从而应用到变换当中去
Osg::PositionAttitudeTransform 用于确定位置,设置局部坐标系
osg::AnimationPath 用于生成路径以及回调
Osg::MatrixTransform 用于各种变换,用处最广
四、色彩融合
融合就是指两种颜色各分量依据一定的比例混在一起合二为一,这种比例来源来于Alpha值,即RGBA中的A或(r,g,b,a)中的a值,通常称a为不透明性,称(1,a)为透明性。
在融合操作中,实际上包含了两个因子的操作,这两个因子为源因子(Source Factor)和
14
目的因子( Destination Factor)。设源因子和目的因子分别为(Sr,Sg,Sb,Sa)和(Dr,Dg,Db,Da),两种颜色分别为(Rs,Gs,Bs,As)和(Rd,Gd,Bd,Ad),则融合的最终结果是:
(Rs*Sr+Rd*Dr,Gs*Sg+Gd*Dg,Bs*Sb+Bd*Db,As*Sa+Ad*Da) 其中每个元素值都缩限到[0,1]之间。
15