第二章 三维观察
1. 三维观察坐标系 1.1观察坐标系
为了在不同的距离和角度上观察物体,需要在用户坐标系下建立观察坐标系xv,yv,zv(通常是右手坐标系)也称(View Reference Coordinate)。如下图所示,其中,点p0(xo, yo, z0)为观察参考点(View Reference Point),它是观察坐标系的原点。
图1.1 用户坐标系与观察坐标系
依据该坐标系定义垂直于观察坐标系zv轴的观察平面(view palne),有时也称投影平面(projection plane)。
图1.2 沿zv轴的观察平面
1.2观察坐标系的建立
观察坐标系的建立如下图所示:
图1.3 法矢量的定义
观察平面的方向及zv轴可以定义为观察平面(view plane)N
法矢量N: 在用户坐标系中指定一个点为观察参考点,然后在此点指定法矢量N,即zv轴的正向。
法矢量V:确定了矢量N后,再定义观察正向矢量V,该矢量用来建立yv轴的正向。通常的方法是先选择任一不平行于N的矢量V',然后由图形系统使该矢量V'投影到垂直于法矢量N的平面上,定义投影后的矢量为矢量V。
法矢量U:利用矢量N和V,可以计算第三个矢量U,对应于xz轴的正向。
的指定视图投影到显示设备表面上的过程来处理对象的描述。 2. 世界坐标系
在现实世界中,所有的物体都具有三维特征,但是计算机本身只能处理数字,显示二维的图形,将三维物体和二维数据联系到一起的唯一纽带就是坐标。为了使被显示的物体数字化,要在被显示的物体所在的空间中定义一个坐标系。该坐标系的长度单位和坐标轴的方向要适合被显示物体的描述。该坐标系被称为世界坐标系,世界坐标系是固定不变的。
OpenGL中世界坐标用来描述场景的坐标,Z+轴垂直屏幕向外,X+从左到右,Y+轴从下到上。世界坐标系是右手笛卡尔坐标系统。我们用这个坐标系来描述物体及光源的位置。世界坐标系以屏幕中心为原点(0,0,0),长度单位这样来定: 窗口范围按此单位恰好是(-1,-1)到(1,1)。
3. 世界坐标系到观察坐标系
在三维观察流水线中,场景构造完成后的第一步工作是将对象描述变换到观察坐标系中。对象描述的转换等价于将观察坐标系叠加到世界坐标系的一连串变换。
1. 平移观察坐标原点到世界坐标系原点。
2. 进行旋转,分别让xview、yview和zview轴对应到世界坐标的xw、yw、zw轴。
如果指定世界坐标点P=(x0,y0,z0)为观察坐标原点,则将观察坐标系原点移到世界坐标系原点的变换是
?1?0????0???000?x0??10?y?0
01?z0??001??将观察坐标系叠加到世界坐标系的组合旋转变换矩阵使用单位向量u、v和n来形成。该变换矩阵为
?ux?R??vx?n?x?0uuvvnnyyyzzz000??0? ?0?1?