维图形程序设计.ppt_第1页
维图形程序设计.ppt_第2页
维图形程序设计.ppt_第3页
维图形程序设计.ppt_第4页
维图形程序设计.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

三维图形程序设计,1,三维图形程序设计3,Face,三维图形程序设计,2,Chap3 学习如何帮助OpenGL观察,Chap2,三维图形程序设计,3,Simple1.c2,三维图形绘制的最终目标在于将人们在三维空间中思考并创建的三维模型转换 为二维图形。在OpenGL中,有三种操作将模型的三维坐标转换为屏幕上的像 素位置。,变换:模型变换 视点变换 投影变换,裁剪:裁剪掉位于裁剪面另一面的模型(或模型的局部),视口变换,不可否认的是,帮助OpenGL来观察场景的工作与相机工作有类似之处,所以 我们应学习将用相机照相和操作OpenGL对应起来。,三维图形程序设计,4,Temp,三维图形程序设计,5,Temp,在理解顶点变换过程时,让我们回顾一下在线性代数课中所学到的矩阵运算 v=Mv,三维图形程序设计,6,Temp,引例:看看如何绘制一个不那么规整的立方体三维模型,三维图形程序设计,7,Temp,认识几个对日后工作有帮助的函数,void glMatrixMode (mode),mode,GL_MODELVIEW,GL_PROJECTION,GL_TEXTURE,void glLoadIdentity (viod),在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,我们 称这种矩阵为单位矩阵它是个方阵,除左上角到右下角的对角线(称为 主对角线)上的元素均为1以外全都为0。对于单位矩阵,有AE=EA=A,三维图形程序设计,8,Temp,认识几个对日后工作有帮助的函数,void glLoadMatrixfd (*m) C=M,void glMultMatrixfd (*m) C=CM,提醒:其默认处理模式 数组m44中的mij位于OpenGL 变换矩阵的第i列,第j行,这样的思考方式估计会让人沮丧,但没关系,我们可以用m16或下面2个函数来替代,void glLoadTransposeMatrix fd (*m) C=M,void glMultTransposeMatrix fd (*m) C=CM,三维图形程序设计,9,Temp,进入视点和模型变换的话题,从这个图引出的有趣问题,看教材上的一个模型变换的例子,I IN INM INML INMLv NMLv N(M(Lv),三维图形程序设计,10,Temp,从不同的角度来思考同一个问题立方体要停留在x轴上的问题,1、从全局固定坐标的角度,2、从移动局部坐标的角度,结论: 第1步:平移 第2步:旋转 以移动局部坐标系的方式来理解与常规思路一致,三维图形程序设计,11,Temp,模型变换函数集,void glTranslate f d (x , y , z),void glRotate f d (angle , x , y , z),三维图形程序设计,12,Temp,模型变换函数集,void glScale f d (x , y , z),三维图形程序设计,13,Temp,来测试一下函数的效力,思考如何实现下图的变换,三维图形程序设计,14,Temp,学习视点变换,方法: 1、使用模型变换函数集来进行视点变换,这需要反向思考即可 2、使用实用库函数gluLookAt ( ) gluLookAt ( eyex,eyey,eyez,centerx,centery,centerz,upx,upy,upz) 3、在某些情形下,会要求用户去自定义视点的变换函数,这种情形很少见, 因为gluLookAt函数确实很有用,三维图形程序设计,15,Temp,学习投影变换,投影变换意味着: 1、投影体决定了物体将被如何投影到屏幕上(2种不同的投影方式) 2、决定哪些模型或模型的哪些部分将被裁剪掉,三维图形程序设计,16,Temp,透视投影的函数 1、glFrustum (letf, right, bottom, top, near, far) 该函数创建一个透视投影矩阵,并将其与当前的矩阵相乘,其中参数定义了视景体:(left,bottom,-near) 和(right,top,-near)定义了近裁剪面的左下角和右上角坐标,near和far分别是近裁剪面和远裁剪面距离视点的距离,必须大于0。,透视投影,三维图形程序设计,17,Temp,透视投影的函数 1、gluPrespective (fovy, aspect, near, far),三维图形程序设计,18,Temp,正交投影的函数 1、glOrtho (left, right, bottom, top, near, far),正交投影,特殊2D格式: glOrtho2D (letf, right, bottom, top),三维图形程序设计,19,Temp,视口是什么?,讨论视口,视口函数: glViewport (x, y, width, height),三维图形程序设计,20,Temp,为什么辛苦创建的窗口里什么也没有?,三维图形程序设计,21,Temp,纠正不那么合适的视角大小 角度的一半的正切等于物体大小的一半除以物体距离视点的距离,三维图形程序设计,22,Temp,关于矩阵堆栈的话题 1、为什么有矩阵堆栈的概念 为层次模型服务,center,模型视点矩阵,投影矩阵,三维图形程序设计,23,Temp,与矩阵堆栈相关的函数 glPushMatrix ( void ) glPopMatrix (void),三维图形程序设计,24,Temp,返回之前所提到的小车绘制 这里假设是已经编写好了绘制车、车轮和螺钉的函数,三维图形程序设计,25,Temp,请思考: 目标:绘制一个简单的太阳系模型,只含太阳和一颗行星,行星每天自传一周,每年绕 太阳公转一周;太阳就假定静止不同。,提示:行星有2个旋转要处理,一个是公转角度,另一个是自转角度,请思考代码如何编写,三维图形程序设计,26,Temp,来看看答案: 核心代码部分,三维图形程序设计,27,Temp,关于附件裁剪面: 1、为什么要引入附加裁剪面的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论