




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二讲:顶点线性变换时间: 2010-05-11 12:56点击: 2157次上周,第一堂课深入了解OpenGL发布了:绘制基本图元。今天,CocoaChina成员zenny_chen带来了关于OpenGL知识的第二次讲座。/bbs/read.php?邮报:关于tid-20395.html的这一章可能会很无聊。上周,第一堂课深入了解OpenGL发布了:绘制基本图元。今天,CocoaChina成员“zenny_chen”带来了关于OpenGL知识的第二次讲座。邮政地址/bbs/read.php?tid-20395.html这一章可能很无聊,但示例代码会很有趣。令人厌烦的是,将会有大量的线性代数知识与之混合。在本章中,我们将绘制3D图形。我们将介绍顶点变换的过程,法向量和绘制顺序。这里我们将首先介绍将三维空间中的顶点映射到二维屏幕坐标的步骤。请记住:对象顶点坐标(顶点)=模型视图转换-视觉坐标=投影转换-裁剪坐标=透视分区-标准化设备坐标=视口转换-窗口坐标在上图中,=表示某种转换。-表示获得了某个坐标。接下来,我们将按照这个顺序依次介绍每个变化。这里我们将主要介绍模型视图转换和投影转换。首先,介绍了物体顶点坐标在OpenGL中的表示。在OpenGL中,一个对象的顶点坐标由一个四维行向量表示,表示为:(x,y,z,w)。其中x、y和z分别对应于x、y和z轴,w用于辅助线性变换。我们会理所当然地认为三维坐标系中只有三个分量就足够了。W有什么用?首先,假设在OpenGL中,线性变换矩阵的变换是通过矩阵乘法来完成的,没有加减运算,所以所有的线性变换都是通过矩阵乘法来完成的。举个例子,如果我们想沿着x轴向右移动一个顶点:(1,1,1) 5个单位,那么如果我们想使用一个三维变换矩阵,那么它就是:M=6,0,0;0,1,0;0,0,1.然后v=v * M=(6,1,1)。然而,在许多情况下,使用三维空间进行变换会使计算非常复杂,甚至难以变换。因此,四维空间的引入使得变换更加灵活。例如,顶点v=(1,1,1,1)沿X轴向右平移5个单位,然后变换矩阵M=1,0,0,0;0,1,0,0;0,0,1,0;5,0,0,1.我们将看到4x4的变换矩阵比3x3的简单得多。因为对于翻译来说,本身就是加法,而在三维空间中需要乘法,因此增加了计算量。在OpenGL中,计算时对象的顶点坐标总是以行向量的形式表示,计算时总是在最左边。下面将正式介绍各种观点的变化。邮政编码优先:1.-(无效)准备OpenGL2.3.glShadeModel(GL _ SMORT);4.5.glClearColor(0.0,0.0,0.0,0.0);6.glViewport(0,0,320,320);7.8.glMatrixMode(GL _ PROJECTION);9.glloadIdentity();10.glOrtho(-1.0,1.0,-1.0,1.0,1.0,5.0);11.12.glMatrixMode(GL _ MODELVIEW);13.glloadIdentity();14.glTranslatef(0.3f,0.2f,0.0 f);15.glRotatef(-30.0f,0.0f,0.0f,1.0 f);16.17.特定常规武器公约;18.格兰布尔(总帐_CULL_FACE |总帐_深度_测试);19.20.21.-(空)DrawRect :(nRect)DrawRect 22.23.静态结构24.25.GLubyte颜色4;26.GLfloat顶点3;27.28. VerteInFolist=29. 255,0,0,255,-0.5f,0.5f,-1.0f ,30. 0,255,0,255,-0.5f,-0.5f,-1.0f ,31. 0,0,255,255,0.5f,0.5f,-2.0f ,32. 255,0,255,255,0.5f,-0.5f,-2.0f 33.;34.35./在此绘制代码。36.清除(总帐_ COLOR _ BUFFER _ BIT);37.38.闪烁的顶点数(GL_C4UB_V3F,0,顶点数);39.40.GlculFace(Gl _ BACK);41.gldrawArray(GL _三角形_条带,0,4);42.43.glFlush();44.下面描述了视图模型的转换。视图模型转换是平移和旋转三维对象的顶点。我们可以这样理解它,我们固定相机镜头,观察物体的运动如下。在上述代码的第12行,glMatrixMode(GL _ MODELVIEW);它用于将当前矩阵转换的操作应用于视图模型转换堆栈。glloadIdentity();函数是将当前矩阵作为单位矩阵,即:1,0,0,0;0,1,0,0;0,0,1,0;0,0,0,1.实际效果是:C=I;其中,C表示该矩阵模式的当前矩阵,I表示单位矩阵。glTranslatef(0.3f,0.2f,0.0 f);是翻译转换,功能原型是:void glTranslated(GLdouble x,GLdouble y,GLdouble z);void glTranslatef(GLfloat x,GLfloat y,GL float z);其中x表示沿x轴平移的单位数;y表示沿y轴移动了多少位;z代表沿z轴平移的单位数。然而,它对应的转换矩阵是:1,0,0,0;0,1,0,0;0,0,1,0;x,y,z,1然后进行GLTRANSLATE (0.3F,0.2F,0.0F);实际效果是:c =t * c=t * i。因为我们刚刚调用了glLoadIdentity,所以调用此函数时的当前矩阵是I以下GLROTATEF (-30.0F,0.0F,0.0F,1.0F);要绘制的对象的每个顶点的坐标绕z轴顺时针旋转30度。glRotatef的原型如下:空隙glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z);空隙glRotatef(GLfloat角度,GLfloat x,GLfloat y,GL float z);其中角度指角度系统的角度;x、y和z代表围绕由x、y和z组成的向量的旋转。如果角度大于0,逆时针旋转;如果角度小于0,顺时针旋转,等于0。由于glRotate对应的转换矩阵的复杂性,您可以在OpenGL官方网站上查阅手册。如果旋转变换矩阵表示为R,那么这里调用R的效果实际上是:c =r * c。然后将以上所有内容串在一起:C=R * (T * I)。如果顶点只是由视图模型转换,那么对于对象的一个顶点,转换后的顶点V u=V *(R *(T * I)。在这种情况下,我们首先围绕z轴旋转物体,然后平移它。但是,在调整旋转功能之前,必须调整平移功能。在介绍投影变换之前,让我们先介绍矩阵运算的几个函数,首先是glLoadMatrix,然后给出函数的原型:void glLoadMatrixd(常量GLdouble * m);/只能与OpenGL一起使用void glLoadMatrixf(常量GLfloat * m);void glLoadMatrixx(常量GLFixed * m);/只能与OpenGL ES一起使用该函数表示在当前变换矩阵模式下用矩阵M替换当前变换矩阵。例如,glLoadIdentity可以用以下代码替换:glLoadMatrixf(常量GLfloat)1.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f,0.0f,0.0f,0.0f,1.0f );然后,再次引入glMultMatrix函数。请参考功能的原型:void glMultMatrixd(常量GLdouble * m);/仅限OpenGLvoid glMultMatrixf(常量GlFloat * m);void glMultMatrixx(常量GLFixed * m);/仅OpenGL ES这个函数非常简单地说,矩阵M乘以当前矩阵,然后结果返回给当前矩阵。也就是说,c =m * c。我们可以用以下代码替换glTranslatef:glMultMatrixf(常量GLfloat)1.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f,0.3f、0.2f、0.0f、1.0f );用三楼的第14行代替上面的代码,效果不会改变。投影变换描述如下。投影变换就像为相机选择镜头。我们可以认为这种转变的目的是确定视野(或视觉体)。并确定哪些物体在视野范围内以及它们能被看到多远。投影变换主要有两种,一种是透视投影。这种投射效果就像玩第一人称游戏或第一人称赛车游戏。如果你向前看,它会产生透视效果,远处的物体看起来很小,附近的物体看起来很大。还有一种投影是正交投影(正投影)。这种投影是将顶点以平行于视野的角度垂直地映射到屏幕上。物体不管离你多远,其大小都是一样的。透视投影对应的函数为:Gl锥截头体,函数原型如下:空的锥截头体(GLdouble left,向右转,双层底,GLdouble top,GLdouble近值,GLdouble Farval);/OpenGL空GLfloat(GLfloat左,GLfloat右,GLfloat底,GLfloat顶,GLFloat近,GLFloat远);/OpenGl ES void GLCoducerum(GLFixed left,GLfixed right,GLfixed bottom,GLfixed top,GLfixed near,GLFixed far);/OpenGL ES其中向左表示x轴坐标最左端的值对吧表示x坐标最右端的值底部表示y轴坐标最下端的值顶部表示y轴最上端的值附近表示与摄像机或你的眼镜最近的距离很远表示摄像机或离你的眼镜最远的距离附近。和远的都大于0方有效。而正交投影的定义与透视投影的类似,下面给出函数原型:void glOrtho(GLdouble
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省烟台市蓬莱区2024-2025学年(五四学制)八年级下学期期末考试语文试卷(含答案)
- 人教版高考历史一轮复习讲义-中古时期的欧洲(含解析)
- 川庆钻探招聘考试题库及答案
- 2025重庆市綦江区赶水镇人民政府招聘公益性岗位人员3人备考练习试题及答案解析
- 第4课 欧洲文化的形成 课件 选择性必修3 文化交流与传播
- 苏州新质生产力研究院
- 2025【各行各业合同协议模板】【各行各业合同协议模板】中国工商银行企业升级改造贷款合同
- 2025河北省公安厅招聘警务辅助岗位劳务派遣人员450人考试参考题库附答案解析
- 2025广西玉林市公安局玉州分局第一次公开招聘辅警15人笔试备考题库及答案解析
- 2025版企业合同管理规范:金蝶软件助力合同管理升级
- 《矿图》教学课件
- 《中华传统文化教育》课件(第一章-思想文化)
- (高清版)DB1301∕T 345-2020 优 质冬小麦石农952栽培技术规程
- 餐饮技术入干股协议书
- 即时检验在急重症的应用管理专家共识(2024)解读
- 教科版五年级上册科学教学计划附进度表
- 红色国潮风汉宫春晓图宣传介绍教育课件
- 老年患者体位护理
- 2025新译林版英语八上单词默写表(先鸟版)
- 2025年执业医师考试临床技能试题及答案
- 洽谈互赔协议书
评论
0/150
提交评论