c语言的opengl全函数指导

举报
资源描述
第一章OpenGL的基本框架1.1 OpenGL 简介在计算机发展初期,人们就开始从事计算机图形的开发,但直到20世 纪 80年代末90年代初,三维图形才开始迅速发展。于是各种三维图形工具软件包相继推出,如 GL,RenderMan等,但没有一种软件包能够在三维图形建模能力和编程方便程度上与OpenGL相比拟。OpenGL(Open Graphics Library,开放图形库),是一个三维的计算机图形和模型库,它源于SGI公司为其图形工作站开发的IRIS G L,在跨平台移植过程中发展成为OpenGL。SGI公司在1992年 6 月发布1.0版,后成为工业标准。目前,OpenGL标准由1992年成立的独立财团OpenGL Architecture Review Board(ARB)以投票方式产生,并制成规范文档公布,各软硬件厂商据此开发自己系统上的实现。目前最新版规范是1999年 5 月通过的1.2.1。OpenGL作为个性能优越的图形应用程序设计界面(API),它独立于硬件和窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。OpenGL在军事、广播电视、CAD/CAM/CAE,娱乐、艺术造型、医疗影像、虚拟世界等领域都有着广泛的应用。它具有以下功能。1.模型绘制OpenGL能够绘制点、线和多边形。应用这些基本的形体,可以构造出几乎所有的三维模型。OpenGL通常用模型的多边形的顶点来描述三维模型。2.模型观察在建立了三维景物模型后,就需要用OpenGL描述如何观察所建立的三维模型。观察三维模型是通过一系列的坐标变换进行的。模型的坐标变换在使观察者能够在视点位置观察与视点相适应的三维模型景观。在整个三维模型的观察过程中,投影变换的类型决定观察三维模型的观察方式,不同的投影变换得到的三维模型的景象也是不同的。最后的视窗变换则对模型的景象进行裁剪缩放,即决定整个三维模型在屏幕上的图象。3.颜色模式的指定OpenGL应用了一些专门的函数来指定三维模型的颜色。程序开发者可以选择二个颜色模式,即 RGBA模式和颜色表模式。在 RGBA模式中,颜色直接由RGB值来指定;在颜色表模式中,颜色值则由颜色表中的 个颜色索引值来指定。开发者还可以选择平面着色和光滑着色二种着色方式对整个三维景观进行着色。4.光照应用用 OpenGL绘制的三维模型必须加上光照才能更加与客观物体相似。OpenGL提供了管理四种光(辐射光、环境光、镜面光和漫射光)的方法,另外还可以指定模型表面的反射特性。5.图象效果增强OpenGL提供了一系列的增强三维景观的图象效果的函数,这些函数通过反走样、混合和雾化来增强图象的效果。反走样用于改善图象中线段图形的锯齿而更平滑,混合用于处理模型的半透明效果,雾使得影像从视点到远处逐渐褪色,更接近于真实。6.位图和图象处理OpenGL还提供了专门对位图和图象进行操作的函数。7.纹理映射三维景物因缺少景物的具体细节而显得不够真实,为了更加逼真地表现三维景物,OpenGL提供了纹理映射的功能。OpenGL提供的系列纹理映射函数使得开发者可以卜分方便地把真实图象贴到景物的多边形上,从而可以在视窗内绘制逼真的三维景观。8.实时动画为了获得平滑的动画效果,需要先在内存中生成下一幅图象,然后把已经生成的图象从内存拷贝到屏幕上,这就是OpenGL的双缓存技术(double buffer)。OpenGL提供了双缓存技术的一系列函数。9.交互技术目前有许多图形应用需要人机交互,OpenGL提供了方便的三维图形人机交互接口,用户可以选择修改三维景观中的物体。1.2 OpenGL的工作方式1.2.1 OpenGL的体系结构OpenGL是一套图形标准,它严格按照计算机图形学原理设计而成,符合光学和视觉原理,非常适合可视化仿真系统。由于OpenGL是一种A P I,其中不包含任何窗口管理、用户交互或文件I/O 函数。每个主机环境(如 Microsoft Windows)在这些方面都有自己的函数,由这些函数负责实现某些方法,以便把窗口或位图的绘制控制权移交给OpenGL。通常,一个完整的窗口系统的OpenGL图形处理系统的结构如图1.1所示:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,最上面的层为应用软件。应用软件|窗口系统操作系统图形硬件图 1.1 OpenGL图形处理系统的层次结构OpenGL在 Windows N T上的实现是基于客户机/服务器模式的,应用程序发出OpenGL命令,由动态链接库OpcnGL32.DLL接受和打包后,发送到服务器端的WINSRV.DLL,然后山它通过DDI(Device Driver Interface,设备驱动程序接口)层发往视频显示驱动程序。如果系统安装了硬件加速器,则由硬件相关的DDI来处理。OpenGL/NT的体系结构图如图1.2所示。图 1.2 OpcnGL/NT体系结构1.2.2 OpenGL的流水线当应用程序进行OpenGL API函数调用的时候,OpenGL命令将被放在个命令缓冲区中,这样,命令缓冲区中包含了大量的命令、顶点数据和纹理数据。当这个缓冲区被清空时,缓冲区中的命令和数据都将传递给流水线的下个阶段,或者说,只有当命令缓冲区被清空时,OpenGL命令才会被执行。图 1.3显示了一条简化版的OpenGL流水线。T 变换、光照f调用OpenGL命令OpenGL 命.令缓冲区光栅化帧缓存图1.3 一条简化版的OpenGL流水线在 OpenGL中,命令缓冲区中的儿何顶点数据通常还要进行几何变换以及光照计算,并通过指定的方法进行投影,为下一步光栅化做准备。光栅化根据图形的几何形状、颜色和纹理数据产生一系列图像的帧缓存地址和图元的二维描述值,光栅化的结果最后被放置在帧缓存中。帧缓存是图形显示设备的内存,这样图像就显示在屏幕上了。1.2.3 OpenGL 状态机OpenGL是一种直接模式的API,每条命令根据当前的演染状态都会产生某种立即效果。渲染状态是各种标记,他们指出哪些特性是打开的,哪些是关闭的,以及应该如何应用他们。在 OpenGL中,使用glEnable函数和glDisable函数来启用和禁用渲染特征。1.3 OpenGL的操作步骤在 OpenGL中进行的图形操作直至在计算机屏幕上渲染绘制出三维图形景观的基本步骤如下:1.根据基本图形单元建立景物模型,得到景物模型的数学描述(OpenGL中把点、线、多边形、图像和位图都作为基本图形单元);2.把景物模型放在三维空间中的合适的位置,并且设置视点(Viewpoint)以观察所感兴趣的景观;3.计算模型中所有物体的色彩,同时确定光照条件、纹理粘贴方式等;4.把景物模型的数学描述及其色彩信息转换至计算机屏幕上的像素,这个过程也就是光栅化(rasterization)。在这些步骤的执行过程中,OpenGL可能执行其他的一些操作,例如自动消隐处理等。另外,景物光栅化之后被送入帧缓冲器之前还可以根据需要对象索数据进行操作。1.4 OpenGL的组成OpenGL不是一种编程语言,而是一种API(应用程序编程接口),它实际上是一种图形与硬件的接口,包括了多个图形函数。OpenGL主要由以F 函数库组成。1.OpenGL核心库OpenGL核心库中包含了 115个最基本的命令函数,它们都是以“gl”为前缀,可以在任何OpenGL的工作平台上应用。这部分函数用于常规的、核心的图形处理,如建立各种各样的几何模型,产生光照效果,进行反走样以及进行纹理映射,以及进行投影变换等等。由于许多函数可以接收不同数据类型的参数,因此派生出来的函数原形有300多个。2.OpenGL实用程序库OpenGL的实用程序库包含有43个函数,以“glu”为前缀,在任何OpenGL平台都可以应用。这部分函数通过调用核心库的函数,来实现一些较为复杂的操作,如纹理映射、坐标变换、网格化、曲线曲面以及二次物体(圆柱、球体等)绘制等。3.OpenGL编程辅助库OpenGL的辅助库包含31个函数,以“aux”为前缀,但它们不能在所有的OpenGL平台上使用。OpenGL的辅助库的函数主要用于窗口管理、输入输出处理以及绘制一些简单的三维形体。4.OpenGL实用程序工具包OpenGL实用程序工具包(OpenGL utility toolkit,GLUT)包含30多个函数,函数名前缀 是“glut”。其中的函数主要提供基于窗口的工具,如窗口系统的初始化,多窗口管理,菜单管理,字体以及一些较复杂物体的绘制等。由 于 g lu t库中的窗口管理函数是不依赖于运行环境的,因此OpenGL中的工具库可以在所有的OpenGL平台上运行,在后面的示例中,我们均使用glut库建立OpenGL程序运行框架。5.Windows专用库Windows专用库函数包含有6 个,每个函数以wgl开头,用于连接OpenGL和 WindowsN T,这些函数用于在Windows N T环境下的OpenGL窗口能够进行渲染着色,在窗口内绘制位图字体以及把文本放在窗口的某一位置等这些函数把Windows和 OpenGL揉合在一起。6.Win32 API 函数库这部分函数没有专用的前缀,主要用于处理像素存储格式和双帧缓存。1.5 OpenGL的数据类型由于OpenGL具有平台无关性,它定义了自己的数据类型,这些数据类型将映射为常规的 C 数据类型,在程序中也可以直接使用这些C 数据类型,下表列出了在OpenGL中定义的数据类型。及 1-1 OpenGL变量类型和相应的C 数据类型OpenGL数据类型内部表示法定义为C 类型c 字面值后缀GLbyte8 位整数signed charbGLshort16位整数shortsGLint,GLsizei32位整数song1GLfloat,GLclampf32位浮点数floatfGLdouble,GLclampd64位浮点数doubledGLubyte,GLboolean8 位无符号整数unsigned charubGLshort16位无符号整数unsigned shortUSGLuint,GLenum,GLbitfield32位无符号整数unsigned longui1.6 OpenGL函数命名约定OpenGL函数都遵循个命名约定,通过这个约定可以了解函数来源于哪个库,需要多少个参数以及参数的类型。每一个函数都有一个根段,代表该函数相应的OpenGL命令。所有的OpenGL函数都采用以下格式:库前缀 根命令 可选的参数个数 可选的参数类型例如函数glColor3f(),g l表示这个函数来自库gl.h,color是该函数的根段,表示该函数用于颜色设定,3 f 表示这个函数采用了三个浮点数参数。这种把参数数目和参数类型加入 OpenGL函数结尾的约定使人们更容易记住参数列式而无需查找它。1.7 用 OpenGL绘制图形由于OpenGL是 种 API,OpenGL库遵循C 调用约定,这意味着在C 语言中编写的程序可以很容易地调用A P I中的函数,本书的示例程序均以C 语言编写。下面的程序利用GLUT库,在窗口的中心位置绘制个矩形,其输出如图1.4所示。程序清单1.1:在窗口内绘制一个矩形/GLRect.c#include#include#include#include/函数RenderScene用于在窗口中绘制需要的图形void RenderScene(void)/用当前清除色清除颜色缓冲区,即设定窗口的背景色glClear(GL_COLOR_BUFFER_BIT);设置当前绘图使用的RGB颜色glColor3f(1.0f,0.0f,0.0f);使用当前颜色绘制一个填充的矩形glRectf(100.0f,150.0f,150.0f,lOO.Of);刷新OpenGL命令队列glFlush();)/函数ChangeSize是窗口大小改变时调用的登记函数void ChangeSize(GL
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关资源
正为您匹配相似的精品文档
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号