计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换)

二维观察

1.   二维观察流水线

1.1概念

1)      裁剪窗口(ClippingWindow):二维场景中要显示的窗口,所有在此区域之外的场景均要裁去。

  •          又称为世界窗口或观察窗口,简称窗口
  •          在世界坐标系(又称用户坐标系)内定义

2)      视口(Viewport):指显示设备上用来显示图形区域,又称视区,在设备(屏幕)坐标系内定义

3)       裁剪(Clip):从场景中确定位于窗口内的图形

1.2    裁剪窗口和观察坐标系的关系

要将窗口内的图形在视口中显示出来,必须经过将窗口到视口的变换处理(世界坐标系到设备坐标系的变换,也称二维观察变换

 计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换)

 

1.3    规范化坐标系和观察坐标系的关系:

  •   观察坐标系是根据窗口方向和形状在世界坐标平面中定义的直角坐标系
计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换)

  •   规格化坐标系也是直角坐标系,它是将二维的坐标系规格化到(0.0,0.0)到(1.0,10.)的坐标范围内形成的,规格化坐标系是为了使观察处理独立于输出设备。
计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换)

1.4 二维观察流程

计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换)

裁剪工作通常在规范化设备坐标系中进行,这样这使我们可以在此之前合并变换矩阵从而减少计算时间。

一个实例如下:

计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换)

2.   裁剪窗口

2.1 观察坐标系裁剪窗口

    二维观察变换的一般方法是在世界坐标系中制定一个观察坐标系。以该坐标系为参考,通过选定方向和位置来指定矩形裁剪窗口

 

观察坐标系变换成与世界坐标系重合的步骤

1)      将观察坐标系原点移动到与世界坐标系原点重合(平移变换,如下图a)

计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换) 

2)      旋转观察坐标系使其与世界坐标系重合(旋转变换,如下图b)

计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换)

具体变换过程,请参照上篇博文,地址:

https://blog.csdn.net/lhs322/article/details/79950700   

3.   规范化和视口变化

很多图形系统都是将规范化和窗口-视口转换合并成一步,即直接通过裁剪窗口转换为规范化视口。

3.1 裁剪窗口到规范化视口的映射

    首先定义一个规范化视口,其规范坐标值从0到1。按点的变换方式将对象描述变换到该视口。如果对象在观察坐标系中心,则它必然也显示在规范化视口的中心。下图中,窗口内的点(xw,yw)映射到对应视口的点(xv,yv)

计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换)

为了保持视口与窗口中对象具有同样的相对位置,即将裁剪窗口等比例缩放,再对应到同样位置,可以以一下两步进行:

1)      可以先以点(xwmin,ywmin)为固定点进行缩放,缩放到规范化视口大小

2)      将(xwmin,ymin)移到(xvmin,yvmin)

第一步,以(xwmin,ywmin)为固定点进行缩放,其矩阵为:

计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换)

为确定缩放系数Sx,Sy,我们可以做一下推导:

若要保证缩放后的对象具有同样的相对位置,那么

计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换)

第二步中,平移矩阵为:

计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换)

所以变换到规范化视口的符合矩阵为:

计算机图形与OpenGL学习六(二维观察1.二维观察流水线、裁剪窗口、规范化和视口变换)