第四章_opengl图形变换(二).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章_opengl图形变换(二)

第章 4.6 矩阵操作函数 OpenGL中的变换,包括视点变换、模型变换、投影变换、视口变换等等都离不开矩阵,它们都是建立在矩阵运算基础上的,OpenGL提供了对矩阵的通用操作函数,这些函数在图形变换中起到了非常重要的作用。 1、指定变换矩阵的类型 void glMatrixMode( GLenum mode ); 其中,参数mode有三种取值: (1)GL_MODELVIEW 模型视点变换矩阵 (2)GL_PROJECTION 投影变换矩阵 (3)GL_TEXTURE 纹理矩阵 本函数指定以上三种变换矩阵中的一种作为当前变换矩阵。 2、初始化变换矩阵 void glLoadIdentity( void); 把当前的变换矩阵设置为单位矩阵,即把当前矩阵变成:。 3、用定制的矩阵替换当前变换矩阵中的内容 void glLoadMatrixd( const GLdouble *m ); void glLoadMatrixf( const GLfloat *m ); 参数m指向一个定制好的矩阵。通常这个矩阵由程序员来设计和定制。m是一个由16个元素组成的向量( m1 ,m2 ,m3 ,m4 ,m5 ,m6 ,m7 ,m8,m9 ,m10 ,m11 , m12 ,m13 ,m14 ,m15, m16 ), 这16个元素构成的矩阵的结构是 显然,16个元素中按顺序每4个元素构成矩阵的一列。编程实现时,可声明一个具有16个元素的一维数组,如double A[16], 数组A中元素的使用范围是A[0]~ A[15]。 一个特例是,当把这个矩阵设计成单位矩阵,并用glLoadMatrix函数装入时,就相当于调用了glLoadIdentity函数。 4、用定制的矩阵右乘当前变换矩阵 void glMultMatrixd( const GLdouble *m ); void glMultMatrixf( const GLfloat *m ); 设当前矩阵为C,执行glMultMatrix后,新的矩阵为:C×m ,并用这个新的矩阵替换当前变换矩阵。 例1 绘制一个点,并对点做三次变换: glMatrixMode ( GL_MODELVIEW ) ; glLoadIdentity ( ) ; glMultMatrixf ( N ) ; glMultMatrixf ( M ) ; glMultMatrixf ( L ) ; glBegin ( GL_POINTS); glVertex3f ( v ); glEnd ( ) ; 上例中,设当前变换矩阵为E (因为执行了glLoadIdentity ( ),所以当前变换矩阵为单位矩阵),N、M、L是三个定制好的4×4变换矩阵,则变换后的顶点为 E×N×M×L×v = N×M×L×v = N×(M×(L×v)) 从上式可以看出,先对顶点v做变换L, 然后再对变换后的v做变换M,最后对改变后的顶点做变换N。变换的指定顺序和执行顺序是相反的!所以理解一个对象的变换过程要从最后一个变换开始向前直到第一个变换! 4.7 投影变换 OpenGL中提供了两种投影方式,一种是投影,一种是透视投影。不管是调用哪种投影函数,为了避免的变换,其前面必须加上以下两句:   glMtrixMode(GL_PROJECTION);   glLoadIdentity();投影变换定义一个视景体,视景体外多余的部分裁剪掉,最终图像只是视景体内的有关部分。视景体是一个长方体,如图-7所示。最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小。 图-7 平行投影模型图 平行视景体的定义函数是: void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,        GLdouble near,GLdouble far); 其中,Left为左裁剪面坐标, right为右裁剪面坐标,bottom为下裁剪面坐标, top为上左裁剪面坐标,near为到近裁剪面的距离, far为到远裁剪面的距离。若裁剪面在视点的后面,则距离值为负数。 创建一个平行视景体。其中近裁剪平面是一个矩形,矩形左下角点三维空间坐标是(left,bottom,-near),右上角点是(right,top,-near);远裁剪平面也是一个矩形,左下角点空间坐标是(left,bottom,-far),右上角点是(right,top,-far)。所有的near和far值同时为正或同时为负。如果没有其他变换,平

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档