资源描述:
《虚拟现实及其应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《虚拟现实及其应用》第三讲蔡则苏2008-03-27第三章虚拟现实的图形学基础3.1引言计算机图形学技术是实现虚拟现实系统的重要理论基础之一SPI-仿真(Simulation)、呈现(Presentation)、交互(Interaction)是虚拟现实系统的重要概念真实感图形的生成需要:场景造型、取景变换、视域裁剪、消除隐藏面、可见光度计算等介绍虚拟环境中视点的不同定位方法立体透视投影法色彩理论三维建模方法、光照模型、阴影算法、三维消隐等3.2虚拟环境中视点的定位在虚拟环境中的虚拟观察者有着特殊位置,并沿着某条视线来观察。由于虚拟观察者有两只眼
2、睛,较为理想的情况是两眼分别接受环境中两幅不同的视景图像,从而生成三维立体图像。这就需要用计算机重新计算相对于虚拟观察者参考坐标系的虚拟环境的几何坐标。而这又依赖于在虚拟环境中定义虚拟观察者参考坐标系的方法。这些方法包括方向余弦法,XYZ方向的方位角法,XYZ欧拉角法和四元法。3.2.1方向余弦定位法一个单位三维向量在三个坐标轴上的分量等于该向量与三个坐标轴之间夹角的余弦。夹角的余弦被称为方向余弦,可以通过向量与三个坐标轴单位向量的点积来计算,如图3.2所示。3.2虚拟环境中视点的定位使用方向余弦法可以使某一参考坐标系中的某一点坐标P(x,y,
3、z)转换成另一参考坐标系中的P(x’,y,z’)具体如下:其中r11,r12和r13是第二个坐标系中x轴的方向余弦,r21,r22和r23为第二个坐标系中y轴的方向余弦,r31,r32和r33为第二个坐标系中z轴的方向余弦考虚图3.3(a)中的情形。两坐标系的坐标轴重合。计算方向余弦可得出下列变换矩阵:显然(x’,y’,z’)=(x,y,z)图3.3VR世界坐标系与观察者坐标系内点的变换图图3.3(b)的矩阵运算可表示为:这样原坐标系的点(1,1,0)经过变换后在新坐标系中(,y,)的坐标为(1,-1,0)如果虚拟观察者的位移为(tx,ty
4、,tz),那么在虚拟环境中某一点关于虚拟观察者参考坐标系的变换可用矩阵的复合运算来表示。即先进行原点的平移,然后是坐标系变化。若用齐次坐标矩阵表示,则其表达式为:例如,参照图(3.4)。若(tx,ty,tz)的值为(10,1,1),则方向余弦可表示为:经化简:如果把(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),这同样是正确的。3.2虚拟环境中视点的定位3.2.2方位角定位法确定方位的另外
5、一种方法涉及相对于固定坐标的三个方位角。这三个方位角分别是偏航角、俯仰角和滚动角。不同的坐标系对这三个角的定义是不同的,这里我们采用右手直角坐标系。如图(3.5)所示:滚动角是相对于Z轴旋转的角(roll),俯仰角是关于X轴旋转的角(pitch),偏航角是关于Y轴旋转的角(yaw)。并规定逆时针转动为正。下面用齐次变换矩阵表示这些旋转。3.2虚拟环境中视点的定位绕Z轴旋转角roll(滚动):绕X轴旋转角pitch(俯仰):绕Y轴旋转角yaw(偏航):使用这些旋转的顺序一般为:滚动、俯仰和偏航。因此,如果在虚拟环境中用这些方位角来确定虚拟观察者的
6、位置,那么在虚拟环境中与虚拟观察者相关的顶点坐标变换可通过逆运算导出。相应的转角是-roll,-pitch,-yaw。这时的矩阵是滚动(Roll)俯仰(Pitch)偏航(Yaw)所表示矩阵的转置矩阵。YWXWZW俯仰角θ滚动角Φ偏航角ψ如前所述,由于虚拟观察者是从原点被平移至(tx,ty,tz),因此从虚拟环境到虚拟观察者的坐标变换用矩阵可表示为:也可用一个齐次变换矩阵来表示:T11=cos(roll)*cos(yaw)+sin(roll)*sin(pitch)*sin(yaw)T12=sin(roll)*cos(pitch)T13=-cos(
7、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)T31=cos(pitch)*sin(yaw)T32=-sin(pitch)T33=cos(pitch)*c
8、os(yaw)T34=-(txT21+tyT32+tzT33)T41=0T42=0T43=0T44=1例如:roll=0opitch=0oyaw=-1