变换与裁剪课件

上传人:我*** 文档编号:141505627 上传时间:2020-08-09 格式:PPT 页数:164 大小:2.70MB
返回 下载 相关 举报
变换与裁剪课件_第1页
第1页 / 共164页
变换与裁剪课件_第2页
第2页 / 共164页
变换与裁剪课件_第3页
第3页 / 共164页
变换与裁剪课件_第4页
第4页 / 共164页
变换与裁剪课件_第5页
第5页 / 共164页
点击查看更多>>
资源描述

《变换与裁剪课件》由会员分享,可在线阅读,更多相关《变换与裁剪课件(164页珍藏版)》请在金锄头文库上搜索。

1、变换与裁剪,内容,数学基础 二维变换 三维变换 裁剪,内容,数学基础 二维变换 三维变换 裁剪,数学基础,矢量(vector) 连接两个点的有向线段。又称向量 行向量和列向量两种表示 矢量和,数学基础,矢量的数乘 矢量的点积 运算 性质,数学基础,矢量的长度 单位矢量 矢量间的夹角 矢量的叉积,右手法则,数学基础,矩阵(Matrix) mn 阶矩阵 n阶方阵(mn) 单位矩阵 n阶方阵,对角线元素为1, 其它元素为0,数学基础,矩阵(续) 行向量与列向量 当m1时,A退化为行向量a11, a12, , a1n 当n1时, A退化为列向量a11, a21, , am1T 矩阵的加法 A=(aij

2、)mn,B(bij) mn A与B的和记为AB 性质:结合律和交换律,数学基础,矩阵(续) 矩阵的数乘 矩阵的乘法 性质:结合律和分配律(不满足交换律),数学基础,矩阵(续) 矩阵的转置 矩阵的逆 n阶方阵A是可逆的,若存在另一个n阶方阵B,使得 ABBAIn,称B是A的逆阵,记为BA1,内容,数学基础 二维变换 基本变换 齐次坐标表示 其它变换 三维变换 裁剪,二维几何变换,平移变换 (translation transformation) 将点P(x, y)在x轴方向、y轴方向分别平移距离tx,ty,得到点P(x, y),则,记为:T(tx , ty),矩阵表示:,二维几何变换,旋转变换(

3、rotation transformation) 如 点P(x, y)的极坐标表示 (r为P 到原点的距离) 绕坐标原点(称为参照点,基准点)旋转角度 (逆时针为正,顺时针为负),二维几何变换,旋转变换(续),二维几何变换,放缩变换(scaling transformation) 将点P(x, y)在x方向, y方向分别放缩 sx 和 sy 倍,得到点P(x, y) 以坐标原点为放缩参照(基准)点 不仅改变了物体的大小和形状,也改变了它离原点的距离,记为:S(sx, sy),二维几何变换,利用矩阵计算变换后的坐标时,平移、旋转和放缩变换分别为: 运算不统一,如何统一运算?,齐次坐标,为什么需要

4、齐次坐标? 对多个点计算多次不同的变换时,分别利用矩阵计算各变换导致计算量大 运算表示形式不统一 平移为“” 旋转和放缩为“” 统一运算形式后,可以先合成变换运算的矩阵,再作用于图形对象,齐次坐标,定义 Homogeneous Coordinate (x,y)点对应的齐次坐标定义为 (x,y)点对应的齐次坐标为三维空间的一条直线 标准齐次坐标(x,y,1) h0表示无穷远点,齐次坐标,二维变换的矩阵表示 平移变换 旋转变换,齐次坐标,放缩变换 变换具有统一表示形式的优点 便于变换合成 连续变换时,可以先得到变换的矩阵 便于硬件实现,齐次坐标,变换的性质 平移和旋转变换具有可加性 放缩变换具有可

5、乘性,齐次坐标,逆变换 逆平移变换:正平移距离tx,ty 逆旋转变换:旋转角度为,齐次坐标,逆放缩变换:放缩系数为sx和sy,复合变换,变换合成 方法:连续变换时,先计算变换矩阵,再计算坐标 优点: (1)提高了对图形依次做多次变换的运算效率 如:图形上有n个顶点Pi,如果依次施加的变换为T,R,那么顶点Pi 变换后的坐标为,每个顶点需要2次矩阵相乘,只需要1次矩阵相乘,复合变换,变换合成(续) (2)提供构造复杂变换的方法 对图形作较复杂的变换时,不直接去计算这个变换,而是将其先分解成多个基本变换,再合成总的变换 复合变换 Composite transformation 多个变换的组合 可

6、通过单个变换矩阵来计算矩阵乘积,复合平移变换,连续平移变换 平移向量为(t1x,t1y)和(t2x,t2y) 点P 经变换为P,则有 复合矩阵,复合旋转变换,连续旋转 P 经连续旋转角度分别为 1 和 2 后 连续旋转具有相加性,复合放缩变换,连续放缩 连续放缩因子分别为:(s1x, s1y) 和 (s2x, s2y),二维基准点旋转,关于任意参照点 的旋转变换 步骤:(1)平移对象使参照(基准)点移到原点(2)绕坐标原点旋转(3)平移对象使基准点回到原始位置,二维基准点放缩,关于任意参照点 的放缩变换 步骤:(1)平移对象使基准点与坐标原点重合(2)放缩变换(3)反向平移使得基准点回到初始位

7、置,小结,变换合成时,矩阵相乘的顺序 单次变换:列向量表示点 复合变换:先作用的放在连乘的右端,后作用的放在连乘的左端,点表示成行向量呢?,其它变换,对称变换(反射变换、镜像变换:reflection) (1)关于 x 轴的对称变换 (2)关于 y 轴的对称变换,其它变换,(3)关于任意轴的对称变换 平移(tx, ty)使l 过坐标原点,记为T1 旋转,记R1 对称, 记SYx 旋转-,记 R2 平移(-tx, -ty), 记T2,总变换:T2R2 SYxR1 T1,其它变换,错切变换(shear) 依赖轴:坐标保持不变的坐标轴,又称参考轴 方向轴:余下的坐标轴 1、以y 轴为依赖轴的错切变换

8、 (1)以 y = 0为参考轴(坐标保持不变),Shx是对y=1上的点沿x轴移动的距离,其它变换,(2)以 y = yref 为参考轴,x = x + shx ( y yref) y = y,其它变换,2、以x轴为依赖轴的错切变换,其它变换,仿射变换 affine transformation 二维线性变换的一般形式 平移,旋转,放缩,对称和错切是特例 特点:保持平行线间的平行关系,三维模型变换:平移,三维平移T:三维点P(x,y,z)移动(tx,ty,tz)后,得到点P(x,y,z),三维模型变换:放缩,三维放缩S:三维点P(x,y,z)放缩(sx,sy,sz)后,得到点P (x,y,z),

9、三维造型变换:旋转,绕x轴逆时针旋转角的旋转变换Rx,绕y轴逆时针旋转角的旋转变换Ry,绕z轴逆时针旋转角的旋转变换Rz,三维造型变换,非线性三维模型变换:变换矩阵是空间位置(x, y, z)或者旋转角度 (x, y, z)的函数。,几何变换相关函数,glTranslatef(1.0f,1.0f,0.0f);平移变换 glRotatef(80.0f,1.0f,0.0f,0.0f);旋转变换 glScalef(0.5f,0.5f,0.5f);缩放变换,任务一:简单几何变换,在位置(1,1)处绘制一个茶壶,要求缩小为原来的0.5倍,并绕X轴正方向逆时针旋转30度,任务一:简单几何变换,从茶壶基本框

10、架出发,添加代码 在display函数中绘制部分修改成如下代码 glLoadIdentity(); glTranslatef(1.0f,1.0f,0.0f); glRotatef(80.0f,1.0f,0.0f,0.0f); glScalef(0.5f,0.5f,0.5f); glutSolidTeapot(0.5);,任务一代码解释,glLoadIdentity();将OpenGL中的模型变换矩阵重置为单位阵,因为在OpenGL中,变换矩阵状态会被保存并且下一次进行的变换矩阵会乘以当前的变换矩阵,即变换操作是累加的,所以要想达到预想效果必须将当前变换矩阵重置(你们可以试试去掉这句话会如何)

11、glTranslatef(1.0f,1.0f,0.0f);将模型往X方向平移1.0f,Y方向平移1.0f,Z方向不变动 glRotatef(80.0f,1.0f,0.0f,0.0f);将模型绕X轴正方向逆时针旋转80度 glScalef(0.5f,0.5f,0.5f);将模型在X坐标上缩小0.5倍, Y坐标上缩小0.5倍, Z坐标上缩小0.5倍(可以试试不同坐标放大缩小不同的比例),glTranslatef,glRotatef,glScalef实际上在OpenGL中也是转为一个4*4的变换矩阵,模型视图矩阵理解的二义性,代码从上往下阅读,理解为对局部坐标系的变换 代码从下往上阅读,理解为对几何

12、物体的变换,任务二:绘制五个茶壶,绘制五个茶壶: (1)位于(-1,1)缩小为原来0.5 倍; (2)位于(1,1)放大为原来2倍; (3)位于(-1,-1)绕X轴正方向旋转45; (4)位于(1,-1); (5)相对于第四个茶壶的坐标为(-0.5,-0.8)处。,任务二:绘制五个茶壶,从茶壶基本框架出发,添加代码 只需要在display函数中添加四个部分代码: (1)位于(-1,1)缩小为原来0.5 倍 glPushMatrix(); glTranslatef(-1.0f,1.0f,0.0f); glScalef(0.5f,0.5f,0.5f); glutSolidTeapot(0.5);

13、glPopMatrix();,关于OpenGL的矩阵堆栈,glPushMatrix();该函数将当前的模型矩阵入栈,相当于保存当前状态 glPopMatrix();该函数从栈中弹出一个模型矩阵,相当于恢复上一次的状态,(2)位于(1,1)放大为原来2倍 glPushMatrix(); glTranslatef(1.0f,1.0f,0.0f); glScalef(2.0f,2.0f,2.0f); glutSolidTeapot(0.5); glPopMatrix();,(3)位于(-1,-1)绕X轴正方向旋转45 glPushMatrix(); glTranslatef(-1.0f,-1.0f,

14、0.0f); glRotatef(45.0f,1.0f,0.0f,0.0f); glutSolidTeapot(0.5); glPopMatrix();,(4)位于(1,-1) 的茶壶 (5)第五个茶壶(相对于第四个茶壶的坐标为(-0.5,-0.8)处 ) glPushMatrix(); glTranslatef(1.0f,-1.0f,0.0f); glutSolidTeapot(0.5); glPushMatrix(); glTranslatef(-0.5f,-0.8f,0.0f); glutSolidTeapot(0.5); glPopMatrix(); glPopMatrix();,任务

15、二小结,矩阵堆栈十分好用 矩阵堆栈可以嵌套使用 编程需要一点点空间想像力,任务三:键盘控制物体(茶壶)旋转,从茶壶基本框架出发,添加代码 (1)添加全局变量 (2)添加按键消息响应函数 (3)在main函数中为GLUT窗口注册按键响应函数 (4)在display函数中添加控制物体旋转的代码,(1)添加全局变量,static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f; 这两个变量分别控制物体绕X轴和Y轴所旋转的角度 单位为度,即 0.0f -360.0f,(2)添加按键消息响应函数,void SpecialKeys(int key, int

16、x, int y) if(key = GLUT_KEY_UP) xRot-= 5.0f; if(key = GLUT_KEY_DOWN) xRot += 5.0f; if(key = GLUT_KEY_LEFT) yRot -= 5.0f; if(key = GLUT_KEY_RIGHT) yRot += 5.0f; xRot = (GLfloat)(const int)xRot % 360); yRot = (GLfloat)(const int)yRot % 360); / Refresh the Window glutPostRedisplay(); ,函数SpecialKeys代码解释(1),函数名中SpecialKeys(int key, int x, int y)的输入参数由系统负责传送 其中x,y为当前鼠标所在位置(程序中没有使用这两个值) , key为键值 GLUT_KEY_UP 对应键盘上的按键 GLUT_KEY_LEFT 对应键盘上的按键 GLUT_KEY_DOWN

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号