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

    (精品)openGL讲义.ppt

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

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

    (精品)openGL讲义.ppt

    图形与多媒体图形与多媒体第六章第六章三维计算机图形学三维计算机图形学(四四)OpenGL简介简介汪国平汪国平2000年秋季学期研究生课程1一、一、OpenGL简介简介什么是什么是OpenGLOpenGL的组成的组成一个简单的绘图程序一个简单的绘图程序OpenGL函数命名规范函数命名规范NT环境中环境中OpenGL的命令解释流程的命令解释流程2什么是什么是OpenGL是一个功能强大的图形库,用户可以很方便地是一个功能强大的图形库,用户可以很方便地开发所需要地有多种特殊视觉(如光照,纹理,开发所需要地有多种特殊视觉(如光照,纹理,透明,阴影)的三维图形。透明,阴影)的三维图形。与软硬件平台无关的三维图形软件包,可运行与软硬件平台无关的三维图形软件包,可运行于多种窗口系统之上于多种窗口系统之上包含图元生成、投影、光照、光栅化等图形显包含图元生成、投影、光照、光栅化等图形显示过程所需的功能示过程所需的功能3发展历史发展历史前身是由前身是由SGI公司为其图形工作站开发的公司为其图形工作站开发的IRISGL,是是一个工业标准的三维图形软件接口。一个工业标准的三维图形软件接口。向其他平台移植时,开发了向其他平台移植时,开发了OpenGL,有有GL的功能,而且是开放的,使用于多种硬件平台及的功能,而且是开放的,使用于多种硬件平台及操作系统,操作系统,用户可以创建出接近光线跟踪的高质量静止或动画的用户可以创建出接近光线跟踪的高质量静止或动画的三维彩色图象,而且是要比光线跟踪算法快一个数量三维彩色图象,而且是要比光线跟踪算法快一个数量级。级。4OpenGL的组成的组成OpenGL库库包括包括115个基本函数个基本函数函数以函数以gl开头开头例:例:glColor3f(),glTranslate3f().完成图元的定义、几何变换、投影等功能完成图元的定义、几何变换、投影等功能5OpenGL的组成的组成OpenGL实用库实用库实用函数实用函数43个个函数以函数以glu开头开头例:例:gluPerspective();完成更高层的图形处理如曲线曲面的生成、完成更高层的图形处理如曲线曲面的生成、图象操作等图象操作等OpenGL辅助库辅助库包括函数包括函数31个个函数以函数以aux开头开头例:例:auxInitWindow();主要用于窗口管理主要用于窗口管理6主要特点主要特点OpenGL可以在网络上工作,即客户机可以在网络上工作,即客户机/服务器型,显服务器型,显示图形的计算机(客户机)可以不是运行图形程序的示图形的计算机(客户机)可以不是运行图形程序的计算机(服务器),客户机与服务器可以是不同类型计算机(服务器),客户机与服务器可以是不同类型的计算机,只要两者服从相同的协议。的计算机,只要两者服从相同的协议。OpenGL是与硬件无关的软件接口,可以在多种硬件平是与硬件无关的软件接口,可以在多种硬件平台上运行台上运行,使得使得OpenGL的应用程序有较好的移植性。的应用程序有较好的移植性。7OpenGL的工作顺序的工作顺序构造几何要素(点,线,多边形,图象,位图),创构造几何要素(点,线,多边形,图象,位图),创建对象的数学描述。建对象的数学描述。在三维空间上放置对象,选择有利的场景观察点。在三维空间上放置对象,选择有利的场景观察点。计算对象的颜色,这些颜色可能直接定义,或由光照计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间接给出。条件及纹理间接给出。光栅化,把对象的数学描述和颜色信息转换到屏幕的光栅化,把对象的数学描述和颜色信息转换到屏幕的象素。另外,也可能执行消隐,以及对象素的操作。象素。另外,也可能执行消隐,以及对象素的操作。8OpenGL程序的基本结构程序的基本结构第一部分是初始化部分:第一部分是初始化部分:主要是设置一些主要是设置一些OpenGL的状态开关,如颜色模式的状态开关,如颜色模式(RGBA或或ALPHA)的选择,是否作光照处理(若有的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等。的话,还需设置光源的特性),深度检验,裁剪等等。这些状态一般都用函数这些状态一般都用函数glEnable(?),glDisable(?)来设置,来设置,?表示特定的状态。表示特定的状态。9第二部分设置观察坐标系下的取景模式和取景框大小。第二部分设置观察坐标系下的取景模式和取景框大小。主要用到三个函数:主要用到三个函数:voidglViewport(left,top,right,bottom);设置在屏幕上的窗口大小,四个参数描述屏幕窗口四设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示);个角上的坐标(以象素表示);voidglOrtho(left,right,bottom,top,near,far);设置投影方式为正交投影(平行投影),其取景体积设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体是一个各面均为矩形的六面体;voidgluPerspective(fovy,aspect,zNear,zFar);设置投影方式为透视投影,其取景体积是一个截头锥设置投影方式为透视投影,其取景体积是一个截头锥体,在这个体积内的物体投影到锥的顶点。体,在这个体积内的物体投影到锥的顶点。10第三部分是第三部分是OpenGL的主要部分,使用的主要部分,使用OpenGL的库函数构造几何物体对象的数学描的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系,几何变换,述,包括点线面的位置和拓扑关系,几何变换,光照处理等等。光照处理等等。注:移植到使用注:移植到使用MFC框架下的框架下的Windows程序中,程序中,由于由于Windows自身有一套显示方式,需要进行自身有一套显示方式,需要进行一些必要的改动以协调这两种不同显示方式。一些必要的改动以协调这两种不同显示方式。11绘图前的一些准备工作绘图前的一些准备工作清除当前窗口的内容,以免影响绘图的效果清除当前窗口的内容,以免影响绘图的效果voidglClearColor(red,green,blue,alpha);给定当前屏幕的背景设置颜色,给定当前屏幕的背景设置颜色,red,green,blue,alpha为为RGBA颜色值颜色值.12voidglClear(mask);命令标志要清除的缓冲区。可以清除的缓冲区如下表命令标志要清除的缓冲区。可以清除的缓冲区如下表所示:所示:缓冲区名称颜色缓冲区GL_COLOR_BUFFER_BIT深度缓冲区GL_DEPTH_BUFFER_BIT累加缓冲区GL_ACCUM_BUFFER_BIT模板缓冲区GL_STENCIL_BUFFER_BIT13可以用可以用glClearColor,glClearDepth,glClearIndex,glClearStencil,glClearAcc函数为各自对应的缓函数为各自对应的缓冲区赋值。若要同时清除多个缓冲区,使用上冲区赋值。若要同时清除多个缓冲区,使用上表中所列的表中所列的mask位或组合,在速度上要比使用位或组合,在速度上要比使用多次调用多次调用glClear函数要快得多函数要快得多。14描述几何要素描述几何要素按一定的顺序给出几何要素的顶点,按一定的顺序给出几何要素的顶点,glVertex命命令指定一个顶点,并在生成顶点后,把当前颜令指定一个顶点,并在生成顶点后,把当前颜色,纹理坐标,法线等值赋给这个顶点。色,纹理坐标,法线等值赋给这个顶点。函数函数voidglVertex234sifdv(coords);有时用矢量形式定义顶点,执行效率高,但是有时用矢量形式定义顶点,执行效率高,但是它只能在它只能在glBegin与与glEnd之间调用才有意义。之间调用才有意义。15glBegin标志几何要素定义的开始,标志几何要素定义的开始,glEnd函数函数则标志结束一个几何要素的定义。则标志结束一个几何要素的定义。函数函数voidglBegin(Glenummode);mode的值见下表。的值见下表。16Mode的值解释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相连的四边形带17一个简单的绘图程序一个简单的绘图程序例程例程#include#include#include#includevoidmain(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();/使窗口在屏幕上保留一会使窗口在屏幕上保留一会18OpenGL函数命名规范函数命名规范voidglVertex3fv(Glfloat*vertex);前缀前缀后缀后缀前缀前缀gl,glu,aux-该函数属于哪个函数库该函数属于哪个函数库后缀后缀2,3,4-参数的维数参数的维数b,s,l,f,d,ub,us,ui-参数的数据类型参数的数据类型v-以数组方式传递参数以数组方式传递参数函数名中的单词首写字母大写函数名中的单词首写字母大写19NT环境中环境中OpenGL的命令解释流程的命令解释流程OpenGL命令OpenGLDLL客户服务器OpenGLICD加速卡DDIWin32DDIServerDLL视频驱动应用程序不带加速卡 带加速卡应用程序OpenGL命令OpenGLDLL客户服务器ServerDLLWin32DDI视频驱动20NT环境中环境中OpenGL的命令解释流程的命令解释流程ICDICD是是可可安安装装的的客客户户驱驱动动(Installable Installable Client DriverClient Driver)DLLDLL是是 动动 态态 联联 接接 库库(Dynamic Dynamic Link Link LibraryLibrary)DDIDDI是设备驱动接口(是设备驱动接口(Device Driver Device Driver InterfaceInterface)21二、二、OpenGL图元图元创建第一个应用程序创建第一个应用程序图元的绘制图元的绘制图元的属性图元的属性22创建第一个应用程序创建第一个应用程序(1/8)(1/8)初始化显示方式初始化显示方式例:例:将显示方式置为单缓存、直接颜色方式将显示方式置为单缓存、直接颜色方式voidauxInitDisplayMode(GL_SINGLE|AUX_RGBA);voidauxInitDisplayMode(Glbitfieldmask);mask:GL_DOUBLE(GL_SINGLE)|AUX_RGBA(AUX_INDEX)|AUX_DEPTH|AUX_STENCIL|AUX_ACCUM23创建第一个应用程序创建第一个应用程序(2/8)(2/8)创建窗口创建窗口初始化窗口的位置与大小初始化窗口的位置与大小创建并显示窗口创建并显示窗口voidauxInitPosition(Glintx,GLinty,GLsizeiwidth,GLsizeiheight);(x,y):窗口的原点窗口的原点width,height:窗口的宽和高窗口的宽和高voidauxInitWindow(GLbyte*title);title:窗口标题窗口标题24创建第一个应用程序创建第一个应用程序(3/8)(3/8)初始化帧缓存(颜色缓存)初始化帧缓存(颜色缓存)指定初始颜色指定初始颜色清帧缓存清帧缓存voidglClearColor(GLclampfr,GLclampfg,GLclampfb,GLclampfa);缺省值:缺省值:(0.0,0.0,0.0,0.0)voidglClear(GL_COLOR_BUFFER_BIT);25创建第一个应用程序创建第一个应用程序(4/8)(4/8)初始化深度缓存初始化深度缓存指定初始深度值指定初始深度值清深度缓存清深度缓存voidglClearDepth(GLclampddepth);缺省值:缺省值:0.0voidglClear(GL_DEPTH_BUFFER_BIT);26创建第一个应用程序创建第一个应用程序(5/8)(5/8)设置投影方式设置投影方式置投影方式为平行投影置投影方式为平行投影置投影方式为透视投影置投影方式为透视投影voidglOrtho(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,Gldoublenear,GLdoublefar);voidglFrustum(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,Gldoublenear,GLdoublefar);27创建第一个应用程序创建第一个应用程序(6/8)(6/8)指定图元的颜色指定图元的颜色绘图绘图强制输出强制输出voidglColor*();voidglFlush(void);28创建第一个应用程序创建第一个应用程序(7/8)(7/8)例程例程2-1#include#include#include#includevoidKeepTheWindowOnScreenForAWhile()_sleep(2000);voidmain(void)auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);auxInitPosition(0,0,500,400);auxInitWindow(CreateYourOwnProgram);glClearColor(0.0,0.0,0.0,0.0);glClearDepth(0.0);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);29创建第一个应用程序创建第一个应用程序(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();30图元的绘制(图元的绘制(1/21/2)图元的种类图元的种类点、线段、多边形、矩形点、线段、多边形、矩形图元的表示图元的表示点:三维坐标点:三维坐标(x,y,z)齐次坐标齐次坐标(x,y,z,1)线段:两个端点线段:两个端点多边形:顶点序列多边形:顶点序列矩形:左下角点、右上角点矩形:左下角点、右上角点绘制图元绘制图元定义一个顶点定义一个顶点voidglVertex234sifdv(TYPEcoords);例:例:glVertex3f(1.0,1.0,1.0);31图元的绘制(图元的绘制(2/22/2)glBegin()与与glEnd()允许在允许在glBegin()与与glEnd()之间调用的之间调用的OpenGL命令命令voidglBegin(GLenummode);mode:GL_POINTS,GLLINES,GL_LINE_STRIP,GL_LINE_LOOP,GL_POLYGON,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,GL_QUADS,GL_QUAD_STRIPvoidglEnd(void);glVertex*();glColor*();glIndex();glNormal();glEvalCoord*();glCallList(),glCallLists();glTexCoord();glEdgeFlag();glMaterial();32图元的属性(图元的属性(1/51/5)颜色颜色点点大小(缺省值为大小(缺省值为1)线段线段线宽线宽voidglColor*();voidglIndex();voidglPointSize(GLfloatsize);voidglLineWidth(GLfloatwidth);33图元的属性(图元的属性(2/52/5)线型:连续线(缺省值)、点画线等线型:连续线(缺省值)、点画线等多边形多边形绘制方式:顶点、边界、填充绘制方式:顶点、边界、填充 voidglEnable(GL_LINE_STIPPLE);voidglLineStipple(GLintfactor,GLushortpattern);例:例:patternfactor结果结果0 x00FF10 x00FF2voidglPolygonMode(GLenumface,GLenummode);face:GL_FRONT_AND_BACK(缺省值)GL_FRONTGL_BACKmode:GL_POINTGL_LINEGL_FILL(缺省值)34图元的属性(图元的属性(3/53/5)前向面与后向面前向面与后向面背面剔除背面剔除voidglFrontFace(GLenummode);mode:GL_CCW(缺省值)缺省值)GL_CWvoidglCullFace(GLenummode);mode:GL_FRONTGL_BACK(缺省值)缺省值)GL_FRONT_AND_BACK35图元的属性(图元的属性(4/54/5)多边形填充方式多边形填充方式均匀填色方式均匀填色方式位图不透明方式位图不透明方式位图透明方式位图透明方式象素图方式象素图方式voidglEnable(GL_POLYGON_STIPPLE);voidglPolygonStipple(constGlubyte*mask);mask:位图位图36图元的属性(图元的属性(5/55/5)标记多边形边界标记多边形边界多边形法向多边形法向voidglEdgeFlag(GLbooleanflag);voidglNormal3*(TYPEnx,TYPEny,TYPEnz);voidglNormal3*v(constTYPE*v);37三、辅助库三、辅助库初始化一个窗口初始化一个窗口处理输入事件处理输入事件修改查色表修改查色表绘制简单的三维物体绘制简单的三维物体管理后台进程管理后台进程运行主程序运行主程序辅助库中定义的虚键值辅助库中定义的虚键值38为什么需要辅助库为什么需要辅助库使得使得OpenGL具有平台无关性具有平台无关性窗口管理窗口管理输入事件处理输入事件处理绘制简单的三维物体绘制简单的三维物体后台与主进程管理后台与主进程管理39窗口管理(窗口管理(1/2)设置窗口显示方式设置窗口显示方式voidAPIENTRYauxInitDisplayMode(GLenummode);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位)位)同一组中只能选一个,不同组之间用同一组中只能选一个,不同组之间用“|”相或相或40窗口管理(窗口管理(2/2)创建窗口创建窗口设置窗口的位置和大小设置窗口的位置和大小GLenumAPIENTRYauxInitWindow(LPCTSTRtitle);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定义了窗口的宽和高。定义了窗口的宽和高。41处理输入事件处理输入事件窗口尺寸改变窗口尺寸改变键盘响应键盘响应鼠标响应鼠标响应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的处理函数的处理函数 42修改查色表修改查色表voidAPIENTRYauxSetOneColor(intindex,floatr,floatg,floatb);设置设置index所指向的颜色。各个颜色分量由所指向的颜色。各个颜色分量由r,g,b给出给出 43绘制简单的三维物体(绘制简单的三维物体(1/21/2)voidAPIENTRYauxWireSphere(GLdouble);/绘制球(线框图)绘制球(线框图)voidAPIENTRYauxSolidSphere(GLdouble);/绘制球(填充图)绘制球(填充图)voidAPIENTRYauxWireCube(GLdouble);/绘制立方体绘制立方体voidAPIENTRYauxSolidCube(GLdouble);voidAPIENTRYauxWireBox(GLdouble,GLdouble,GLdouble);/绘制长方体绘制长方体voidAPIENTRYauxSolidBox(GLdouble,GLdouble,GLdouble);voidAPIENTRYauxWireTorus(GLdouble,GLdouble);/绘制圆环面绘制圆环面voidAPIENTRYauxSolidTorus(GLdouble,GLdouble);voidAPIENTRYauxWireCylinder(GLdouble,GLdouble);/绘制圆柱绘制圆柱voidAPIENTRYauxSolidCylinder(GLdouble,GLdouble);voidAPIENTRYauxWireCone(GLdouble,GLdouble);/绘制圆锥绘制圆锥44绘制简单的三维物体(绘制简单的三维物体(2/22/2)voidAPIENTRYauxSolidCone(GLdouble,GLdouble);voidAPIENTRYauxWireTeapot(GLdouble);/绘制茶壶绘制茶壶voidAPIENTRYauxSolidTeapot(GLdouble);voidAPIENTRYauxWireIcosahedron(GLdouble);/绘制二十面体绘制二十面体voidAPIENTRYauxSolidIcosahedron(GLdouble);voidAPIENTRYauxWireDodecahedron(GLdouble);/绘制十二面体绘制十二面体voidAPIENTRYauxSolidDodecahedron(GLdouble);voidAPIENTRYauxWireOctahedron(GLdouble);/绘制八面体绘制八面体voidAPIENTRYauxSolidOctahedron(GLdouble);voidAPIENTRYauxWireTetrahedron(GLdouble);/绘制四面体绘制四面体voidAPIENTRYauxSolidTetrahedron(GLdouble);45后台与主进程管理后台与主进程管理后台程序后台程序主程序主程序void APIENTRY auxIdleFunc(AUXIDLEPROC idleProc);void APIENTRY auxIdleFunc(AUXIDLEPROC idleProc);idleProc是当系统空闲时调用的函数是当系统空闲时调用的函数void APIENTRY auxMainLoop(AUXMAINPROC displayFunc);void APIENTRY auxMainLoop(AUXMAINPROC displayFunc);diplayFunc是绘制场景的函数是绘制场景的函数46辅助库中定义的虚键值辅助库中定义的虚键值鼠鼠标标: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等(数字)等(数字)47四、几何变换与投影四、几何变换与投影坐标系坐标系基本几何变换基本几何变换变换的分解与合成变换的分解与合成变换的模式变换的模式矩阵栈及其操作矩阵栈及其操作投影投影视区参数的设置视区参数的设置三维图形的变换流程三维图形的变换流程48坐标系坐标系右手坐标系右手坐标系窗口窗口xyzo49OpenGL的变换过程的变换过程OpenGL对图象进行变换与照相机拍摄物体的对图象进行变换与照相机拍摄物体的过程相似。过程相似。分为以下四步:分为以下四步:支起三角架,把照相机放在场景中,相当于支起三角架,把照相机放在场景中,相当于OpenGL的取景变换的取景变换把要拍摄的场景固定在要拍摄的物体上,相当于把要拍摄的场景固定在要拍摄的物体上,相当于OpenGL的模型变换的模型变换选择照相机镜头或调节焦距,相当于选择照相机镜头或调节焦距,相当于OpenGL的投的投影变换。影变换。确定照片的大小,可以放大照片的某一部分,相当确定照片的大小,可以放大照片的某一部分,相当于于OpenGL的视见区变换的视见区变换50投影变换投影变换就是要确定一个取景体积,其作用有两个:就是要确定一个取景体积,其作用有两个:确定物体投影到屏幕的方式,即是透视投影还确定物体投影到屏幕的方式,即是透视投影还是正交投影。是正交投影。确定从图象上裁剪掉哪些物体或物体的某些部确定从图象上裁剪掉哪些物体或物体的某些部分。分。投影变换包括透视投影和正交投影(平行投影)投影变换包括透视投影和正交投影(平行投影)51透视投影透视投影其取景体积是一个截头锥体,再这个体积内的其取景体积是一个截头锥体,再这个体积内的物体投影到锥的顶点,有物体投影到锥的顶点,有glFrustum命令定义命令定义这个截头锥体,这个取景体积可以是不对称的这个截头锥体,这个取景体积可以是不对称的voidglFrustum(Gldoubleleft,Gldoubleright,Gldoublebottom,Gldoubletop,Gldoublenear,Gldoublefar);52透视投影的示意图透视投影的示意图53正交投影正交投影其取景体积是一个各面均为矩形的六面体,用其取景体积是一个各面均为矩形的六面体,用glOrtho命令创建正交平行的取景体积命令创建正交平行的取景体积voidglOrtho(Gldoubleleft,Gldoubleright,Gldoublebottom,Gldoubletop,Gldoublenear,Gldoublefar);54正交投影的示意图正交投影的示意图55基本几何变换基本几何变换平移变换平移变换放缩变换放缩变换旋转变换旋转变换viodglTranslatefd(TYPEdeltax,TYPEdeltay,TYPEdeltaz);voidglScalefd(TYPEsx,TYPEsy,TYPEsz);voidglRotatefd(TYPEangle,TYPEx,TYPEy,TYPEz);(x,y,z)o旋转正向旋转正向56变换的模式变换的模式固定坐标系模式固定坐标系模式活动坐标系模式活动坐标系模式57矩阵栈及其操作(矩阵栈及其操作(1/8)三种矩阵栈三种矩阵栈模型观察变换矩阵栈(至少模型观察变换矩阵栈(至少32个矩阵)个矩阵)投影变换矩阵栈(至少投影变换矩阵栈(至少2个矩阵)个矩阵)纹理变换矩阵栈纹理变换矩阵栈(至少(至少2个矩阵)个矩阵)矩阵栈的初始状态矩阵栈的初始状态包含一个单位矩阵包含一个单位矩阵确定当前矩阵栈确定当前矩阵栈voidglMatrixMode(GLenummode);mode:GL_MODELVIEWGL_PROJECTIONGL_TEXTURE58矩阵栈及其操作(矩阵栈及其操作(2/8)清矩阵栈栈顶清矩阵栈栈顶voidglLoadIdentity(void);将栈顶矩阵替换为单位矩阵将栈顶矩阵替换为单位矩阵取消之前变换的作用取消之前变换的作用IMglLoadIdentity()59矩阵栈及其操作(矩阵栈及其操作(3/8)压栈压栈voidglPushMatrix(void);复制栈顶矩阵并压入栈复制栈顶矩阵并压入栈记住位置记住位置MMglPushMatrix()M坐标系1坐标系2坐标系1坐标系2坐标系360矩阵栈及其操作(矩阵栈及其操作(4/8)出栈出栈voidglPopMatrix(void);弹出栈顶矩阵弹出栈顶矩阵回到记住的位置回到记住的位置M1glPopMatrix()M1M2坐标系1坐标系2坐标系3坐标系1坐标系261矩阵栈及其操作(矩阵栈及其操作(5/8)设置栈顶矩阵设置栈顶矩阵voidglLoadMatrix(constTYPE*matrix);将栈顶矩阵替换为将栈顶矩阵替换为matrix实现任意变换实现任意变换M2M1glLoadMatrix(M2)62矩阵栈及其操作(矩阵栈及其操作(6/8)矩阵相乘矩阵相乘voidglMultiMatrixfd(constTYPE*matrix);以矩阵以矩阵matrix右乘栈顶矩阵并替换栈顶矩阵右乘栈顶矩阵并替换栈顶矩阵实现任意变换实现任意变换M1*M2M1glMultiMatrix(M2)63矩阵栈及其操作(矩阵栈及其操作(7/8)基本几何变换的作用基本几何变换的作用平移变换平移变换放缩变换放缩变换M*TglTranslatefd()MM*SglScalefd()M64矩阵栈及其操作(矩阵栈及其操作(8/8)旋转变换旋转变换M*RglRotatefd()M65投影(投影(1/5)缺省的观察坐标系缺省的观察坐标系窗口窗口x,uy,vz,no66投影(投影(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-467投影(投影(3/5)平行投影参数的设置平行投影参数的设置voidglOrtho(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,Gldoublenear,GLdoublefar);voidglOrtho2D(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop);68投影(投影(4/5)透视投影参数的设置透视投影参数的设置voidglFrustum(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,Gldoublenear,GLdoublefar);leftrighttopbottomnearfar坐标原点坐标原点69投影(投影(5/5)voidgluPerspective(GLdoublefory,GLdoubleaspect,GLdoublenear,GLdoublefar);w坐标原点坐标原点haspect=w/hnearfarfovy70视区参数的设置视区参数的设置mvoidglViewport(GLintx,GLinty,GLintwidth,GLintheight);(x,y):视区左下角点视区左下角点width,height:视区的宽和高视区的宽和高71三维图形的变换流程三维图形的变换流程模型变换观察变换投影变换窗口至视区的变换72本章习题本章习题构造一个三维图形交互环境,用真实感三维造型显示一个三维形体,并可以用鼠标驱动(平移和旋转、放大和缩小)所显示的物体。作业要求:三维形体可以自选,但要在交互环境中交互输入,建议显示“计算机图形学”字形;真实感绘制可以用OpenGL,建议用光线跟踪法绘制;三维交互环境必须自己构造,并要实现实时交互功能;可以由2-3人作为一个小组,共同完成。73END74

    注意事项

    本文((精品)openGL讲义.ppt)为本站会员(s****8)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开