中国科学技术大学数学系邓建松邓建松

中国科学技术大学数学系邓建松邓建松

ID:34529701

大小:763.39 KB

页数:25页

时间:2019-03-07

中国科学技术大学数学系邓建松邓建松_第1页
中国科学技术大学数学系邓建松邓建松_第2页
中国科学技术大学数学系邓建松邓建松_第3页
中国科学技术大学数学系邓建松邓建松_第4页
中国科学技术大学数学系邓建松邓建松_第5页
资源描述:

《中国科学技术大学数学系邓建松邓建松》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、计算机图形学中国科学技术大学数学系邓建松dengjs@ustceducndengjs@ustc.edu.cn第四章之第四节OpenGL中的变换基本内容ò学习在OpenGL中如何进行变换•旋转•平移•放缩ò介绍OpenGL中的矩阵模式•模型视图•投影OpenGL中的矩阵ò在OpenGL中矩阵是状态的一部分ò有三种类型•模型视图(GL_MODELVIEW)•投影(GLPROJECTIONGL_PROJECTION)•纹理(GL_TEXTURE)(不讲)•颜色(GLCOLOR)GL_COLOR)(不讲)ò用于操作的单组函数ò选择所操作的对象•glMatrixMode(GL_MODELVIEW)

2、;•glidlMatrixMode((GL_PROJECTION));当前变换矩阵(CTM)ò从概念上说,当前变换矩阵(CTM)就是一个444x4阶的齐次坐标矩阵,它是状态的一部分,被应用到经过流水线中的所有顶点òCTM是在应用程序中定义的,并被上载到变换单元中Cpp’=Cp顶点CTM顶点CTM运算òCTM可以被改变,改变的方法是上载一个新的CTM或者右乘一个矩阵上载单位阵:C←I上载任意矩阵:C←M上载一个平移矩阵:C←T上载一个旋转矩阵:C←R上载一个放缩矩阵:C←S右乘任意矩阵:C←CM右乘一个平移矩阵:C←CT右乘一个旋转矩阵:C←CR右乘一个放缩矩阵:C←CS绕固定点的旋转从单

3、位阵开始:CÅI把固定点移到原点:CÅCT旋转:CÅCR把固定点移回到原处:CÅCT−1结果:C=TRT−1其中每个运算对应于程序中的一个函数调用注意:在程序中最后指定的运算是最先被执行的运算在OpenGL中的CTMò在OpenGL的流水线中有一个模型视图矩阵和一个投影矩阵,这两个矩阵复合在一起构成CTMò可以通过首先设置正确的矩阵模式处理每个矩阵顶点顶点模型视图投影CTM旋转、平移、放缩上载单位阵:glLoadIdentittit()y();在右边相乘:glRotatef(theta,vx,vy,vz);•theta以角度为单位,(vx,vy,vz)定义旋转轴glTranslatef(

4、dx,dy,dz);glScalef(sx,sy,sz);每个函数的参数还可以是d(double)类型示例ò固定点为(1.0,2.0,3.0),绕z轴旋转30°glMtiMd(GLMODELVIEW)lMatrixMode(GL_MODEL_VIEW);glLoadIdentity();//此命令不会把投影矩阵重设glTranslated(1.0,2.0,3.0);glRotated(30.0,0.0,0.0,1.0);gg(lTranslated(-1.0,-2.0,-3.0);ò记住在程序中最后指定的矩阵是最先被执行的操作任意矩阵ò可以上载应用程序中定义的矩阵,或者使之与CTM相乘g

5、lLoadMatrixf(m)glMultMatrixf(m)ò矩阵m是有16个元素的一维数组,其按列定义了4x4矩阵ò在glMultMatrixf(m)中m乘在已有矩阵的右边矩阵堆栈ò许多情况中需要保存变换矩阵,待稍后再用•遍历层次数据结构•当执行显示列表时避免状态改变òOpenGL为每种类型的矩阵维持一个堆栈•应用下述函数处理矩阵堆栈(也是由glMatrixMode设置矩阵类型)glPhMti()lPushMatrix()glPopMatrix()读入后台矩阵òOpenGL状态中有些信息是以矩阵形式保存的ò可以利用查询函数读入矩阵(以及其它部分的状态)glGetIntegervglG

6、etFloatvglGetBooleanvglGetDoublevò例如,对于CTM:doublem[16];glGetDoublev(GLMODELVIEWMATRIX,m);glGetDoublev(GL_MODELVIEW_MATRIX,m);变换的应用ò例如:应用空闲函数旋转立方体,鼠标函数改变旋转的方向ò从一个画立方体的程序开始(cube.c)•立方体中心在原点•各方向与坐标轴平行•下一章讨论场景建模main()intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE

7、GLU

8、T_RGB

9、GLUT_DEPTH);gg(lutInitWindowSize(500,,500));;glutCreateWindow("colorcube");glutReshapeFunc(myReshape);glutDisplayFunc(display);glutIdleFunc(spinCube);glutMouseFunc(mouse);glEnable(GL_DEPTH_TEST);glutMainLoop();}空

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。