计算机图形学(四)_几何变换_1_基本的二维几何变换(一)

来源:互联网 发布:js判断身份证号18位 编辑:程序博客网 时间:2024/04/27 22:28
4 .几何变换
        使用线段和填充区等图元来描述场景,并利用属性来辅助这些图元。我们给出了扫描线算法,可以将图元显示在光栅设备上。现在,再看看可用于对象重定位或改变大小的变换操作。这些操作也用于将世界坐标系中的场景描述转换为输出设备上显示的观察子程序中。另外,它们用于各种其他的应用中,如计算机辅助设计和计算机动画。例如,一个建筑设计师通过安排组成部分的方向和大小来创建一个设计布局图,而计算机动画师通过沿指定路径移动“照相机”位置或场景中的对象来开发一个视频序列。应用于对象几何描述并改变它的位置、方向或大小的操作称为几何变换(geometric transformation)
        几何变换有时也称为建模变换(modeling transformation ),但有些图形系统将两者区分开来。建模变换一般用于构造场景或给出由多个部分组合而成的复杂对象的层次式描述等。例如,一架飞机由机翼、机尾、机身、发动机和其他部分组成,每一部分又可描述成第二级组合体,如此等等,在层次结构中逐层往下描述。因此,该飞机可用那些部件及附属于每个部件的“建模”变换来描述,这些变换指出那些部件如何适用于整个飞机的设计。另一方面,几何变换能用来描述动画序列中对象在场景中可以怎样移动或简单地从另一角度来观察它们。因此,有些图形系统提供两套变换子程序,而其他一些软件包则提供一套能同时用于几何变换和建模变换的函数。
4.1 基本的二维几何变换
        平移、旋转和缩放是所有图形软件包中都含有的几何变换函数。其他可能包括在图形软件包中的变换函数有反射和错切操作。为了介绍几何变换的一般概念,我们首先考虑二维操作,然后讨论这些基本的思想怎样扩充到三维场景中。在理解基本的概念后,我们可以很容易地编写执行二维场景对象几何变换的程序。
4.1.1 二维变换
        通过将位移量加到一个点的坐标上来生成一个新的坐标位置,可以实现一次平移(translation)。实际上,我们将该点从原始位置沿一直线路径移动到新位置。类似地,对于一个用多个坐标位置定义的对象(如四边形),可以通过对所有坐标位置使用相同的位移量沿平行路径重定位来实现平移。然后在新位置显示完整的对象。
         将平移距离(translation distance ) tx和ty 加到原始坐标(x, y)上获得一个新的坐标位置(x', y'),可以实现一个二维位置的平移,如图所示。

一对平移距离( tx, ty)称为平移向量(translation  vector)或位移向量( shift vector )。我们可以使用下面的列向量来表示坐标位置和平移向量,然后将方程表示成单个矩阵等式。

这样就可以使用矩阵形式来表示二维平移方程:

       平移是一种移动对象而不改变其形状的刚体变换。即对象上的每一点移动了同样的距离。一条直线段的平移通过使用方程(5.3)对其两端点进行移动并重画两个新端点位置间的线段来实现。多边形也以类似的方法平移。我们将平移向量加到多边形的每一顶点坐标位置,然后使用这组新端点来重新生成多边形。
      下面的程序演示了平移操作。输入的平移向量用来将一个多边形的n个顶点从一个世界坐标系移动到另一个,而OpenGL子程序用来重新生成平移后的多边形。
class wcPt2D {public:GLfloat x, y;};void translatePolygon (wcPt2D * verts, GLint nVerts, GLfloat tx, GLfloat ty){GLint k;for (k = 0; k < nVerts; k++){verts [k].x = verts [k].x + tx;verts [k].y= verts [k].y + ty;} glBegin (GL_POLYGON);for (k = 0; k < nVerts; k++)glVertex2f (verts [k].x, verts [k].y); glEnd();}

       如果要删除原来的多边形,则可以在平移前用背景色显示它。有些图形软件包中有另外的删除图形部分的方法。同样,如果要保存原来的多边形位置,可以将平移后的多边形存入不同的数组。
    可以使用同样的方法来平移其他对象。为了改变圆或椭圆的位置,可以平移中心坐标并在新的中心位置上重画图形。对于一个样条曲线,通过平移定义该曲线路径的点,然后使用平移过的坐标位置来重构曲线。







0 0
原创粉丝点击