实验四 几何变换.ppt

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验四 几何变换

实验四 几何变换 § 模型-视图变换与投影变换 § 平移、旋转、缩放变换 在对象坐标系中,通常对象位于原点处,在OpenGL中,默认情况下摄像机也位于原点。 若想看到物体,可以通过移动对象或移动摄像机来实现 OpenGL的平移函数是: void glTranslatefd(type dx,type dy,type dz) 通过将以参数dx,dy和dz为参数的平移矩阵与当前做右乘来改变当前矩阵。type可为GLfloat或GLdouble类型,dx、dy和dz是在对象坐标系中度量的 举例: 变换的级联 旋转、缩放 void glRotatefd(type angle,type dx,type dy, type dz) 其中angle指定旋转角度(以度数为单位),参数x,y,z指定从原点到(x,y,z)的向量,作为旋转的中心轴,旋转方向是逆时针方向。 void glScalefd(type sx,type sy,type sz) x,y,z依次指定按x,y,z轴各自的比例因子缩放物体 绕任意固定点(xf,yf,zf)的旋转 § 举例:一个旋转的立方体 § 直接设置矩阵 OpenGL允许程序员直接构造一个模型-视图矩阵或投影矩阵。在OpenGL中,矩阵是按列优先顺序存放在一个包含16个元素的一维数组中。 OpenGL提供的对矩阵进行操作的函数: void glLoadMatrixfd(type *m) 将type类型的数组m加载为当前矩阵 void glMultMatrixfd(type *m) 用矩阵m右乘当前矩阵 注:自行设置矩阵的一个用途是为基本变换增加错切变换 § 基于变换的建模 OpenGL中有一些通用对象,如立方体或球体,或者程序员自己创建一些对象。 通常,对这些已有对象可以应用仿射变换来创建其他类型的对象。 一个典型的建模过程如下: 层次模型 OpenGL使用堆栈的方式对变换矩阵进行管理 每个变换就是将矩阵相乘的结果成为矩阵栈最上面的项 OpenGL定义三种矩阵栈:造型视图、投影、纹理矩阵栈 举例:一个简单机械臂 编程练习 已知某三角形的三顶点坐标为{50.0,25.0},{150.0,25.0},{100.0,100.0}。 要求: (1)创建一个长宽分别为600、600的窗口,窗口的左上角位于屏幕坐标(100,100)处。(提示:请试着修改gluOrtho2D函数参数,使得绘制的三角形尽可能居中显示) (2)绘制一个由上述顶点所描绘的三角形,实现该三角形进行下列的几何变化:首先使三角形沿着其中心的x轴,y轴方向缩小50%;然后沿着初始中心旋转90度;最后沿着y轴平移100个单位。 实验结果如下图所示: 将课件中旋转立方体的程序补充完整,运行理解程序的含义 读机械臂程序,深入理解glPushMatrix(); glPopMatrix(); 模型-视图 投影 顶点 顶点 OpenGL流水线中的变换矩阵 图元的每个顶点都将经过当前模型-视图矩阵和投影矩阵 一开始,这两个矩阵都被设置为4×4的单位矩阵 模型-视图矩阵用于相对于摄像机为物体定位 投影矩阵指定了投影及裁剪体,并将顶点映射至一个归一化的坐标系中。 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0,0.0,-1.0); 绘制四面体和立方体: glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0,0.0,-2.0); glutWireTetrahedron(); glLoadIdentity(); glTranslatef(0.0,0.0,-3.0); glutWireCube(1); 设置投影矩阵: glMatrixMode(GL_PROJECTION); glLoadIdentity (); gluPerspective(60,1.0,1.0,6.0); 只绘制立方体 只绘制四面体 注释这句的效果 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(xf,yf,zf); glRotatef(angle,dx,dy,dz); glTranslatef(-xf,-yf,-zf); 注意OpenGL中变换应用的次序,最后指定的变换将最先得到应用。 记住:在绘制任何几何对象之前,都是最后指定的变换首先得到应用 同理,可实现以任意点的缩放 例如:glRotatef(45.0f,0.0f,0.0f,1.0f);. 作用是绕z轴逆时针旋转45度 例如:glScalef(2.0f,-0.5f,1.0f); 作用是x

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档