图形设计基础-第一章OpenGL基础PPT课件.ppt_第1页
图形设计基础-第一章OpenGL基础PPT课件.ppt_第2页
图形设计基础-第一章OpenGL基础PPT课件.ppt_第3页
图形设计基础-第一章OpenGL基础PPT课件.ppt_第4页
图形设计基础-第一章OpenGL基础PPT课件.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

图形设计基础 1 学时 48上课时间 星期三7 8节 Z426 星期五5 6节 Z525 单周HPQ 503941104Room Z323 2 第1章OpenGL基础知识 掌握图形学编程的基本概念 了解OpenGL的基本功能与操作 学习图形系统和模型的基本原理 结构 3 1 1OpenGL概述 OpenGraphicsLibrary SGI OpenGL实际上是一种图形与硬件的接口 它包括几百个指令和函数 开发者可以用这些函数来建立三维模型和进行三维实时交互 1 1 1OpenGL是直观的三维图形开发环境 4 SGI 1 SGI SiliconGraphics 中文商标 硅图美国硅图公司成立于1982年 是一个生产高性能计算机系统的跨国公司 总部设在美国加州旧金山硅谷MOUNTAINVIEW的SGI公司是业界高性能计算系统 复杂数据管理及可视化产品的重要提供商 它提供世界上最优秀的服务器系列以及具有超级计算能力的可视化工作站 SGI公司是美国Fortune杂志所列美国最大500家公司 生产企业之一 年产值超过40亿美元 近五年公司平均增长率为40 50 是世界上发展最快的一家计算机公司 公司在业界率先集成了RISC技术 均衡多重处理技术 数字化媒体技术 计算机图形技术 UMA及CCNUMA体系结构等计算机领域的核心科技 形成了自己的独特风格 开创了视算科技及信息处理的新方向 目SGI在超级计算领域更是取得了世界上500台最大超级计算机中半数以上的市场份额 超级计算机 g代表图形工作站 i代表具有突破性的洞察力 采用我们的服务器 你就拥有非凡的计算能力帮助你解决最为棘手的问题 我们的图形工作站可以用更形象化的方式观看 操作和使用数据 当你与我们分布在全球范围的服务队伍相结合时 你就可以获得所需要的解决方案 实现理想 5 SGI 2 SGI的创始人JamesClark吉姆 克拉克博士 在当今的计算机界 SGI的名字虽不如IBM HP那样有名 但其产品和技术在图形和高性能计算领域有着其他产品无法替代的地位 SGI公司早期便致力于图形卡的研究和制造 后来便开始生产自己的图形工作站产品 SGI的创始人是吉姆 克拉克 JamesClark 博士 他出生于美国德州乡村小镇 中学辍学参军 靠自学获得中学同等学力 服完兵役的克拉克考进犹他大学专攻电脑制图 1978年获博士学位 四年后 他以自己研制的图形工作站和三维绘图软件创办SGI 然后快速成长为世界著名的图形软硬件制造商 1995年并购著名的动画软件公司AliasWavefront 2004年售出 从而拥有了属于自己的软件 看看SGI的发展史 1983年 第一批图形终端推出 1984年 第一批图形工作站推出 由此可以看出 它对图形工作站的贡献有多么巨大 大家所熟悉的 玩具总动员 侏罗纪公园 泰坦尼克号 指环王 紧急迫降 等影片均是在SGI的图形工作站上制作出来的 这里顺便说一下 世界电影史上花费最大 最成功的电影之一 泰坦尼克号 的成功很大程度上得益于它对电脑动画的大量应用 成功模拟了当时悲壮的情景 世界著名的数字工作室DigitalDomain公司用了一年半的时间 动用了300多台SGI超级工作站 并派出50多个特技师一天24小时轮流制作 泰坦尼克号 中的电脑特技 6 1 1 20penCL是三维图形的开发标准 20世纪90年代 随着软硬件技术的发展 三维图形迅猛发展 OpenGL通过对图形库的进一步发展 实现了二维和三维的高级技术 7 1 1 3OpenGL的基本功能 模型绘制模型观察颜色模式的指定光照应用图像效果增强位图和图像处理纹理映射实时动画交互技术 8 模型绘制OpenGL能够绘制点 线和多边形 应用这些基本的形体 我们可以构造出几乎所有的三维模型 OpenGL通常用模型的多边形的顶点来描述三维模型 如何通过多边形及其顶点来描述三维模型 在指南的在后续章节会有详细的介绍 模型观察在建立了三维景物模型后 就需要用OpenGL描述如何观察所建立的三维模型 观察三维模型是通过一系列的坐标变换进行的 模型的坐标变换在使观察者能够在视点位置观察与视点相适应的三维模型景观 在整个三维模型的观察过程中 投影变换的类型决定观察三维模型的观察方式 不同的投影变换得到的三维模型的景象也是不同的 最后的视窗变换则对模型的景象进行裁剪缩放 即决定整个三维模型在屏幕上的图象 颜色模式的指定OpenGL应用了一些专门的函数来指定三维模型的颜色 程序员可以选择二个颜色模式 即RGBA模式和颜色表模式 在RGBA模式中 颜色直接由RGB值来指定 在颜色表模式中 颜色值则由颜色表中的一个颜色索引值来指定 程序员还可以选择平面着色和光滑着色二种着色方式对整个三维景观进行着色 光照应用用OpenGL绘制的三维模型必须加上光照才能更加与客观物体相似 OpenGL提供了管理四种光 辐射光 环境光 镜面光和漫反射光 的方法 另外还可以指定模型表面的反射特性 图象效果增强OpenGL提供了一系列的增强三维景观的图象效果的函数 这些函数通过反走样 混合和雾化来增强图象的效果 反走样用于改善图象中线段图形的锯齿而更平滑 混合用于处理模型的半透明效果 雾使得影像从视点到远处逐渐褪色 更接近于真实 位图和图象处理OpenGL还提供了专门对位图和图象进行操作的函数 纹理映射三维景物因缺少景物的具体细节而显得不够真实 为了更加逼真地表现三维景物 OpenGL提供了纹理映射的功能 OpenGL提供的一系列纹理映射函数使得开发者可以十分方便地把真实图象贴到景物的多边形上 从而可以在视窗内绘制逼真的三维景观 实时动画为了获得平滑的动画效果 需要先在内存中生成下一幅图象 然后把已经生成的图象从内存拷贝到屏幕上 这就是OpenGL的双缓存技术 doublebuffer OpenGL提供了双缓存技术的一系列函数 交互技术目前有许多图形应用需要人机交互 OpenGL提供了方便的三维图形人机交互接口 用户可以选择修改三维景观中的物体 9 1 1 40penGL的体系结构 应用程序 OpenGL 窗口系统 操作系统 图形硬件 Fig1 1OPenGL层次 应用程序 Fig1 2OPenGL Windows体系 OpenGL32 dll GDI32 dll 可安装的客户端驱动程序 WinSrv dll 相关DDI Win32 DDI 视频显示驱动程序 10 1 1 5创建OpenGL控制台应用程序框架 2 在VC6 0环境下创建OpenGL控制台应用程序 glut 3 7 6 bin包 glut32 dll glut32 lib glut h glut32 dll复制到c windows system32下glut32 lib复制到VC lib 下glut h复制到VC include GL下 11 首先创建工程 其步骤如下 1 创建一个Win32ConsoleApplication 2 链接OpenGLlibraries 在VisualC 中先单击Project 再单击Settings 再找到Link单击 最后在Object librarymodules的最前面加上OpenGL32 libGLu32 libGLaux lib3 单击ProjectSettings中的C C 标签 将Preprocessordefinitions中的 CONSOLE改为 WINDOWS 最后单击OK 12 P7 includevoidmyDisplay void glClear GL COLOR BUFFER BIT glRectf 0 5 0 5 0 5 0 5 glFlush intmain intargc char argv glutInit 13 1 2OpenGL图形的实现方式 14 1 2 1设备描述表与渲染描述表 OpenGL的绘图方式与Windows的一般绘图方式不同 区别为 Windows采用的是图形设备接口GDI绘图 OpenGL采用的是渲染描述表绘RC图 OpenGL采用的是特殊的像素格式 在Windows中使用GDI绘图时必须指定在哪个设备环境DC中绘制 同同样的在使用OpenGL函数时也必须指定一个所谓的渲染环境 正如DC要存储GDI的绘制环境信息如笔 刷和字体等 RC也必须保存OpenGL所需的渲染信息如像素格式等 15 渲染描述表主要由以下6个函数来管理 HGLRCwglCreateContext HDChdc 该函数用来创建一个OpenGL可用的渲染环境 hdc必须是一个合法的支持至少16位色的屏幕设备描述表DC或内存设备描述表的句柄 该函数在调用前 设备描述表必须设置好适当的像素格式 成功创建渲染描述表之后 hdc可以释放或删除 函数返回NULL值表示失败 否则返回值为渲染上下文的句柄 BOOLwglDeleteContex HGLRChglrc 该函数删除一个RC 一般应用程序在删除RC之前 应使它成为非现行RC 不过 删除一个现行RC也是可以得 此时 OpenGL系统冲掉等待的绘图命令并使之成为非现行RC 后删除之 注意 删除一个属于别的线程的RC时会导致失败 HGLRCwglGetCurrentcontext void 该函数返回线程的现行RC 如果线程无现行RC则返回NULLHDCwglGetCurrentDC void 该函数返回与线程现行RC关联的DC 如果线程无现行RC则返回NULL BOOLwglMakeCurrent HDChdc HGLRChglrc 该函数把hdc和hglrc关联起来 并使hglrc成为调用线程的现行RC 如果传给hglrc的值为NULL 则函数解除关联 并置线程的现行RC为非现行RC 测试忽略hdc参数 注意 传给该函数的hdc可以不是调用wglCreateContext时使用的值 但是 他们所关联的设备必须相同并且拥有相同的像素格式 6BOOLwglUseFontBitmaps HDChdc DWORDdwFirst DWORDdwCount DWORDdwBase 该函数使用hdc的当前字体 创建一系列指定范围字符的显示表 可以利用这些显示表在OpenGL窗口画GDI文本 如果OpenGL窗口是双缓冲的 那么这是往后缓冲区中画GDI文本的唯一途径 一般地 在使用单个RC的应用程序中 在相应WM CREATE消息时创建RC 当WM CLOSE或WM DESTROY到来时再删除它 在使用OpenGL命令往窗口中绘图之前 必须先建立一个RC 并使之成为现行RC OpenGL命令无需提供RC 它将自动使用现行RC 若无现行RC OpenGL将简单地忽略所有的绘图命令 一个RC是指现行RC 这是针对调用线程而言的 一个线程在拥有现行RC进行绘图时 别的线程将无法同时绘图 一个线程一次只能拥有一个现行RC 但是可以拥有多个RC 一个RC也可以由多个线程共享 但是它每次只能在一个线程中是现行RC 在使用现行RC时 不应该释放或者删除与之关联的DC 如果应用程序在整个生命期内保持一个现行RC 则应用程序也一直占有一个DC资源 注意 Windows系统只有有限的DC资源 16 管理RC与DC两种方法 1 在WM CREATE消息响应时创建RC 创建后立即释放DC 当WM PAINT消息到来时 程序再获取DC句柄 并与RC关联起来 绘图完成后 立即解除RC与DC得关联并释放DC 当WM DESTROY消息到来时 程序只需简单的删除RC 2 RC在程序开始时创建并使之成为现行RC 它将保持为现行RC直至程序结束 相应的 GETDC在程序开始调用 RELEASEDC在程序结束时才调用 此中方法的好处是在相应WM PAINT消息时 无需调用十分耗时的wglMakeCurrent函数 一般它要消耗几千个时钟周期 17 GettheDChandle GetDC CreatetheRCReleasetheDChandle ReleaseDC WM CREATE GettheDChandle GetDC MaketheRCcurrentDrawwithOpenGLMaketheRCnotCurrentReleasetheDChandle Endpaint WM PAINT DeletetheRC WM DESTROY 消息循环 Fig1 7渲染描述表与设备描述表的管理方法1 18 GettheDChandle GetDC CreatetheRCandMakeitcurrent WM CREATE DrawwithOpenGL WM PAINT MaketheRCnotCurrentandDeleteDeletetheRChandle ReleaseDC WM DESTROY 消息循环 Fig1 8渲染描述表与设备描述表的管理方法2 19 1 2 20penGL像素格式设置 像素格式是OpenGL窗口的重要属性 它包括是否使用双缓冲 颜色位数和类型以及深度位数等 像素格式可由Windows系统定义的所谓像素格式描述子结构来定义 PIXELFORMATDESCRIPTOR 该结构定义在windows h中 在该结构中包含有26个属性信息 其形式为 20 typedefstructtagPIXELFORMATDESCRIPTOR WORDnSize 该结构所占内存空间 WORDnVersion 版本号 当前为1 DWORDdwFlags PFD DRAW TO BITMAP支持内存中绘制位图PFD DRAW TO WINDOW支持屏幕绘图PFD DOUBLEBUFFER支持双缓冲PFD CENERIC FORMAT指定选择GDI支持的像素格式PFD NEED PALETTE指定需要逻辑调色板PFD NEED SYSTEM PALETTE指定需要硬件调色板PFD STEREONT不支持PFD SUPPORT OPENGL支持OpenGLPFD SUPPORT GDI支持GDI 此时不可使用PFD DOUBLEBUFFERBYTEiPixelType 像素颜色模式 可选项为PFD TYPE RGBA或PFD TYPE INDEX 分别对应于RGBA模式和颜色索引模式 BYTEcColorBits 指定颜色的位数 BYTEcRedBits 采用RGBA模式时 红色组分占用位数BYTEcRedShift 采用RGBA模式时 红色组分占偏移量BYTEcGreenBits 采用RGBA模式时 绿色组分占用位数BYTEcGreenShift 采用RGBA模式时 绿色组分偏移量BYTEcBlueBits BYTEcBlueShift BYTEcAlphaBits 采用RGBA模式时 Alpha组分占用位数 BYTEcAlphaShift 采用RGBA模式时 Alpha组分偏移量 BYTEcAccumBits 指定累积缓冲区表示一个像素所用位数 BYTEcAccumRedBits 定累积缓冲区表示红色组分占用位数 BYTEcAccumGreenBits 指定累积缓冲区表示绿色组分占用位数 BYTEcAccumBlueBits 指定累积缓冲区表示蓝色组分占用位数 BYTEcAccumAlphaBits 指定累积缓冲区表示Alpha组分占用位数BYTEcDepthBits 指定深度缓冲区表示一个像素所用位数 BYTEcStencilBits 指定模板缓冲区表示一个像素所用位数 BYTEcAuxBuffers 指定辅助缓冲区 Windows9x NT不支持BYTEiLayerType Windows9x NT下只能是PFD MAIN PLANE BYTEbReserved 0DWORDdwLayerMask 指定覆盖层的屏蔽 Windows9x NT不支持DWORDdwVisibleMask Windows9x NT不支持DWORDdwDamageMask Windows9x NT不支持 PIXELFORMATDESCRIPTOR 21 Windows提供了四个像素格式管理函数 分别介绍如下 1 intChoosePixelFormat HDChdc PIXELFORMATDESCRIPTOR ppdf 该函数比较传过来的像素格式描述和OpenGL支持的像素格式 返回一个最佳匹配的像素格式索引 该索引值可传给SetPixelFormat为DC设置像素格式 返回值为0表示失败 在比较像素格式时 匹配优先级顺序为像素格式描述子结构中的下述各域 dwFlags cColorBits cAlphaBits cAccumBits cDepthBits cStencilBits cAuxBuffers iLayerType硬件支持的像素格式优先 2 intDescribePixelFormat HDChdc intiPixelFormat UINTnBytes LPPIXELFORMATDESCRIPTOR ppfd 该函数用格式索引iPixelFormat说明的像素格式来填写由ppfd所指向的像素格式描述子结构 利用该函数可以枚举像素格式 3 intGetPixelFormat HDChdc 该函数用于获取hdc的格式索引 4 BOOLSetPixelFormat HDChdc intiPixelFormat LPPIXELFORMATDESCRIPTOR ppfd 该函数用格式索引iPixelFormat来设置hdc的像素格式 在使用该函数之前应该调用ChoosePixelFormat来获取像素格式索引 另外 OpenGL窗口风格必须包含WS CLIPCHILDREN和WS CLIPSIBLINGS类型 否则设置失败 应该注意的是ChoosePixelFormat函数并不一定返回一个最佳的像素格式值 可以利用DescribePixelFormat来枚举系统所支持的所有像素格式 OpenGL的通常支持24种不同的像素格式 如果系统安装了OpenGL硬件加速器 它可能会支持其它的像素格式 22 Fig1 9设置像素格式的一般步骤 期望的像素格式描述PixelFormatDescriptor 枚举或比较像素格式ChoosePixelFormatDescribePixelFormat 设置像素格式 匹配 Yes No 23 1 2 30penCL图形处理流程 整个OpenGL的基本工作流程如下图 24 其中几何顶点数据包括模型的顶点集 线集 多边形集 这些数据经过流程图的上部 包括运算器 逐个顶点操作等 图像数据包括象素集 影像集 位图集等 图像象素数据的处理方式与几何顶点数据的处理方式是不同的 但它们都经过光栅化 逐个片元 Fragment 处理直至把最后的光栅数据写入帧缓冲器 在OpenGL中的所有数据包括几何顶点数据和象素数据都可以被存储在显示列表中或者立即可以得到处理 OpenGL中 显示列表技术是一项重要的技术 OpenGL要求把所有的几何图形单元都用顶点来描述 这样运算器和逐个顶点计算操作都可以针对每个顶点进行计算和操作 然后进行光栅化形成图形碎片 对于象素数据 象素操作结果被存储在纹理组装用的内存中 再象几何顶点操作一样光栅化形成图形片元 整个流程操作的最后 图形片元都要进行一系列的逐个片元操作 这样最后的象素值BZ送入帧缓冲器实现图形的显示 25 1 2 40penCL图形绘制方式 OpenGL是一个与硬件图形发生器的软件接口 它包括了100多个图形操作函数 开发者可以利用这些函数来构造景物模型 进行三维图形交互软件的开发 正如上一章所述 OpenGL是一个高性能的图形开发软件包 OpenGL支持网络 在网络系统中用户可以在不同的图形终端上运行程序显示图形 OpenGL作为一个与硬件独立的图形接口 它不提供与硬件密切相关的设备操作函数 同时 它也不提供描述类似于飞机 汽车 分子形状等复杂形体的图形操作函数 用户必须从点 线 面等最基本的图形单元开始构造自己的三维模型 当然 象OpenInventor那样更高一级的基于OpenGL的三维图形建模开发软件包将提供方便的工具 因此OpenGL的图形操作函数十分基本 灵活 例如OpenGL中的模型绘制过程就多种多样 内容十分丰富 OpenGL提供了以下的对三维物体的绘制方式 26 网格线绘图方式 wireframe 这种方式仅绘制三维物体的网格轮廓线 深度优先网格线绘图方式 depth cued 用网格线方式绘图 增加模拟人眼看物体一样 远处的物体比近处的物体要暗些 反走样网格线绘图方式 antialiased 用网格线方式绘图 绘图时采用反走样技术以减少图形线条的参差不齐 平面消隐绘图方式 flat shade 对模型的隐藏面进行消隐 对模型的平面单元按光照程度进行着色但不进行光滑处理 光滑消隐绘图方式 smooth shade 对模型进行消隐按光照渲染着色的过程中再进行光滑处理 这种方式更接近于现实 加阴影和纹理的绘图方式 shadows textures 在模型表面贴上纹理甚至于加上光照阴影 使得三维景观象照片一样 运动模糊的绘图方式 motion blured 模拟物体运动时人眼观察所感觉的动感现象 大气环境效果 atmosphere effects 在三维景观中加入如雾等大气环境效果 使人身临其境 深度域效果 depth of effects 类似于照相机镜头效果 模型在聚焦点处清晰 反之则模糊 这些三维物体绘图和特殊效果处理方式 说明OpenGL已经能够模拟比较复杂的三维物体或自然景观 这就是我们所面对的OpenGL 27 1 2 50penGL程序运行方式 运行OpenGL程序主要有以下三种方式 OpenGL硬件加速方式三维图形加速模式纯软件模式 28 1 3OpenGL图形开发库 开发基于OpenGL的应用程序 必须先了解OpenGL的库函数 它采用C语言风格 提供大量的函数来进行图形的处理和显示 OpenGL库函数的命名方式非常有规律 所有OpenGL函数采用了以下格式库前缀有gl glu aux glut wgl glx agl等等 分别表示该函数属于OpenGL那个开发库等 从函数名后面中还可以看出需要多少个参数以及参数的类型 I代表int型 f代表float型 d代表double型 u代表无符号整型 例如glVertex3fv 表示了该函数属于gl库 参数是三个float型参数指针 我们用glVertex 来表示这一类函数 29 OpenGL函数库相关的API有核心库 gl 实用库 glu 辅助库 aux 实用工具库 glut 窗口库 glx agl wgl 和扩展函数库等 从图1可以看出 gl是核心 glu是对gl的部分封装 glx agl wgl是针对不同窗口系统的函数 glut是为跨平台的OpenGL程序的工具包 比aux功能强大 扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数 30 31 1 3 1开发库的组成 开发基于OpenGL的应用程序 必须先了解OpenGL的库函数 它采用C语言风格 提供大量的函数来进行图形的处理和显示 OpenGL图形库一共有100多个函数 它们分别属于OpenGL的基本库 实用库 辅助库等不同的库 OpenGL全称 开放式图形库 是由SGI公司开发的低层三维图形API 目前在图形开发领域已经成为工业标准 现今市面上关于OpenGL方面的书籍不在少数 但是大多是讲解句法和实例 缺乏对其整个程序开发框架的总结与把握 所以总体上显得比较凌乱 本篇文章主要针对初学者 最好要有图形方面的基础知识 而制作的 旨在通过对OpenGL的整个知识结构的介绍 来具体剖析其内在运行机制 并且结合实际开发经验总结出在VC平台下的OpenGL开发框架 最后给出一个例程来说明这一框架的具体应用 32 1 OpenGL核心库 OpenGL是一种开放式的图形软件开发包 它采用C语言风格 提供大量的函数来进行图形方面的处理 一般编程使用的函数库包括 OpenGL图形库 函数以gl开头 可以实现比较简单的绘制功能 核心函数共115个 这些函数可以运行在现在任何主流操作系统中 OpenGL实用库 函数以glu开头 其函数功能更高级一些 如绘制复杂的曲线曲面 高级坐标变换 多边形分割等 共有43个 这些函数可以运行在现在任何主流操作系统中 OpenGL辅助库 函数以aux开头 它们是一些特殊的函数 包括简单的窗口管理 输入事件处理 某些复杂三维物体绘制等函数 共有31个 它只能在Win32平台下运行 33 核心库 包含的函数有115个 它们是最基本的函数 其前缀是gl 这部分函数用于常规的 核心的图形处理 由gl dll来负责解释执行 核心库中的函数可以进一步分为以下几类函数 34 1 绘制基本几何图元的函数 glBegain glEnd glNormal glVertex 2 矩阵操作 几何变换和投影变换的函数 矩阵入栈函数glPushMatrix 矩阵出栈函数glPopMatrix 装载矩阵函数glLoadMatrix 矩阵相乘函数glMultMatrix 当前矩阵函数glMatrixMode 和矩阵标准化函数glLoadIdentity 几何变换函数glTranslate glRotate 和glScale 投影变换函数glOrtho glFrustum 和视口变换函数glViewport 等等 3 颜色 光照和材质的函数 如设置颜色模式函数glColor glIndex 设置光照效果的函数glLight glLightModel 和设置材质效果函数glMaterial 等等 4 显示列表函数 主要有创建 结束 生成 删除和调用显示列表的函数glNewList glEndList glGenLists glCallList 和glDeleteLists 等 35 5 纹理映射函数 主要有一维纹理函数glTexImage1D 二维纹理函数glTexImage2D 设置纹理参数 纹理环境和纹理坐标的函数glTexParameter glTexEnv 和glTetCoord 等 6 特殊效果函数 融合函数glBlendFunc 反走样函数glHint 和雾化效果glFog 7 光栅化 象素操作函数 像素位置glRasterPos 线型宽度glLineWidth 多边形绘制模式glPolygonMode 读取象素glReadPixel 复制象素glCopyPixel 等 8 选择与反馈函数 主要有渲染模式glRenderMode 选择缓冲区glSelectBuffer 和反馈缓冲区glFeedbackBuffer 等 9 曲线与曲面的绘制函数 生成曲线或曲面的函数glMap glMapGrid 求值器的函数glEvalCoord glEvalMesh 10 状态设置与查询函数 主要有glGet glEnable glGetError 等 36 2 OpenGL实用库 OpenGLutilitylibrary GLU 包含的函数功能更高一些 如绘制复杂的曲线曲面 高级坐标变换 多边形分割等 共有43个 前缀为glu Glu函数通过调用核心库的函数 为开发者提供相对简单的用法 实现一些较为复杂的操作 此类函数由glu dll来负责解释执行 主要包括了以下几种 37 1 辅助纹理贴图函数 有gluScaleImage gluBuild1Dmipmaps gluBuild2Dmipmaps 等 2 坐标转换和投影变换函数 定义投影方式函数gluPerspective gluOrtho2D gluLookAt 拾取投影视景体函数gluPickMatrix 投影矩阵计算gluProject 和gluUnProject 等 3 多边形镶嵌工具 有gluNewTess gluDeleteTess gluTessCallback gluBeginPolygon gluTessVertex gluNextContour gluEndPolygon 等 4 二次曲面绘制工具 主要有绘制球面 锥面 柱面 圆环面gluNewQuadric gluSphere gluCylinder gluDisk gluPartialDisk gluDeleteQuadric 等等 5 非均匀有理B样条绘制工具 主要用来定义和绘制Nurbs曲线和曲面 包括gluNewNurbsRenderer gluNurbsCurve gluBeginSurface gluEndSurface gluBeginCurve gluNurbsProperty 等函数 6 错误反馈工具 获取出错信息的字符串gluErrorString 等 38 3 OpenGL辅助库 OpenGL辅助库 OpenGLauxiliarylibrary GLAUX 包括简单的窗口管理 输入事件处理 某些复杂三维物体绘制等函数 共有31个 前缀为aux 此类函数由glaux dll来负责解释执行 辅助库函数主要包括以下几类 39 1 窗口初始化和退出函数 auxInitDisplayMode 和auxInitPosition 2 窗口处理和时间输入函数 auxReshapeFunc auxKeyFunc 和auxMouseFunc 3 颜色索引装入函数 auxSetOneColor 4 三维物体绘制函数 包括了两种形式网状体和实心体 如绘制立方体auxWireCube 和auxSolidCube 这里以网状体为例 长方体auxWireBox 环形圆纹面auxWireTorus 圆柱auxWireCylinder 二十面体auxWireIcosahedron 八面体auxWireOctahedron 四面体auxWireTetrahedron 十二面体auxWireDodecahedron 圆锥体auxWireCone 和茶壶auxWireTeapot 绘制实心体只要将上述函数中的确 Wire 更换成 Solid 就可以了 5 其他 背景过程管理函数auxIdleFunc 程序运行函数auxMainLoop 6 程序运行函数auxMainLoop 40 4 OpenGL工具库 OpenGLUtilityToolkit 包含大约30多个函数 函数名前缀为glut 此函数由glut dll来负责解释执行 这部分函数主要包括 41 1 窗口操作函数窗口初始化 窗口大小 窗口位置等函数glutInit glutInitDisplayMode glutInitWindowSize glutInitWindowPosition 等 2 回调函数 响应刷新消息 键盘消息 鼠标消息 定时器函数等 glutDisplayFunc glutPostRedisplay glutReshapeFunc glutTimerFunc glutKeyboardFunc glutMouseFunc 3 创建复杂的三维物体 这些和aux库的函数功能相同 创建网状体和实心体 如glutSolidSphere glutWireSphere 等 4 菜单函数创建添加菜单的函数glutCreateMenu glutSetMenu glutAddMenuEntry glutAddSubMenu 和glutAttachMenu 5 程序运行函数 glutMainLoop 42 5 Windows专用库16个WGL函数 专门用于OpenGL和Windows窗口系统的联接 其前缀为wgl 主要用于创建和选择图形操作描述表 renderingcontexts 以及在窗口内任一位置显示字符位图 这类函数主要包括以下几类 1 绘图上下文相关函数 wglCreateContext wglDeleteContext wglGetCurrentContent wglGetCurrentDC wglDeleteContent 等 2 文字和文本处理函数 wglUseFontBitmaps wglUseFontOutlines 3 覆盖层 地层和主平面层处理函数 wglCopyContext wglCreateLayerPlane wglDescribeLayerPlane wglReakizeLayerPlatte 等 4 其他函数 wglShareLists wglGetProcAddress 等 6 Win32API函数库包含有6个函数 函数名无专用前缀 是win32扩展函数 这部分函数主要用于处理像素存储格式和双帧缓存 这6个函数将替换WindowsGDI中原有的同样的函数 Win32API函数库只能用于Windows95 98 NT环境中 43 7 X窗口专用库是针对Unix和Linux的扩展函数 包括渲染上下文 绘制图元 显示列表 纹理贴图 等等初始化glXQueryExtension 渲染上下文函数 glXCreateContext glXDestroyContext glXCopyContext glXMakeCurrent glXCreateGLXPixmap 执行glXWaitGL glXWaitX 缓冲区和字体glXSwapBuffers glXUseXFont 8其他扩展库这些函数可能是新的OpenGL函数 并没有在标准OpenGL库中实现 或者它们是用来扩展已存在的OpenGL函数的功能 和glu glx和wgl一样 这些OpenGL扩展是由硬件厂商和厂商组织开发的 OpenGL扩展 OpenGLExtention 包含了大量的扩展API函数 随着硬件的更新 硬件厂商首先向SGI申请登记新的扩展 编写规格说明书 specification 然后按照说明书进行开发扩展程序 不同的OpenGL实现 OpenGLImplementation 支持的扩展可能不一样 只有随着某一扩展的推广与应用以及硬件技术的提高该扩展才会在所有的OpenGL实现中被给予支持 从而最终成为OpenGL标准库的一部分 扩展由SGI维护 在SGI网站上列出了目前公开的已注册的扩展及其官方说明书 扩展源由扩展函数的后缀来指明 或使用扩展常量后缀 例如 后缀WIN表明一个符合Windows规范的扩展 EXT或ARB后缀表明该扩展由多个卖主定义 44 1 3 2基本数据类型 与C语言相对应 OpenGL中也有整数 字节 浮点数等数据类型 为了说明两者的对应关系 下表将OpenGL的数据类型与相应的C类型进行了对比 前缀数据类型相应C语言类型OpenGL类型b8 bitintegersignedcharGLbytes16 bitintegershortGLshorti32 bitintegerlongGLint GLsizeif32 bitfloating pointfloatGLfloat GLclampfd64 bitfloating pointdoubleGLdouble GLclampdub8 bitunsignedintegerunsignedcharGLubyte GLbooleanus16 bitunsignedintegerunsignedshortGLushortui32 bitunsignedintegerunsignedlongGLuint GLenum GLbitfield此外 OpenGL也定义GLvoid类型 如果用C语言编写 可以用它替代void类型 45 1 3 30penGL库函数命名规则 了解了OpenGL的数据类型 让我们再回过头来看看OpenGL库函数的命名规律 所有OpenGL函数采用了以

温馨提示

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

评论

0/150

提交评论