OpenGL基础4

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

OpenGL编程基础观察上章回顾OpenGL绘图操作清空窗口基本图元的绘制使用多边形构造曲面2/38本章内容模型变换视点变换投影变换视口变换操纵矩阵堆栈3/38各种变换概述例:Cube相机类比各种变换概述各种变换的效果都是以矩阵的形式存储的两个矩阵相关的函数glMatrixMode(…);glLoadIdentity(…);5/38设置矩阵模式voidglMatrixMode(GLenummode);功能:设置当前矩阵模式参数:mode:设置矩阵模式返回值:无备注:mode可取以下值:GL_MODELVIEW//设置当前矩阵为模型视点矩阵GL_PROJECTION//设置当前矩阵为投影矩阵GL_TEXTURE//设置当前矩阵为纹理矩阵6/38单位化矩阵voidglLoadIdentity(void)功能:单位化当前矩阵参数:无返回值:无备注:一般用作清除所有变换的效果7/38内容进度模型变换视点变换投影变换视口变换操纵矩阵堆栈8/38模型变换相当于设置模型的位置和方向有三个可以进行模型变换的函数glTranslatef//平移glRotatef//旋转glScalef//缩放进行模型变换前,需要将当前矩阵设置为模型视点矩阵即,glMatrixMode(GL_MODELVIEW);9/38平移物体位置的变化10/38平移voidglTranslatef(GLfloatx,GLfloaty,GLfloatz)功能:场景平移参数:x:X轴方向平移的距离y:Y轴方向平移的距离z:Z轴方向平移的距离返回值:无备注:无11/38旋转物体姿态的变化12/38旋转voidglRotatef(GLfloatangle,GLfloatx,GLfloaty,GLfloatz)功能:场景旋转参数:angle:旋转的角度x,y,z:用于指定旋转轴返回值:无备注:绕原点(0,0,0)到(x,y,z)的直线逆时针旋转angle个角度13/38缩放物体大小的变化14/38缩放voidglScalef(GLfloatx,GLfloaty,GLfloatz)功能:场景缩放参数:x:X轴方向的缩放因子y:Y轴方向的缩放因子z:Z轴方向的缩放因子返回值:无备注:无15/38模型变换顺序注意:应该以相反的顺序指定变换矩阵16/38glTranslatef(…);glRotatef(…);glBegin(…);…………glRotatef(…);glTranslatef(…);glBegin(…);…………练习旋转的三角形和矩形(demo1)三角形绕Y轴旋转矩形绕Z轴旋转练习简单行星模拟(Planet)18/38内容进度模型变换视点变换投影变换视口变换操纵矩阵堆栈19/38视点变换相当于改变相机位置和方向进行视点变换的函数gluLookAt(…);进行视点变换前,需要将当前矩阵设置为模型视点矩阵即,glMatrixMode(GL_MODELVIEW);视点变换函数gluLookAt(GLdoubleeyex,GLdoubleeyey,GLdoubleeyez,GLdoublecenterx,GLdoublecentery,GLdoublecenterz,GLdoubleupx,GLdoubleupy,GLdoubleupz);功能:设置相机位置和方向参数eyex,eyey,eyez:相机(视点)的位置centerx,centery,centerz:相机的朝向upx,upy,upz:相机向上的向量(控制相机姿态)21/38视点变换函数返回值:无备注:若将upy传入负值,则会得到颠倒的图像修改upz的值,通常不会影响到显示效果视点变换演示程序(projection)22/38内容进度模型变换视点变换投影变换视口变换操纵矩阵堆栈23/38投影变换相当于设置相机镜头,可以指定视景体视景体:拍照时相机镜头可见的部分两种投影方式平行投影(正交投影,物体离相机的远近不会影响物体的大小)透视投影(近大远小)设置视景体的函数glOrtho(…)//平行投影gluOrtho2D(…)//平行投影glFrustum(…)//透视投影gluPerspective(…)//透视投影进行投影变换前,需要将当前矩阵设置为投影矩阵即,glMatrixMode(GL_PROJECTION);24/38平行投影函数voidglOrtho(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdoublenear,GLdoublefar);功能:创建平行投影矩阵参数:left:视景体左边界的值right:视景体右边界的值bottom:视景体下边界的值top:视景体上边界的值near:视景体近裁剪面的值far:视景体远裁剪面的值25/38平行投影函数glOrtho(…)26/38Z轴正方向平行投影函数返回值:无备注:默认情况下,投影方向平行于Z轴,视点朝向Z轴负方向视景体两端大小相同,因此,物体离相机的远近,不会影响物体的大小平行投影下的正方体:平行投影函数voidgluOrtho2D(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop);功能:创建平行投影矩阵参数:left,bottom:视景体的左下角right,top:视景体的右上角返回值:无备注:不考虑物体Z坐标的值,即物体不会因Z坐标的大小而被裁剪掉其它功能与glOrtho完全相同28/38透视投影函数voidglFrustum(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdoublenear,GLdoublefar);功能:创建透视投影矩阵(近大远小)参数:left:近裁剪面的左边界值right:近裁剪面的右边界值bottom:近裁剪面的下边界值top:近裁剪面的上边界值near:近裁剪面和相机的距离far:远裁剪面和相机的距离29/38透视投影函数glFrustum(…)30/38Z轴正方向透视投影函数返回值:无备注:不在视景体范围内的物体将被裁剪掉参数near的值不应为负数参数far的值不应为负数参数far的值应该大于参数near的值透视投影下的正方体:31/38透视投影函数voidgluPerspective(GLdoublefovy,GLdoubleaspect,GLdoublenear,GLdoublefar);功能:与glFrustum相同参数:fovy:相机的纵向可视角度aspect:相机镜头的横纵比near:近裁剪面和相机的距离far:远裁剪面和相机的距离返回值:无备注:与glFrustum相同32/38透视投影函数gluPerspective(…)33/38Z轴正方向投影变换演示工具projection工具34/38内容进度模型变换视点变换投影变换视口变换操纵矩阵堆栈35/38视口变换相当于设置照片的大小和位置,即指定了最终图像占据计算机屏幕的区域默认情况下,绘图区域为窗口的整个像素区域可以通过设置视口大小,指定更小的绘图区域36/38视口变换函数voidglViewport(GLintx,GLinty,GLsizeiwidth,GLsizeiheight);功能:设置视口大小(显示区域大小)参数:x,y:视口左上角的位置width:视口的宽度height:视口的高度返回值:无备注:width,height不能为负值37/38视口变换函数例:假设w表示窗口的宽度,h表示窗口的高度glViewport(0,0,w/2,h);表示只使用窗口的左半边用作显示区域38/38ReshapevoidglutReshapeFunc(void(*func)(intw,inth));功能:指定窗口大小改变时,调用的回调函数参数:void(*func)(intw,inth):改变窗口大小时回调的函数名返回值:无备注:通常在回调函数中设置视景体及视口的大小通常在回调函数的后面,将矩阵类型改为模型视点矩阵并将其单位化,即:glMatrixMode(GL_MODELVIEW);glLoadIdentity();39/38例:voidreshape(intw,inth){//设置视口glViewport(0,0,(GLsizei)w,(GLsizei)h);//设置视景体glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45.0,(GLfloat)w/(GLfloat)h,1.0,100.0);//设置模型视点矩阵glMatrixMode(GL_MODELVIEW);glLoadIdentity();}40/38内容进度模型变换视点变换投影变换视口变换操纵矩阵堆栈41/38操纵矩阵堆栈矩阵堆栈的操作入栈(保存当前矩阵)出栈(恢复上一次保存的矩阵)一切变换操作,都通过矩阵来完成的入栈保存当前变换效果实现函数:glPushMatrix出栈恢复上一次保存的矩阵实现函数:glPopMatrix42/38入栈voidglPushMatrix()功能:保存当前变换矩阵函数:无返回值:无备注:将当前矩阵压入栈顶如果压入矩阵过多,将导致错误43/38出栈voidglPopMatrix()功能:恢复上一次保存的矩阵函数:无返回值:无备注:将栈顶矩阵恢复成当前矩阵如果矩阵堆栈中只有一个矩阵,将导致错误44/38操纵矩阵堆栈绘制机器人手臂(robot)45/38操纵矩阵堆栈绘制机器人手臂2(robot)46/38操纵矩阵堆栈简单行星模拟2(Planet_Mat)47/38本章内容总结模型变换视点变换投影变换视口变换操纵矩阵堆栈48/38

1 / 48
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功