Presentation is loading. Please wait.

Presentation is loading. Please wait.

《虚拟现实及其应用》 第三讲 蔡则苏 2008-03-27.

Similar presentations


Presentation on theme: "《虚拟现实及其应用》 第三讲 蔡则苏 2008-03-27."— Presentation transcript:

1 《虚拟现实及其应用》 第三讲 蔡则苏

2 第三章 虚拟现实的图形学基础 3.1 引言 计算机图形学技术是实现虚拟现实系统的重要理论基础之一
第三章 虚拟现实的图形学基础 3.1 引言 计算机图形学技术是实现虚拟现实系统的重要理论基础之一 SPI-仿真(Simulation)、呈现(Presentation)、 交互(Interaction)是虚拟现实系统的重要概念 真实感图形的生成需要:场景造型、取景变换、视域裁剪、消除隐藏面、可见光度计算等 介绍虚拟环境中视点的不同定位方法 立体透视投影法 色彩理论 三维建模方法、光照模型、阴影算法、三维消隐等

3

4 3.2 虚拟环境中视点的定位 在虚拟环境中的虚拟观察者有着特殊位置,并沿着某条视线来观察。由于虚拟观察者有两只眼睛,较为理想的情况是两眼分别接受环境中两幅不同的视景图像,从而生成三维立体图像。这就需要用计算机重新计算相对于虚拟观察者参考坐标系的虚拟环境的几何坐标。而这又依赖于在虚拟环境中定义虚拟观察者参考坐标系的方法。这些方法包括方向余弦法,XYZ方向的方位角法,XYZ欧拉角法和四元法。

5 3.2 虚拟环境中视点的定位 3.2.1 方向余弦定位法 一个单位三维向量在三个坐标轴上的分量等于该向量与三个坐标轴之间夹角的余弦。夹角的余弦被称为方向余弦,可以通过向量与三个坐标轴单位向量的点积来计算,如图3.2所示。

6 使用方向余弦法可以使某一参考坐标系中的某一点坐标P(x,y,z)转换成另一参考坐标系中的P(x’,y,z’)具体如下:
其中r11,r12和r13是第二个坐标系中x轴的方向余弦,r21,r22和r23为第二个坐标系中y轴的方向余弦,r31,r32和r33为第二个坐标系中z轴的方向余弦

7 考虚图3.3(a)中的情形。两坐标系的坐标轴重合。计算方向余弦可得出下列变换矩阵:
显然(x’,y’,z’)=(x,y,z)

8 图3.3 VR世界坐标系与观察者坐标系内点的变换图

9 图3.3(b)的矩阵运算可表示为: 这样原坐标系的点(1,1,0)经过变换后在新坐标系中(,y,)的坐标为(1,-1,0)

10 如果虚拟观察者的位移为(tx,ty,tz),那么在虚拟环境中某一点关于虚拟观察者参考坐标系的变换可用矩阵的复合运算来表示。即先进行原点的平移,然后是坐标系变化。若用齐次坐标矩阵表示,则其表达式为:

11 例如,参照图(3.4)。若(tx,ty,tz)的值为(10,1,1),则方向余弦可表示为:
经化简:

12 如果把(x,y,z)的坐标(0,0,0)代入上式得(x,y,z)为(10,-1,1)。这从图(3
如果把(x,y,z)的坐标(0,0,0)代入上式得(x,y,z)为(10,-1,1)。这从图(3.4)可以得到证明。同样,代入(x,y,z)的值(0,1,1)可得(x,y,z)的值为(10,0,0),这同样是正确的。

13 3.2 虚拟环境中视点的定位 3.2.2 方位角定位法 确定方位的另外一种方法涉及相对于固定坐标的三个方位角。这三个方位角分别是偏航角、俯仰角和滚动角。不同的坐标系对这三个角的定义是不同的,这里我们采用右手直角坐标系。如图(3.5)所示:滚动角是相对于Z轴旋转的角(roll),俯仰角是关于X轴旋转的角(pitch),偏航角是关于Y轴旋转的角(yaw)。并规定逆时针转动为正。下面用齐次变换矩阵表示这些旋转。

14 3.2 虚拟环境中视点的定位 绕Z轴旋转角roll(滚动): 绕X轴旋转角pitch(俯仰): 绕Y轴旋转角yaw(偏航):

15 使用这些旋转的顺序一般为:滚动、俯仰和偏航。因此,如果在虚拟环境中用这些方位角来确定虚拟观察者的位置,那么在虚拟环境中与虚拟观察者相关的顶点坐标变换可通过逆运算导出。相应的转角是-roll,-pitch,-yaw。这时的矩阵是滚动(Roll)俯仰(Pitch)偏航(Yaw) 所表示矩阵的转置矩阵。 YW XW ZW 俯仰角θ 滚动角Φ 偏航角ψ

16 如前所述,由于虚拟观察者是从原点被平移至(tx,ty,tz),因此从虚拟环境到虚拟观察者的坐标变换用矩阵可表示为:
也可用一个齐次变换矩阵来表示:

17 T11=cos(roll)*cos(yaw)+sin(roll)*sin(pitch)*sin(yaw)
T12=sin(roll)*cos(pitch) T13=-cos(roll)*sin(yaw) +sin(roll)*sin(pitch)*cos(yaw) T14=-(txT11+tyT12+tzT13) T21=-sin(roll)*cos(yaw) +cos(roll)*sin(pitch)*sin(yaw) T22=cos(roll)*cos(pitch) T23=sin(roll)*sin(yaw)+cos(roll)*sin(pitch)*cos(yaw) T24=-(txT21+tyT22+tzT23)

18 T31=cos(pitch)*sin(yaw) T32=-sin(pitch) T33=cos(pitch)*cos(yaw)
T34=-(txT21+tyT32+tzT33) T41=0 T42=0 T43=0 T44=1 例如:roll=0o pitch=0o yaw=-180o tx=10 ty=1 tz=1

19 例如:roll=90o, pitch=180o, yaw=0o
tx=0.5 ,ty=0.5 ,tz=11 把(x,y,z)的坐标值(1,1,1)代入上式中可得点(x,y,z)的坐标值为(-0.5,-0.5,10)。同理,把(x,y,z)的值(0,0,1)代入可得(x,y,z)的值为(0.5,0.5,10),正如图3.6所示。

20 图3.6 经平移(0.5,0.5,11)并旋转(滚动90°,俯仰180°,偏航0°)后形成的VO坐标系

21 3.2 虚拟环境中视点的定位 3.2.3 欧拉角定位法 XYZ方位角是相对于固定参考坐标系的,而XYZ欧拉角是相对于局部旋转坐标系的。具体讲,XYZ方位角是相对于世界坐标系或全局坐标系的,XYZ欧拉角则是相对于虚拟观察者局部坐标系的。 例如:第二个坐标系相对于第一个坐标系先作俯仰旋转。图3.7(a)所示两个坐标系XYZ和X’Y’Z’相互重合。图3.7(b)是X’Y’Z’关于X’轴作俯仰旋转90o后的情形。图3.7(c)是再作关于Y’轴偏航90o旋转后的情形。而X’Y’Z’的新方向也可以通过先作90o偏航旋转,再进行90o俯仰旋转来得到。

22

23 按某一序列绕参考坐标系进行滚动、俯仰、偏航旋转,其结果等同于绕转动参考坐标系进行的同上述序列相反的偏航、俯仰、滚动旋转,这可通过任意复合角的旋转来说明。
因此,如果用欧拉角确定虚拟观察者在虚拟环境中的位置,那么在虚拟环境中任一点(x,y,z)可用下列关系转化为虚拟观察者坐标系中的点(x,y,z)。 这种运算与用XYZ方位角的公式区别在于滚动、俯仰、偏航旋转矩阵的顺序相反

24 欧拉角定位可以转化为齐次变换矩阵形式: T11=cos(roll)*cos(yaw)-sin(roll)*sin(pitch)*sin(yaw) T12=sin(roll)*cos(yaw)+cos(roll)*sin(pitch)*sin(yaw) T13=-cos(pitch)*sin(yaw) T14=-(txT11+tyT12+tzT13)

25 T21=-sin(roll)*cos(pitch)
T22=cos(roll)*cos(pitch) T23=sin(pitch) T24=-(txT21+tyT22+tzT23) T31=cos(roll)*sin(yaw)+sin(roll)*sin(pitch)*cos(yaw) T32=sin(roll)*sin(yaw)-cos(roll)*sin(pitch)*cos(yaw) T33=cos(pitch)*cos(yaw) T34=-(txT21+tyT32+tzT33) T41=0 T42=0 T43=0 T44=1

26 例如:如果虚拟环境中虚拟观察者用欧拉角来定位,且有如下情形:
roll=0° pitch=90° yaw=90° tx=0 ty=0 tz=0 把(x,y,z)的坐标值(1,1,0)代入上式可得在虚拟观察者坐标系中坐标(x’,y’,z’)的值为(1,0,1)。

27 3.2 虚拟环境中视点的定位 3.2.4 四元定位法 四元法描述了绕任意轴旋转的变换,四元数能用来描述虚拟观察者在虚拟环境中世界坐标系下的方位。 一个四元数由四个实数构成,可以如下定义: 其中s为标量,v为三维矢量。所以可以表示为 : 其中s,x,y,z都是实数

28 两个四元数相等,当且只当各分量分别相等。四元数象一般矢量一样可以进行加减运算 :
对于乘法,满足下列法则:

29 若已知两四元数q1和q2: 写成点积和叉积形式: 由于叉积是不可交换的,四元数也是不可交换的。

30 对任一四元数q,其逆(q) -1可表示为: 任一位置矢量均可由带零标量分量的四元数表示。例如,点P(x,y,z)可用下面四元数表示:这种形式用于绕某一轴的单个顶点的旋转

31 位置矢量v绕某一轴旋转某一角度,可用下式计算:
可以将这种算法应用于滚动,俯仰和偏航转动中。

32 例如:关于Z轴的滚动旋转可由下面四元数得到:
关于X轴的俯仰旋转可由下面四元数得到: 关于Y轴的偏航旋转可由下面四元数得到:

33 例如:假设点P(0,1,1)绕竖直的y轴旋转90o,如图所示,从图中可以看出旋转后的点P’坐标为(1,1,0)。

34 点P用位置矢量p来表示,通过计算四元数P’可实现旋转,其中矢量的分量将存贮旋转后的坐标
四元数q由下式给出: 四元数q的逆(q) -1有下式得出: 然后计算qp(q) -1

35 例二、假设P绕Z轴旋转,起始点坐标为(0,1,1),滚动角为-90o
点P可用四元数表示为p=[0,[0,1,1]],然后计算qp(q) -1:

36 如果定义三个四元数来表达滚动,俯仰,偏航旋转,则把它们乘起来可得到一个表示复合旋转的四元数。具体如下:
则表示复合旋转的四元数q为:

37 其中: s=cos(yaw/2)cos(pitch/2)cos(roll/2) +sin(yaw/2)sin(pitch/2)sin(roll/2) x=cos(yaw/2)sin(pitch/2)cos(roll/2) +sin(yaw/2)cos(pitch/2)sin(roll/2) y=sin(yaw/2)cos(pitch/2)cos(roll/2) -cos(yaw/2)sin(pitch/2)sin(roll/2) z=cos(yaw/2)cos(pitch/2)sin(roll/2) -sin(yaw/2)sin(pitch/2)cos(roll/2)

38 roll=90o pitch=180o yaw=0o s=0o x=cos45o y=-sin45o z=0
可以通过一个算例来验证其正确性。假定: roll=90o pitch=180o yaw=0o 则可求出s,x,y和z的值: s=0o x=cos45o y=-sin45o z=0 复合转动的四元数q为: 如果点P(1,1,1)按这种方式旋转,则旋转后的点为:

39 所以, 因此,旋转后的坐标点是(-1,-1,-1)。 注意这个复合四元数等于XYZ方位角。如果要求用欧拉角,则四元数序列将按下列方式重写: 四元数也能用矩阵来表示

40 3.3 透视投影 在虚拟环境中给虚拟观察者定位的各种方法,均能得出变换矩阵以便将虚拟环境参考坐标系的坐标值变为虚拟观察者坐标系中的坐标。经过变换后,虚拟物体和虚拟观察者(虚拟观察者在局部参考坐标系——虚拟观察者坐标系的原点,沿正Z轴方向观察)将处于同一个空间之中 。 为了显示虚拟物体,必须将三维几何模型经过投影变换,转换成显示器二维平面透视投影图。根据投影中心与投影平面之间距离的不同,投影可分为平行投影与透视投影。

41

42 平行投影的投影中心与投影面之间的距离为无穷大,而对于透视投影,这距离是有限的。平行投影又分为正平行投影和斜平行投影。透视投影分为一点透视,两点透视和三点透视,虚拟现实系统主要用到透视投影。透视投影的视线(投影线)是从视点(观察点)出发,视线是不平行的。 如图3.14所示,引入位于XY的平面为投影面进行透视投影。用此平面来捕获位于虚拟观察者视线上的目标的透视投影。一个位于投影面后的立方体,可以通过追踪从立方体上的点与虚拟观察者的连线在投影面上描述此物体。

43 图3.14 透视投影的例子

44 对任一连线,它与投影面的交点等于透视投影的准确位置。立方体上的八个顶点分别在投影面上投影,再用直线连接相应的投影点。这样在投影面上可以看到一个线框图。实际上与物体在投影平面的前后无关。
这种投影的几何性质十分简单,如图3.15所示。(a)表示了平面正视图,利用相似三角形的性质:

45 (b)表示侧视图: 将每个物体的顶点都经过这种变换,可得到物体的透视投影。 d的作用相当于一个比例因子。通过增大d值,透视图的尺寸随之增大,反之则相反。在投影平面所能观察到的透视图的角度是不变的,它依赖于物体与虚拟观察者的相对距离。因此在虚拟世界中,坐标的数值并不重要,因为透视图像的大小可以通过适合的d值或控制视场来补偿。

46

47 3.3.1 透视控制 模型数据被处理成较大的有结构层次的场景还是一个台式物体均由Z轴的相对数值决定。例如,当X,Y坐标值小于Z值时,数值结果都比较小,最后生成的图像几乎没有透视效果;而同样的一组X,Y坐标值,当Z值变小时,如Z值小于X,Y坐标值,那么结果值会较大并且数据分布也较广一些。对应的图像有较大的透视效果。这就为创造奇特的虚拟环境三维场景提供了可能。但是如果过份夸大透视效果,可能会导致虚拟现实系统的均衡性被损害,这一点应引起注意。需要对透视效果加以控制。

48 3.3.2 视场 我们知道相机的视场(FOV)是由镜头的焦距来控制的。短焦镜头,如28mm,能提供较大的视场,因此对近距拍照十分有用,而长焦镜头,例如135mm则比较适合远景拍摄。在透视投影中也需要控制视场。因为这应与最终显示系统的视场相匹配。例如,假设有一台基于虚拟现实技术的汽车模拟器,使用三个屏幕显示前方,左,右的景物。前方屏幕视场60o,而两侧各只有40o。因此,如果图像很自然地显示给司机,那么图像的视场应与投影系统的视场相匹配。虚拟的前景视场必须为60o,而两侧的视场为40o。在飞行模拟器显示系统和头盔式显示器显示系统中也采用了相同的技术。 透视图像的视场可通过设置对虚拟观察者可视的X,Y坐标范围来控制,在此范围内的点是可见,而外部的点是不可见的。可视场景最终被映射到显示媒体上。

49 3.4 人的视觉 3.4.1 空间视觉问题 人们在日常生活中常需要知道自己所关注的对象的距离。例如,所见的一座山离我们有多远,要取的茶杯是否在手边等。人们获得这些问题的答案依靠的是空间深度感觉——深度感(远近感)。人的大脑之所以能产生深度感,是由于综合了以下四种基本类型的深度线索而得。 ·静态深度线索 这是指任何能在静态图像(如图片)中获得的深度线索。它们来自物体的相互位置、物体的清晰程度、物体的相对大小、物体的细节情况等。这些都能使观察者观察静止的二维图像时,产生三维的深度感。

50 这是指任何能在动态图像(如电影)中获得的深度线索。如你看到电影中一辆汽车由小逐渐变大,就感知它由远变近。
·运动深度线索 这是指任何能在动态图像(如电影)中获得的深度线索。如你看到电影中一辆汽车由小逐渐变大,就感知它由远变近。 ·生理深度线索 上述的静态和动态深度线索对人类所产生的深度感觉只需要使用一只眼睛即可以看到,但是习惯上人们都是用两只眼睛来观察事物的,这种观察方法为人类提供了另外的重要深度线索,特别是对近距离(小于5米)的观察。生理深度线索来自与眼球的运动有关的两个方面:汇聚和调节。

51 A汇聚:为了看清邻近的物体,两只眼球必须转动。例如,当被观察物体与观察者的距离小于5米时,眼球就必须向内转动;反之,看远处(超过5米)物体时,眼球间汇聚角趋为零,即两眼向前直视。大脑监视此汇聚程度,随之产生深度感觉。 B调节:当人眼聚焦于远处物体时,眼球周围肌肉放松,使人眼水晶体透镜变得扁平一些;反之,观看较近的物体(几米远)时,上述的眼肌要收紧,以使水晶体透镜曲率变大。大脑监视此种眼睛水晶体周围肌肉的调节程度,并以此产生深度感觉。

52 ·双目视差线索 人类的眼睛是长在头部的前方,因此,当人类观察世界时,可以比较左、右眼所得到的信息的差别来判断物体的相对深度。这是因为两只眼睛的所见空间的大部分信息是相同的,但是各眼所见到的又确实稍有不同。这种现象被称为“双目视差”或“立体视差”。人的视觉神经会将这种视差用作判断物体深度的信息。习惯上将双目所见的一对带有视差的二维图像称为“立体对”。 实际证明,虽然在从二维图像来产生视觉的深度感上可能有多种线索起作用,但其中起决定性影响的是双目视差。所以在虚拟视实的视觉系统中景象的立体对的产生是不可缺少的。

53 3.4.2 立体观察 虚拟现实系统使用户尽可能地与计算机生成图像接口,尤其是利用立体视觉。为此,虚拟环境的两个不同视点必须由平行视差度来推导。当用户最终看到图像时,将获得真实的立体感。如图3.16所示的两条视线,两眼之间的距离Se大约为6.5厘米。 立体视觉所能计算的深度,大约为30米的距离。超过30米,左,右眼捕捉到的图像差别就无意义了。驱动左、右两眼的信号位于凹处的敏感区,也能帮助大脑定位外部世界的物体。如果在虚拟现实系统内部模拟这一过程,就要有一种方法用来跟踪用户的眼睛,目前我们将不考虑这种视线交互的情形,假定观察者盯着遥远的地平线,观察者有两条平行视线与Z轴平行

54

55 3.5 立体透视投影 前面涉及推导三维物体透视投影的相关知识,现在我们把它推广至生成左、右眼立体视景的情形。 在图3.17(a)中,一双眼睛盯着前方的立体。为从左眼得到视景,把左眼置于原点,向右移动立方体(如图3.17(b)),并进行投影分析。为从右眼得到视景,将其置于原点,向左移动立方体(如图3.17(c)所示),并进行投影分析。 图3.18(a)所示为左眼位于原点的一幅虚拟观察者坐标系的投影正视图。视平面至原点的距离是d,两瞳孔间距离为Se。物体上的任一点P(x,y,z)必须平移-Se/2,并且有:

56

57

58

59

60 下面用一个例子来验证这些关系。假设一个观察者两眼距离为6. 5厘米,他正在观察前方一个边长为10厘米的立方体。立方体的中心在Z轴上。如图3
下面用一个例子来验证这些关系。假设一个观察者两眼距离为6.5厘米,他正在观察前方一个边长为10厘米的立方体。立方体的中心在Z轴上。如图3.19所示,立方体与观察者最近的一边距离为40厘米。把这些值代入透视投影公式,可得到xpl,ypl和xpr,ypr的值。具体数值见表3.1。投影平面的距离为20厘米。 表3.1 投影图像参数表 X Y z Xpl ypl xpr ypr 5 40 0.58 1.67 2.75 -5 -1.67 -2.75 -0.58 50 0.5 1.43 -2.36 -1.43 2.36 -0.5

61

62 如果用立体眼镜来看这些图像,融合成一个完整的三维图像将很困难,将会产生一幅混淆的图像。其中心部分是一个狭窄的三维长方体,并带有左、右伪线。例如从上面的例子中我们可以看到,如果从60厘米的远处看一边长为10厘米的立方体。为了在焦点上看到此立方体,并形成一幅融合的图像,两眼必须聚焦并调节聚焦使两眼均能凝视立方体,这样我们就得到了一幅自然的三维立方体的图像。 然而,计算机模型没有包含聚焦。假定两眼注视无穷远处,这时看立方体,通过凝视远处的某些点,我们也可以看到两幅重叠的图像,这时可以通过旋转虚拟眼及相应的投影平面,可以得到用于计算立体对的几何模型所需要的视点,从而模拟聚焦。当然这是较为理想的方案,折衷方案是用平行视线保持以上几何模型,然后通过在头盔显示器HMD上产生图像重叠来模拟聚焦。为此需要在显示系统中使用发散或聚焦透镜。同时也应看到,所得到的虚拟环境的图像不会与现实世界里具有相同水准的立体感。因此“沉浸”(Immersion)一词只表示一种大致的含义,并不意味着从头盔显示器所得到的虚拟图像能够代替真实目击的感觉。

63 3.6 三维裁剪 通过跟踪从物体上的点到观察者的直线可以在投影平面上捕捉到物体的透视投影。直线与投影平面的交点即为物体的投影点。很明显只有当物体位于观察者的视场内时,这一过程才有效。然而有些情况下,物体的一部份是可见的,而其他部份是不可见的。这意味着物体要被裁剪掉不可见的部份。并且对左、右眼都要分别进行三维裁剪。 三维裁剪算法是计算机图形系统的基本特征。已经在许多图形工作站的硬件中实现。图3.20(a)表示左、右两眼的视锥。由显示屏的矩形来确定它们的视锥。图3.20(b)所示单眼的视锥,并确定了投影面和两个称之为远、近裁剪面的边界面。这两个平面将视锥裁为锥台。

64

65 无论物体是否需要裁剪与否,都要尽可能有效地建立三维裁剪算法。现在已经发展了多种算法。例如,如果每个物体都有完全包含它的矩形边界盒,若这个盒的每个顶点都是可见的,那么整个物体一定是可见的。同理,如果边界盒每个顶点都不可见,则包含的物体也不可见。其他情况就要考察对物体进行裁剪。 两个常用的裁剪算法是Cohen—Sutherland和Cyrus—Beck裁剪算法。 Cohen—Sutherland方法用6位码描述一条线的端点是否可见,然后对线的两个端点进行逻辑与运算以判断线是完全可见,完全不可见还是部份可见。对于部份可见的情况对线段作进一步剖分,然后对其子线段进行可见检验直至整个线段都被处理完成。 Cyrus—Beck算法对于一个三维凸多面体采用参数法定义一条三维直线。直线参数用来确定直线有可能与可视锥台六个面相交的位置。

66 由于裁剪是计算量相当大的工作,必须研究能减少被裁剪的多边形数目的方法,背面消除就是其中之一。根据多边形与观察者的相对方位,把多边形分为两类,可见和不可见。例如,考虑图3.21所示情形,两个标有A和B的多边形都只能看到一面。多边形A的法向量na与视觉矢量va夹角为θa,如果角小于90o,那么多边形是可见的,否则是不可见的,如多边形B。而角又由以下公式确定: 如果 为正,则面可见,否则不可见。 这种可见性测试必须对虚拟观察者的双眼都进行测试。因为完全可能有这种情况,即某平面对一只眼来讲是可见的,而对另一只眼来讲却是不可见的。

67

68 3.7色彩理论 3.7.1 光线与颜色 在光线的照射下,人们通过视觉器官感知周围物体的存在,每个物体在人们的视觉中反应出不同的色彩,如果在伸手不见五指的黑夜,眼前是一片漆黑,什么也看不到。光是电磁辐射中人眼可以觉察到的那部份,白色的太阳光由各种波长的光混合而成。如果让阳光通过一个三棱镜就会形成红、橙、黄、绿、青、蓝、紫七色光谱。 我们看到一个物体是白色的,是因为这个物体的表面能把各种光都反射出来。如果在白天看到一个物体呈黑色,是这个物体把所有的光都吸收了。彩色是人眼的一种生理感觉。

69 为了能够准确表示某一种颜色,可以使用三个基本参数:亮度,色调和饱和度。这三个参数在视觉上产生统一的效果,并严格地描述了色彩。亮度是光作用于人眼所引起的明亮程度;色调反映颜色类别,如红、绿、蓝等,它取决于占支配地位的光波长度;饱和度指彩色光所呈现的浓度,是光谱纯度的度量,饱和度愈高色彩显得愈浓,也就是说纯净的谱色光被白光“冲谈”得越少。色调与饱合度又称作色度,它说明光的彩色类别,又说明颜色的深浅程度。

70 3.7.2 三基色原理 通过对人眼彩色刺激灵敏度的研究发现,各种彩色感觉都可以由适当选择的三种基色按不同比例混合而成。三种基色必须是相互独立的,即其中任何一种基色都不能由其他两种基色混合而成。例如,红、绿、蓝就是这样一个三基色。以红、绿、蓝为基色可混合成各种彩色,三种基色均不加时,呈现黑色,三种全加上时呈现白色,这种方法叫做光合成法,在彩色印刷,艺术绘画中用的是色料减色法,这时的三种基色分别为黄、品红和青。

71 3.7.3 彩色模型 彩色模型是一种定量描述颜色的方法,它是通过彩色空间中一组坐标值表示一种颜色来实现的。这里主要介绍RGB、CIELUV、HSV和HLS四种模型。 1)RGB模型 在RGB(即红、绿、蓝)模型中(见图3.22),一种颜色用三个数为一组的形式(r,g,b)表示,其中r,g,b分别是红、绿、蓝三个分量的值,每个分量的变化范围都在0与1之间。RGB彩色空间可以看作一个立方体,三个分量为这个三维空间的三个坐标轴。一个基色为0,说明它对这种颜色没有贡献;若为1,则说明作出最大的贡献。例如,纯红表示为(1,0,0),即红为1,绿为0,蓝为0;纯蓝表示为(0,0,1)。各种灰度色可在连接(0,0,0)到(1,1,1)的对角线上找到。

72

73 2)CIELUV模型 CIE彩色模型是国际上采用的彩色标准,最初由国际照明委员会(CIE)于1931年提出,1978年公布了一个新的标准,叫CIELUV,图4.23所示为CIELUV彩色空间。CIELUV模型的优点是它提供了一种与设备无关的定义颜色的方法。一般而言,实际使用的RGB、HSV和HLS模型均与设备有关。

74 3)HSV模型 RGB模型一般用来规定CRT显示设备中的颜色。但常常在交互式场合下不那么容易定义所要的颜色。同样,CIELUV对用户来讲也不十分方便。通常接受一种颜色由三个因素(即色调、饱和度和亮度值)决定,这样可很方便地描述一种颜色。 HSV就采用了这一概念,这个模型可以看作一个圆锥,如图3.24所示。 色调(Hue)定义为一个绕着圆锥截面度量的角度,0o—360o表示为0—1的比例。红位于H=0,绿位于H=1/3,蓝位于H=2/3,饱和度(Saturation)沿圆锥截面的半径方向度量,0位于中心,1位于圆周上。圆锥截面的圆周上的颜色为完全饱和的纯颜色。亮度值(Value)是沿着圆锥的轴线度量的,0在锥顶点,1在底面。

75 沿着圆锥轴线上的点表示完全不饱和(S=0)的颜色,它给出了各级灰度的值,在底面为纯白色,顶点处为纯黑色。
由于感觉上的原因,HSV模型比RGB模型容易操作,基本上是由于色调、饱和度和亮度值可以分开调整的原因。

76 4)HLS模型 在这个模型中,色调与饱和度的度量范围为0—1,这同HSV模型一样。然而,亮度值由亮度(Lightness)来代替,如图3.25所示,其中白色位于L=1,黑色位于L=0。 图3.26表示了一个能提供两种彩色模型的选择环境光颜色的对话窗。在这个对话窗中,操作者可以改变任一个模型中的任一分量的值,另一个彩色模型的三个分量值也随之改变。右边的矩形区域中所显示的颜色就是正在调试的颜色。

77

78 3.7.4 基于颜色的算法 由三种基色红、绿、蓝叠加生成全色图像是电视机和计算机图形技术的核心。在描绘虚拟环境的彩色场景算法中也渗透了这种思想。使用这种算法时,先分别计算出一幅图像的三种基色,当投影或显示时,再合成彩色图像。分配给每种基色的位数最终控制着所显示的颜色数。当每种基色使用8位时。可以有256种深度范围,结果可能产生1.68千万(256×256×256)种颜色值。 虚拟环境中的物体可以通过使用三种基色的反射系数和光源发出基色的情况进行着色,从而建造虚拟环境。借助多种反射模型可以计算出三种反射光的成份从而建立每个象素的基色调。

79 3.8 简单的三维建模 为了使读者对本章的其他内容如光照和阴影等有一个较全面的理解,这里我们先简单介绍一下简单的三维建模,较为详细的与虚拟环境相关的各种建模方法将在以后的章节中介绍。 ·欧拉法则 欧拉法则是对于凸多面体,其边数等于面数与顶点数之和减2,即: 边数=面数+顶点数-2 对于立方体,有12条边,6个面和8个顶点,其关系成立。 立方体建模的一个简单方法是按表格形式存贮每一个顶点的三维坐标,并与另一个表示12条边及相应顶点的表格一起使用。

80 图3.27描述了一单位立方体及其相应的数据表。顶点表存贮8个顶点的坐标,边表存贮边的顺序号及其相应顶点在顶点表中的序号。

81 如果要显示这个立方体,只能通过12条独立的边来表示。由于没有足够的信息来描述各个边的构成,因此不可能产生有阴影的物体的图像。这可以通过定义带有顶点表和面表的模型来完成。如图3.28所示,序号为4的面的顶点序列为5,8,2,1。序号为6的面的顶点顺序为1,4,6,5。注意:从立方体的外面看,所有顶点均按逆时针方向排序。这种排序对于需要计算平面法向矢量的程序十分重要。

82

83 ·表面法向量 各面中顶点的排列顺序本身并不重要,但要求各面中顶点顺序的定义规则应保持一致。为了进一步说明,我们根据图3.28来推导每个平面的法向量,这可通过使用两边的叉积来求出。面1包含有顶点1,2,3,4。我们用前三个项点构成两个矢量 。 由顶点1指向顶点2, 由顶点2指向顶点3。如图3.29(a)所示,两个矢量分别可由下式计算。

84 然后叉乘V1和V2,V1×V2=[1,0,0],这是沿X轴正向的单位向量,虽然它也是这个面的法向量,但它指向立方体的内部。为了确保法向量指向所定义物体的外部,就要改变V2的方向,重新定义V2=[(0-0),(1-1),(0-1)]=[0,0,-1],这样V1×V2的结果为[-1,0,0],这就是指向立方体外的面1的法向量。类似地处理每个面的前三个顶点,就得到如图3.29(b)所示的各个面的单位法向量。

85

86 ·表面的平面性 另外一个关于构成物体边界的多边形的几何考虑是多边形的平面性。因为如果一个多边形被定义为由任意连接的边构成,就很容易产生扭曲的表面,虽然这些面在存贮中没有任何问题,但当这些面在进行几何计算和描绘生成时就会出现问题。扭曲的多边形既不能确保面法向量的唯一性,也对表面的描述毫无作用。扭曲的表面对图形的解释具有相当的不确定因素,因此由于模型定义的不一致性,将导致虚拟观察者与物体间的碰撞检测发生错误。 如果非平面的表面是虚拟环境的一个特征,那么数据一定要转换成三角形网格,并且网格必须是平面的。三角形网格技术能解决许多问题,但也有一些必要条件,如三角形尽可能保持等边。 三角形网格化的优点在于,它不仅是平面的,而且三边的一致性可以简化数据文件和数据结构的设计,有利于硬件的描绘生成和几何分析。

87 建模工具 目前,用户可以使用软件工具创建数据库,利用高速图形工作站建立模型。例如,可以通过侧视图、俯视图和正视图将一个模型创建成三维的。当用户根据这些图工作时,系统能自动了解怎样寻访内部数据结构,甚至可以警告用户如何协调各部份以保持模型的几何完整性。 1、拉伸:一种有用的建模工具能使用户从一幅横截面图形拉伸到一个完整的多边形为边界的物体。 2、扫描面:通过旋转生成一扫描面。每次转的角越小,面越光滑,但也增加了多边形的计算量。

88 3.9 光照模型 为了能较好地理解怎样对虚拟世界进行照明和着色,上一节我们简单介绍了三维模型的建立。 3.9.1 点光源 为了给一个场景着色,计算机必须知道有关光源的描述:光源在哪里,什么颜色,亮度如何以及方向等。这些信息都是用户通过照明模型提供给计算机的。照明模型使用的光源是理想的光源。例如,实际使用的白炽灯,光是从钨丝发出的,而计算机则作了假设,认为是从一点发出的。再比如,光源本身在场景之外,那么就不必考虑具体位置,简化为无穷远光源即可。 在光照模型中,最简单的光源是点光源。因为它需要一个空间位置和光的强度。

89 然而,无论使用什么方法,都需要光源的空间位置(Lx,Ly,Lz)和光照值(Ired,Igreen,Iblue)。
在所有方向上,光源发出的能量是相等的。光的强度可以由三种基色光的成份来确定。我们已经知道一种特殊的颜色可以由红、绿、蓝三种基色按不同比例混和形成。所以使用HSV彩色模型,很容易确定颜色和强度,这种方法可以使颜色和强度被分别控制。 然而,无论使用什么方法,都需要光源的空间位置(Lx,Ly,Lz)和光照值(Ired,Igreen,Iblue)。 在平面上,入射光的强度是表面法向与入射光线之间的夹角——入射角的函数。如果忽略光法向传播的光强损失,那么入射光通量为: 其中Ip为点光源的强度,θ为入射角。

90

91

92 3.9.2 无限远点光源 无限远点光源是由于光源位置处于无限远处以致于入射光线都是平行的。太阳即可认为是无限远点光源。如果忽略在光传播过程中的强度衰减,那么平面上的入射光强是平面法向与光源发出的光线夹角的余弦函数。 3.9.3 局部光源点光源图 局部光源要用相关的角度来模拟定向光束的光照特征。典型的应有光强、位置、方向和照射角。例如,在图3.34中,如果入射光向量r和方向矢量s之间的照射角没有超过局部光源的半角,那么点P(Px,Py,Pz)能被光照到。该点光强也是入射角的函数。

93

94 3.9.4 环境光 如果不允许光从一个平面反射到另一个平面,那么将有一些表面根本受不到光的照射。结果,当描绘生成这些面时,它们将呈现黑色或不自然的颜色。为避免这种情况的发生,光照方案中应当允许某些背景光的存在,即环境光。它无专门的指向,每个方向光强相等。在光照计算中可将环境光作为一常量加入,一般占总光照的20~25%。 3.9.5 阴影 当观察方向和光照方向不一致时,就会出现阴影,阴影能使人感到显示景物的远近深浅,从而极大地增强了画面的真实感。因此,在真实感图形显示时,阴影处理是必不可少的。 关于阴影计算有以下几种方法,阴影体积法,Z一缓冲器法,阴影多边形,放射法,射线追踪法和光体积法。虽然使用这些算法能生成非常逼真的图像,但要用于实时环境中还是比较困难的。

95 如果Pt为三角形上的一个顶点,Ps为其对应的阴影的顶点,那么相对于Ps的位置矢量为:
假设所涉及的光的阴影方程能够化简,这样我们就能得出投影地面上的阴影的通解。如图3.35所示的情况,其中三角形对着由单位向量Vi所规定的照明光源。如果是平行光源,Vi对每个三角形的顶点都是常量。对于点光源情形,相对于每个三角形顶点,Vi都必须重新计算。 如果Pt为三角形上的一个顶点,Ps为其对应的阴影的顶点,那么相对于Ps的位置矢量为: 如果单位平面法向量 ,则阴影平面方程为: AXs+BYs+CZs=0

96 可求出t: 对于地面情况,有n=[0,1,0]T,所以t可化简为: 从这个方程可以看出如果 ,则不会产生阴影;如果是平行光并且在竖直上方时,yi=-1且t=yt。 对着光源的任一三角形都将产生一个可用适合颜色描述的阴影三角形。

97

98 3.9.6 透明度 透明度也是要在模型中考虑的重要属性,否则就无法模拟玻璃和其他透明物体的效果。透明性质通常通过给组成物体的多边形赋予透明系数来完成,透明系数在0与1之间。绘图者可以使用这一参数计算透明表面上发光体所发出的光强。除了能对玻璃建模外,还可以用不同的透明度来逐渐淡化一个渐渐消隐的模型描述和逐渐显现另一个模型,这就避免了一个模型的突然消失或突然被另一个模型代替。 3.9.7 增强真实感 多光源 到目前为止,我们只考虑了一个光源的情况。如果计算机系统有足够的处理能力,能实时地完成计算量,那么虚拟环境就可以有多种不同的光源来照明。但多个光源又会带来光平衡问题,即某些表面被过度照明而另一些却仍处于阴影中。另外,由于光源有可能在虚拟环境中交互移动,因此光源越多,产生光线不平衡的机会就越大。

99 光强随距离增加而衰减 观察户外由太阳照明的场景或室内由室内光源和透过窗户的阳光照明的室内景物时,这时我们遇到了非常复杂的光照情况。这种场合包括多重漫反射、镜面反射、颜色扩散、多重阴影和频率吸收。在虚拟现实中经常采用某些物理规则的近似公式。例如,光强衰减是光传播距离平方的函数。然而实验表明,将光强除以(d+k)也能获得较好的结果。其中d是光源到虚拟物体的距离,k是一些系统定义的常量。 另一种方法是采用一个基于经验观测的衰减函数,定义为: F(d)=R d(0) 其中d是从光源到光照面的距离,R为衰减参数。例如,如果距光源2个距离单位,光强衰减0.5个单位。R可按下式计算: 当d=2,atten=0.5时,可求出R=0.707,所以F(d)=(0.707)d。当d=3时,F(3)=0.353。

100 逆光 尽管上面所涉及的虚拟光源其作用均为叠加入射在表面上的光强,但也存在着某些光源其入射光方向相反产生光强衰减的情况,这会形成所谓的“阴影源”。因为实际作用在表面上的光减少了。 X射线源 在现实世界中,X射线可用于穿透物体表面而显示物体的内部。同理,在虚拟世界中,X射线源可用于模拟局部光源让用户有效地看到物体的内部。具体作法是先让X射线照射物体,然后改变物体的透明属性。透明程度可由X射线源的强度来决定。要实时完成这些任务必须具备高性能的图像生成器。

101


Download ppt "《虚拟现实及其应用》 第三讲 蔡则苏 2008-03-27."

Similar presentations


Ads by Google