



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OpenGL中的几种变换OpenGL中的各种转换是通过矩阵运算实现的,具体的说,就是当发出一个转换命令时,该命令会生成一个4X4阶的转换矩阵(OpenGL中的物体坐标一律采用齐次坐标,即(x, y, z, w),故所有变换矩阵都采用4X4矩阵),当前矩阵与这个转换矩阵相乘,从而生成新的当前矩阵。例如,对于顶点坐标v ,转换命令通常在顶点坐标命令之前发出,若当前矩阵为C,转换命令构成的矩阵为M,则发出转换命令后,生成的新的当前矩阵为CM,这个矩阵再乘以顶点坐标v,从而构成新的顶点坐标CMv。上述过程说明,程序中绘制顶点前的最后一个变换命令最先作用于顶点之上。这同时也说明,OpenGL编程中,实际的变换顺序与指定的顺序是相反的。 一、视点变换void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble upx,GLdouble upy,GLdouble upz);该函数定义了视点矩阵,并用该矩阵乘以当前矩阵。eyex,eyey,eyez定义了视点的位置;centerx、centery和centerz变量指定了参考点的位置,该点通常为相机所瞄准的场景中心轴线上的点;upx、upy、upz变量指定了向上向量的方向。二、模型变换1、模型平移glTranslatefd(TYPE x,TYPE y,TYPE z);该函数用指定的x,y,z值沿着x轴、y轴、z轴平移物体(或按照相同的量值移动局部坐标系)。2、模型旋转 glRotatefd(TYPE angle,TYPE x,TYPE,y,TYPE z);该函数中第一个变量angle制定模型旋转的角度,单位为度,后三个变量表示以原点(0,0,0)到点(x,y,z)的连线为轴线逆时针旋转物体。例如,glRotatef(45.0,0.0,0.0,1.0)的结果是绕z轴旋转45度。3、模型缩放glScalefd(TYPE x,TYPE y,TYPE z);该函数可以对物体沿着x,y,z轴分别进行放大缩小。函数中的三个参数分别是x、y、z轴方向的比例变换因子(x,y,z 三个参数表示在 x, y ,z 轴放大或者缩小的比例)。缺省时都为1.0,即物体没变化。(小于1表示缩小,大于1表示放大)程序中物体Y轴比例为2.0,其余都为1.0,就是说将立方体变成长方体。三、投影变换投影变换的目的就是定义一个视景体,使得视景体外多余的部分裁剪掉,最终进入图像的只是视景体内的有关部分。投影包括透视投影(Perspective Projection)和正视投影(Orthographic Projection)两种。OpenGL透视投影函数有两个,其中函数glFrustum()的原型为:void glFrustum(GLdouble left,GLdouble Right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);它创建一个透视视景体。其操作是创建一个透视投影矩阵,并且用这个矩阵乘以当前矩阵。这个函数的参数只定义近裁剪平面的左下角点和右上角点的三维空间坐标,即(left,bottom,-near)和(right,top,-near);最后一个参数far是远裁剪平面的Z负值,其左下角点和右上角点空间坐标由函数根据透视投影原理自动生成。near和far表示离视点的远近,它们总为正值。另一函数是:void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)它是一个特殊的正射投影函数,主要用于二维图像到二维屏幕上的投影。它的near和far缺省值分别为-1.0和1.0,所有二维物体的Z坐标都为0.0。因此它的裁剪面是一个左下角点为(left,bottom)、右上角点为(right,top)的矩形。四、视口变换视口变换就是将视景体内投影的物体显示在二维的视口平面上。glViewport(GLint x,GLint y,GLsizei width, GLsizei height);这个函数定义一个视口。函数参数(x, y)是视口在屏幕窗口坐标系中的左下角点坐标,参数width和height分别是视口的宽度和高度。缺省时,参数值即(0, 0, winWidth, winHeight) 指的是屏幕窗口的实际尺寸大小。所有这些值都是以象素为单位,全为整型数。五、裁剪变换在OpenGL中,除了视景体定义的六个裁剪平面(上、下、左、右、前、后)外,用户还可自己再定义一个或多个附加裁剪平面,以去掉场景中无关的目标。附加平面裁剪函数为:1、void glClipPlane(GLenum plane,Const GLdouble *equation);函数参数equation指向一个拥有四个系数值的数组,这四个系数分别是裁剪平面Ax+By+Cz+D=0的A、B、C、D值。因此,由这四个系数就能确定一个裁剪平面。参数plane是GL_CLIP_PLANEi(i=0,1,.),指定裁剪面号。六、矩阵栈的操作1、void glLoadMatrixfd(const TYPE *m)设置当前矩阵中的元素值。函数参数*m是一个指向16个元素(m0, m1, ., m15)的指针,这16个元素就是当前矩阵M中的元素,其排列方式如下:M = | m0 m4 m8m12 | m1 m5 m9m13 | m2 m6 m10 m14 | m3 m7 m11 M15 |2、void glMultMatrixfd(const TYPE *m)用当前矩阵去乘*m所指定的矩阵,并将结果存放于*m中。当前矩阵可以是用glLoadMatrix() 指定的矩阵,也可以是其它矩阵变换函数的综合结果。OpenGL的矩阵堆栈指的就是内存中专门用来存放矩阵数据的某块特殊区域。一般说来,矩阵堆栈常用于构造具有继承性的模型,即由一些简单目标构成的复杂模型。矩阵堆栈对复杂模型运动过程中的多个变换操作之间的联系与独立十分有利。因为所有矩阵操作函数如glLoadMatrix()、glMultMatrix()、glLoadIdentity()等只处理当前矩阵或堆栈顶部矩阵,这样堆栈中下面的其它矩阵就不受影响。堆栈操作函数有以下两个:void glPush
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽省宣城市郎溪县2023-2024学年高一上学期期末考试历史题目及答案
- 幽默三国读后感550字(9篇)
- 售后服务流程标准化服务脚本
- 城市绿化养护项目管理合同
- 营销方案撰写指南
- 可爱的小仓鼠爱的作文(15篇)
- 时间变化的声音课件
- 通稿2003读后感9篇范文
- 诗歌修辞手法与意境构建:八年级古诗鉴赏教案
- 记一件令我感动的事感动作文(10篇)
- 2025年重庆出租车资格证区域考试题库区域考试
- 广州市越秀区招聘卫生健康系统事业单位事业编制人员考试真题2024
- 低氯血症护理查房
- 虫害外包服务商管理制度
- 医疗废物监督管理课件
- 全国律师会费管理办法
- 钢材应收账款管理办法
- 乙二醇加氢精制催化剂:制备工艺、性能优化与应用前景探究
- 危险源辨识、评价及控制培训
- 延缓慢性肾脏病进展临床管理指南(2025年)解读课件
- 土地管理培训课件
评论
0/150
提交评论