欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    最新图形与多媒体-三维计算机图形学(opengl简介ppt课件.ppt

    • 资源ID:24780394       资源大小:548KB        全文页数:75页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    最新图形与多媒体-三维计算机图形学(opengl简介ppt课件.ppt

    2一、一、OpenGL简介简介 什么是什么是OpenGL OpenGL的组成的组成 一个简单的绘图程序一个简单的绘图程序 OpenGL函数命名规范函数命名规范 NT环境中环境中OpenGL的命令解释流程的命令解释流程9OpenGL程序的基本结构程序的基本结构 第一部分是初始化部分:第一部分是初始化部分:主要是设置一些主要是设置一些OpenGL的状态开关,如颜色模式的状态开关,如颜色模式(RGBA或或ALPHA)的选择,是否作光照处理(若有)的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等。的话,还需设置光源的特性),深度检验,裁剪等等。 这些状态一般都用函数这些状态一般都用函数glEnable(?), glDisable(?) 来设置,来设置,?表示特定的状态。表示特定的状态。10 第二部分设置观察坐标系下的取景模式和取景框大小。第二部分设置观察坐标系下的取景模式和取景框大小。主要用到三个函数:主要用到三个函数:void glViewport(left,top,right,bottom);设置在屏幕上的窗口大小,四个参数描述屏幕窗口四设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示);个角上的坐标(以象素表示); void glOrtho(left,right,bottom,top,near,far);设置投影方式为正交投影(平行投影),其取景体积设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体是一个各面均为矩形的六面体; void gluPerspective(fovy,aspect,zNear,zFar);设置投影方式为透视投影,其取景体积是一个截头锥设置投影方式为透视投影,其取景体积是一个截头锥体,在这个体积内的物体投影到锥的顶点。体,在这个体积内的物体投影到锥的顶点。 11第三部分是第三部分是OpenGL的主要部分,使用的主要部分,使用OpenGL的库函数构造几何物体对象的数学描的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系,几何变换,述,包括点线面的位置和拓扑关系,几何变换,光照处理等等。光照处理等等。 注:移植到使用注:移植到使用MFC框架下的框架下的Windows程序中,程序中,由于由于Windows自身有一套显示方式,需要进行自身有一套显示方式,需要进行一些必要的改动以协调这两种不同显示方式。一些必要的改动以协调这两种不同显示方式。12绘图前的一些准备工作绘图前的一些准备工作 清除当前窗口的内容,以免影响绘图的效果清除当前窗口的内容,以免影响绘图的效果 void glClearColor ( red , green , blue , alpha );给定当前屏幕的背景设置颜色,给定当前屏幕的背景设置颜色,red , green , blue , alpha 为为RGBA颜色值颜色值.13 void glClear ( mask );命令标志要清除的缓冲区。可以清除的缓冲区如下表命令标志要清除的缓冲区。可以清除的缓冲区如下表所示:所示: 缓冲区 名称 颜色缓冲区 GL_COLOR_BUFFER_BIT 深度缓冲区 GL_DEPTH_BUFFER_BIT 累加缓冲区 GL_ACCUM_BUFFER_BIT 模板缓冲区 GL_STENCIL_BUFFER_BIT14可以用可以用glClearColor, glClearDepth, glClearIndex, glClearStencil, glClearAcc函数为各自对应的缓函数为各自对应的缓冲区赋值。若要同时清除多个缓冲区,使用上冲区赋值。若要同时清除多个缓冲区,使用上表中所列的表中所列的mask位或组合,在速度上要比使用位或组合,在速度上要比使用多次调用多次调用glClear函数要快得多函数要快得多。 15描述几何要素描述几何要素 按一定的顺序给出几何要素的顶点,按一定的顺序给出几何要素的顶点,glVertex命令指定一个顶点,并在生成顶点后,把当前命令指定一个顶点,并在生成顶点后,把当前颜色,纹理坐标,法线等值赋给这个顶点。颜色,纹理坐标,法线等值赋给这个顶点。 函数函数void glVertex234sifdv(coords);有时用矢量形式定义顶点,执行效率高,但是有时用矢量形式定义顶点,执行效率高,但是它只能在它只能在glBegin与与glEnd之间调用才有意义。之间调用才有意义。16 glBegin标志几何要素定义的开始,标志几何要素定义的开始,glEnd函数函数则标志结束一个几何要素的定义。则标志结束一个几何要素的定义。 函数函数 void glBegin(Glenum mode);mode 的值见下表。的值见下表。17 Mode 的值 解释GL_POINTS一系列独立的点GL_LINES每两点相连成为线段GL_POLYGON简单,凸多边形的边界GL_TRIANGLES三点相连成为一个三角形GL_QUADS四点相连成为一个四边形GL_LINE_STRIP顶点相连成为一系列线段GL_LINE_LOOP顶点相连成为一系列线段,连接最后一点与第一点GL_TRIANGLE_STRIP相连的三角形带GL_TRIANGLE_FAN相连的三角形扇形GL_QUAD_STRIP相连的四边形带18一个简单的绘图程序一个简单的绘图程序 例程例程#include #include #include #include void main(void)OpenAWindow();/创建一个窗口创建一个窗口InitOpenGL();/初始化初始化OpenGLglColor3f(1.0,1.0,1.0);/设置当前颜色设置当前颜色glBegin(GL_POLYGON);/开始绘图开始绘图glVertex2f(-0.5,-0.5);glVertex2f(-0.5,0.5);glVertex2f(0.5,0.5);glVertex2f(0.5,-0.5);glEnd();glFlush();/强制输出强制输出KeepTheWindowOnScreenForAWhile(); /使窗口在屏幕上保留一会使窗口在屏幕上保留一会19OpenGL函数命名规范函数命名规范void glVertex3fv(Glfloat *vertex); 前缀前缀 后缀后缀 前缀前缀 gl ,glu,aux-该函数属于哪个函数库该函数属于哪个函数库 后缀后缀 2,3,4-参数的维数参数的维数 b,s,l,f,d,ub,us,ui-参数的数据类型参数的数据类型 v-以数组方式传递参数以数组方式传递参数 函数名中的单词首写字母大写函数名中的单词首写字母大写20NT环境中环境中OpenGL的命令解释流程的命令解释流程OpenGL命令OpenGL DLL客户服务器OpenGL ICD加速卡DDIWin32 DDIServer DLL视频驱动应用程序不带加速卡 带加速卡应用程序OpenGL命令OpenGL DLL客户服务器Server DLLWin32 DDI视频驱动21NT环境中环境中OpenGL的命令解释流程的命令解释流程 ICDICD是可安装的客户驱动(是可安装的客户驱动(Installable Installable Client DriverClient Driver) DLLDLL是动态联接库(是动态联接库(Dynamic Link Dynamic Link LibraryLibrary) DDIDDI是设备驱动接口(是设备驱动接口(Device Driver Device Driver InterfaceInterface) 22二、二、OpenGL图元图元 创建第一个应用程序创建第一个应用程序 图元的绘制图元的绘制 图元的属性图元的属性23创建第一个应用程序创建第一个应用程序(1/8)(1/8) 初始化显示方式初始化显示方式例:例: 将显示方式置为单缓存、直接颜色方式将显示方式置为单缓存、直接颜色方式 void auxInitDisplayMode(GL_SINGLE|AUX_RGBA);void auxInitDisplayMode(Glbitfield mask); mask:GL_DOUBLE(GL_SINGLE)| AUX_RGBA(AUX_INDEX)| AUX_DEPTH |AUX_STENCIL|AUX_ACCUM24创建第一个应用程序创建第一个应用程序(2/8)(2/8) 创建窗口创建窗口初始化窗口的位置与大小初始化窗口的位置与大小 创建并显示窗口创建并显示窗口 void auxInitPosition(Glint x,GLint y,GLsizei width,GLsizei height);(x,y):窗口的原点:窗口的原点width,height:窗口的宽和高:窗口的宽和高 void auxInitWindow(GLbyte *title);title:窗口标题:窗口标题 25创建第一个应用程序创建第一个应用程序(3/8)(3/8) 初始化帧缓存(颜色缓存)初始化帧缓存(颜色缓存)指定初始颜色指定初始颜色清帧缓存清帧缓存 void glClearColor(GLclampf r,GLclampf g, GLclampf b,GLclampf a);缺省值:缺省值:(0.0,0.0,0.0,0.0) void glClear(GL_COLOR_BUFFER_BIT); 26创建第一个应用程序创建第一个应用程序(4/8)(4/8) 初始化深度缓存初始化深度缓存指定初始深度值指定初始深度值 清深度缓存清深度缓存void glClearDepth(GLclampd depth);缺省值:缺省值:0.0 void glClear(GL_DEPTH_BUFFER_BIT); 27创建第一个应用程序创建第一个应用程序(5/8)(5/8) 设置投影方式设置投影方式置投影方式为平行投影置投影方式为平行投影置投影方式为透视投影置投影方式为透视投影 void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far); void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far); 28创建第一个应用程序创建第一个应用程序(6/8)(6/8) 指定图元的颜色指定图元的颜色 绘图绘图 强制输出强制输出void glColor*(); void glFlush(void); 29创建第一个应用程序创建第一个应用程序(7/8)(7/8)例程例程2-1#include #include #include #include void KeepTheWindowOnScreenForAWhile()_sleep(2000); void main(void)auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);auxInitPosition(0,0,500,400);auxInitWindow(Create Your Own Program);glClearColor(0.0,0.0,0.0,0.0);glClearDepth(0.0);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 30创建第一个应用程序创建第一个应用程序(8/8)(8/8)glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);glColor3f(1.0,1.0,1.0);glBegin(GL_POLYGON);glVertex3f(-0.5,-0.5,0.0);glVertex3f(-0.5,0.5,0.0);glVertex3f(0.5,0.5,0.0);glVertex3f(0.5,-0.5,0.0);glEnd(); glFlush();KeepTheWindowOnScreenForAWhile(); 31图元的绘制(图元的绘制(1/21/2) 图元的种类图元的种类点、线段、多边形、矩形点、线段、多边形、矩形 图元的表示图元的表示 点:三维坐标点:三维坐标(x,y,z)齐次坐标齐次坐标(x,y,z,1) 线段:两个端点线段:两个端点 多边形:顶点序列多边形:顶点序列矩形:左下角点、右上角点矩形:左下角点、右上角点 绘制图元绘制图元 定义一个顶点定义一个顶点 void glVertex234sifdv(TYPE coords);例:例:glVertex3f(1.0,1.0,1.0);32图元的绘制(图元的绘制(2/22/2) glBegin()与与glEnd()允许在允许在glBegin()与与glEnd()之间调用的之间调用的OpenGL命令命令 void glBegin(GLenum mode);mode:GL_POINTS,GLLINES,GL_LINE_STRIP,GL_LINE_LOOP,GL_POLYGON,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,GL_QUADS,GL_QUAD_STRIPvoid glEnd(void);glVertex*();glColor*();glIndex();glNormal();glEvalCoord*();glCallList(),glCallLists();glTexCoord();glEdgeFlag();glMaterial(); 33图元的属性(图元的属性(1/51/5) 颜色颜色 点点 大小(缺省值为大小(缺省值为1) 线段线段线宽线宽 void glColor*();void glIndex();void glPointSize(GLfloat size);void glLineWidth(GLfloat width); 34图元的属性(图元的属性(2/52/5)线型:连续线(缺省值)、点画线等线型:连续线(缺省值)、点画线等 多边形多边形绘制方式:顶点、边界、填充绘制方式:顶点、边界、填充 void glEnable(GL_LINE_STIPPLE);void glLineStipple(GLint factor,GLushort pattern);例:例:patternfactor结果结果0 x00FF 10 x00FF 2 void glPolygonMode(GLenum face,GLenum mode);face:GL_FRONT_AND_BACK(缺省值)GL_FRONTGL_BACKmode:GL_POINTGL_LINEGL_FILL(缺省值) 35图元的属性(图元的属性(3/53/5) 前向面与后向面前向面与后向面 背面剔除背面剔除void glFrontFace(GLenum mode);mode:GL_CCW(缺省值)(缺省值)GL_CWvoid glCullFace(GLenum mode);mode:GL_FRONT GL_BACK(缺省值)(缺省值)GL_FRONT_AND_BACK 36图元的属性(图元的属性(4/54/5)多边形填充方式多边形填充方式 均匀填色方式均匀填色方式 位图不透明方式位图不透明方式 位图透明方式位图透明方式 象素图方式象素图方式 void glEnable(GL_POLYGON_STIPPLE);void glPolygonStipple(const Glubyte *mask);mask:位图位图 37图元的属性(图元的属性(5/55/5) 标记多边形边界标记多边形边界 多边形法向多边形法向void glEdgeFlag(GLboolean flag); void glNormal3*(TYPE nx,TYPE ny,TYPE nz);void glNormal3*v(const TYPE *v); 38三、辅助库三、辅助库 初始化一个窗口初始化一个窗口 处理输入事件处理输入事件 修改查色表修改查色表 绘制简单的三维物体绘制简单的三维物体 管理后台进程管理后台进程 运行主程序运行主程序 辅助库中定义的虚键值辅助库中定义的虚键值39为什么需要辅助库为什么需要辅助库 使得使得OpenGL具有平台无关性具有平台无关性 窗口管理窗口管理 输入事件处理输入事件处理 绘制简单的三维物体绘制简单的三维物体 后台与主进程管理后台与主进程管理40窗口管理(窗口管理(1/2) 设置窗口显示方式设置窗口显示方式void APIENTRY auxInitDisplayMode(GLenum mode);mode:(1)颜色方式:)颜色方式:AUX_RGBA(直接颜色)(直接颜色)AUX_INDEX(索引颜色)(索引颜色)(2)缓存方式:)缓存方式:AUX_SINGLE(单缓存)(单缓存)AUX_DOUBLE(双缓存)(双缓存)(3)深度缓存位数:)深度缓存位数:AUX_DEPTH(16位)位)AUX_DEPTH24(32位)位)(4)模板缓存位数:)模板缓存位数:AUX_STENCIL(4位)位) (5)Alpha缓存位数:缓存位数:AUX_ALPHA(8位)位) 同一组中只能选一个,不同组之间用同一组中只能选一个,不同组之间用“|”相或相或 41窗口管理(窗口管理(2/2) 创建窗口创建窗口 设置窗口的位置和大小设置窗口的位置和大小 GLenum APIENTRY auxInitWindow(LPCTSTR title); title:窗口的标题,为一字符串窗口的标题,为一字符串 void APIENTRY auxInitPosition(int x, int y, int w, int h);void APIENTRY auxInitPosition(int x, int y, int w, int h); x x,y y定义了窗口的起始点。定义了窗口的起始点。 w,h定义了窗口的宽和高。定义了窗口的宽和高。 42处理输入事件处理输入事件 窗口尺寸改变窗口尺寸改变 键盘响应键盘响应 鼠标响应鼠标响应 void APIENTRY auxReshapeFunc(AUXRESHAPEPROC myReshape);void APIENTRY auxReshapeFunc(AUXRESHAPEPROC myReshape);myReshape是处理窗口尺寸改变消息的函数是处理窗口尺寸改变消息的函数 void APIENTRY auxKeyFunc(int key,void APIENTRY auxKeyFunc(int key,AUXKEYPROC mykeyProc);AUXKEYPROC mykeyProc);key是键的虚键值是键的虚键值,辅助库中定义了大多数键盘上的虚键值。辅助库中定义了大多数键盘上的虚键值。mykeyProc是对应于是对应于key的处理函数,不同的的处理函数,不同的key可以有可以有不同的函数。不同的函数。 void APIENTRY auxMouseFunc(int b,int m,void APIENTRY auxMouseFunc(int b,int m,AUXMOUSEPROC AUXMOUSEPROC myMouseFunc);myMouseFunc);b是鼠标键的虚键值。是鼠标键的虚键值。 m是键的状态。是键的状态。myMouseProc是对应于是对应于b和和m的处理函数的处理函数 43修改查色表修改查色表void APIENTRY auxSetOneColor(int index,float r,float g,float b);设置设置index所指向的颜色。各个颜色分量由所指向的颜色。各个颜色分量由r,g,b给出给出 44绘制简单的三维物体(绘制简单的三维物体(1/21/2)void APIENTRY auxWireSphere(GLdouble);/绘制球(线框图)绘制球(线框图)void APIENTRY auxSolidSphere(GLdouble);/绘制球(填充图)绘制球(填充图)void APIENTRY auxWireCube(GLdouble);/绘制立方体绘制立方体void APIENTRY auxSolidCube(GLdouble);void APIENTRY auxWireBox(GLdouble, GLdouble, GLdouble); /绘制长方体绘制长方体void APIENTRY auxSolidBox(GLdouble, GLdouble, GLdouble); void APIENTRY auxWireTorus(GLdouble, GLdouble); /绘制圆环面绘制圆环面void APIENTRY auxSolidTorus(GLdouble, GLdouble); void APIENTRY auxWireCylinder(GLdouble, GLdouble);/绘制圆柱绘制圆柱void APIENTRY auxSolidCylinder(GLdouble, GLdouble);void APIENTRY auxWireCone(GLdouble, GLdouble); /绘制圆锥绘制圆锥45绘制简单的三维物体(绘制简单的三维物体(2/22/2)void APIENTRY auxSolidCone(GLdouble, GLdouble); void APIENTRY auxWireTeapot(GLdouble);/绘制茶壶绘制茶壶void APIENTRY auxSolidTeapot(GLdouble); void APIENTRY auxWireIcosahedron(GLdouble);/绘制二十面体绘制二十面体void APIENTRY auxSolidIcosahedron(GLdouble); void APIENTRY auxWireDodecahedron(GLdouble);/绘制十二面体绘制十二面体void APIENTRY auxSolidDodecahedron(GLdouble); void APIENTRY auxWireOctahedron(GLdouble); /绘制八面体绘制八面体void APIENTRY auxSolidOctahedron(GLdouble); void APIENTRY auxWireTetrahedron(GLdouble);/绘制四面体绘制四面体 void APIENTRY auxSolidTetrahedron(GLdouble);46后台与主进程管理后台与主进程管理后台程序后台程序主程序主程序void APIENTRY auxIdleFunc(AUXIDLEPROC idleProc);void APIENTRY auxIdleFunc(AUXIDLEPROC idleProc);idleProc是当系统空闲时调用的函数是当系统空闲时调用的函数void APIENTRY auxMainLoop(AUXMAINPROC displayFunc);void APIENTRY auxMainLoop(AUXMAINPROC displayFunc);diplayFunc是绘制场景的函数是绘制场景的函数47辅助库中定义的虚键值辅助库中定义的虚键值 鼠标:鼠标:AUX_LEFTBUTTON, AUX_RIGHTBUTTON, AUX_LEFTBUTTON, AUX_RIGHTBUTTON, AUX_MIDDLEBUTTONAUX_MIDDLEBUTTON控制键:控制键:AUX_SHIFTAUX_SHIFT,AUX_CONTROLAUX_CONTROL,AUX_RETURNAUX_RETURN,AUX_ESCAPEAUX_ESCAPE,AUX_SPACEAUX_SPACE,AUX_LEFTAUX_LEFT,AUX_UPAUX_UP,AUX_RIGHTAUX_RIGHT, AUX_DOWNAUX_DOWN等等一般键:一般键:AUX_AAUX_A,AUX_BAUX_B,AUX_CAUX_C等(大写字母)等(大写字母)AUX_aAUX_a,AUX_bAUX_b,AUX_cAUX_c等(小写字母)等(小写字母) AUX_0,AUX_1,AUX_2等(数字)等(数字) 48四、几何变换与投影四、几何变换与投影 坐标系坐标系 基本几何变换基本几何变换 变换的分解与合成变换的分解与合成 变换的模式变换的模式 矩阵栈及其操作矩阵栈及其操作 投影投影 视区参数的设置视区参数的设置 三维图形的变换流程三维图形的变换流程49坐标系坐标系 右手坐标系右手坐标系窗口窗口xyzo50OpenGL的变换过程的变换过程 OpenGL对图象进行变换与照相机拍摄物体的对图象进行变换与照相机拍摄物体的过程相似。过程相似。 分为以下四步:分为以下四步: 支起三角架,把照相机放在场景中,相当于支起三角架,把照相机放在场景中,相当于OpenGL的取景变换的取景变换 把要拍摄的场景固定在要拍摄的物体上,相当于把要拍摄的场景固定在要拍摄的物体上,相当于OpenGL的模型变换的模型变换 选择照相机镜头或调节焦距,相当于选择照相机镜头或调节焦距,相当于OpenGL的投的投影变换。影变换。确定照片的大小,可以放大照片的某一部分,相当确定照片的大小,可以放大照片的某一部分,相当于于OpenGL的视见区变换的视见区变换 51投影变换投影变换 就是要确定一个取景体积,其作用有两个:就是要确定一个取景体积,其作用有两个: 确定物体投影到屏幕的方式,即是透视投影还确定物体投影到屏幕的方式,即是透视投影还是正交投影。是正交投影。 确定从图象上裁剪掉哪些物体或物体的某些部确定从图象上裁剪掉哪些物体或物体的某些部分。分。 投影变换包括透视投影和正交投影(平行投影)投影变换包括透视投影和正交投影(平行投影)52透视投影透视投影 其取景体积是一个截头锥体,再这个体积内的其取景体积是一个截头锥体,再这个体积内的物体投影到锥的顶点,有物体投影到锥的顶点,有glFrustum命令定义命令定义这个截头锥体,这个取景体积可以是不对称的这个截头锥体,这个取景体积可以是不对称的void glFrustum(Gldouble left,Gldouble right,Gldouble bottom,Gldouble top, Gldouble near,Gldouble far);53透视投影的示意图透视投影的示意图 54正交投影正交投影 其取景体积是一个各面均为矩形的六面体,用其取景体积是一个各面均为矩形的六面体,用glOrtho命令创建正交平行的取景体积命令创建正交平行的取景体积void glOrtho(Gldouble left,Gldouble right,Gldouble bottom,Gldouble top, Gldouble near,Gldouble far);55正交投影的示意图正交投影的示意图 56基本几何变换基本几何变换 平移变换平移变换 放缩变换放缩变换 旋转变换旋转变换viod glTranslatefd(TYPE deltax,TYPE deltay,TYPE deltaz); void glScalefd(TYPE sx,TYPE sy,TYPE sz); void glRotatefd(TYPE angle,TYPE x,TYPE y,TYPE z); (x,y,z)o旋转正向旋转正向57变换的模式变换的模式 固定坐标系模式固定坐标系模式 活动坐标系模式活动坐标系模式58矩阵栈及其操作(矩阵栈及其操作(1/8) 三种矩阵栈三种矩阵栈 模型观察变换矩阵栈(至少模型观察变换矩阵栈(至少32个矩阵)个矩阵) 投影变换矩阵栈(至少投影变换矩阵栈(至少2个矩阵)个矩阵)纹理变换矩阵栈纹理变换矩阵栈 (至少(至少2个矩阵)个矩阵) 矩阵栈的初始状态矩阵栈的初始状态 包含一个单位矩阵包含一个单位矩阵 确定当前矩阵栈确定当前矩阵栈void glMatrixMode(GLenum mode);mode: GL_MODELVIEWGL_PROJECTIONGL_TEXTURE 59矩阵栈及其操作(矩阵栈及其操作(2/8) 清矩阵栈栈顶清矩阵栈栈顶void glLoadIdentity(void); 将栈顶矩阵替换为单位矩阵将栈顶矩阵替换为单位矩阵取消之前变换的作用取消之前变换的作用IMglLoadIdentity()60矩阵栈及其操作(矩阵栈及其操作(3/8) 压栈压栈void glPushMatrix(void);复制栈顶矩阵并压入栈复制栈顶矩阵并压入栈记住位置记住位置MMglPushMatrix()M坐标系1坐标系2坐标系1坐标系2坐标系361矩阵栈及其操作(矩阵栈及其操作(4/8) 出栈出栈void glPopMatrix(void);弹出栈顶矩阵弹出栈顶矩阵回到记住的位置回到记住的位置M1glPopMatrix()M1M2坐标系1坐标系2坐标系3坐标系1坐标系262矩阵栈及其操作(矩阵栈及其操作(5/8) 设置栈顶矩阵设置栈顶矩阵void glLoadMatrix(const TYPE *matrix); 将栈顶矩阵替换为将栈顶矩阵替换为matrix实现任意变换实现任意变换M2M1glLoadMatrix(M2)63矩阵栈及其操作(矩阵栈及其操作(6/8) 矩阵相乘矩阵相乘void glMultiMatrixfd(const TYPE *matrix);以矩阵以矩阵matrix右乘栈顶矩阵并替换栈顶矩阵右乘栈顶矩阵并替换栈顶矩阵实现任意变换实现任意变换M1*M2M1glMultiMatrix(M2)64矩阵栈及其操作(矩阵栈及其操作(7/8) 基本几何变换的作用基本几何变换的作用 平移变换平移变换 放缩变换放缩变换M*TglTranslatefd()MM*SglScalefd()M65矩阵栈及其操作(矩阵栈及其操作(8/8) 旋转变换旋转变换M*RglRotatefd()M66投影(投影(1/5) 缺省的观察坐标系缺省的观察坐标系窗口窗口x,uy,vz,no67投影(投影(2/5) 改变缺省的观察坐标系改变缺省的观察坐标系 设置任意观察坐标系设置任意观察坐标系glMatrixMode(GL_PROJECTION);glRotatef (75, 1.0, 0.0, 0.0);void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, Gldouble centerx, GLdouble centery, GLdouble centerz, Gldouble centerx, GLdouble centery, GLdouble centerz, Gldouble upx, GLdouble upy, GLdouble upz); Gldouble upx, GLdouble upy, GLdouble upz); (eyex, eyey, eyez)(eyex, eyey, eyez)为视点为视点/ /投影中心投影中心(centerx, centery, centerz)(centerx, centery, centerz)为观察参考点的位置为观察参考点的位置(upx, upy, upz)(upx, upy, upz)为观察正向为观察正向 例程例程4-468投影(投影(3/5) 平行投影参数的设置平行投影参数的设置void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far);void glOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top); 69投影(投影(4/5) 透视投影参数的设置透视投影参数的设置 void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far); leftrighttopbottomnearfar坐标原点坐标原点70投影(投影(5/5)void gluPerspective(GLdouble fory,GLdouble aspect,GLdouble near,GLdouble far); w坐标原点坐标原点haspect = w/hnearfarfovy71视区参数的设置视区参数的设置 mvoid glViewport(GLint x,GLint y,GLint width,GLint height);(x,y):视区左下角点:视区左下角点width,height:视区的宽和高:视区的宽和高 72三维图形的变换流程三维图形的变换流程模型变换观察变换投影变换窗口至视区的变换73本章习题本章习题 构造一个三维图形交互环境,用真实感三维造型显示一个三维形体,并可以用鼠标驱动(平移和旋转、放大和缩小)所显示的物体。 作业要求: 三维形体可以自选,但要在交互环境中交互输入,建议显示“计算机图形学”字形; 真实感绘制可以用OpenGL,建议用光线跟踪法绘制; 三维交互环境必须自己构造,并要实现实时交互功能; 可以由2-3人作为一个小组,共同完成。74END75 结束语结束语

    注意事项

    本文(最新图形与多媒体-三维计算机图形学(opengl简介ppt课件.ppt)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开