opengl

opengl
2010年11月17日
  [b]OPENGL简介[/b]o[b] [/b]OpenGL是一个功能强大的图形库,用户可以很方便地利用它开发出有多种特殊视觉效果(如光照、纹理、透明、阴影)的三维图形。o[b] [/b]OpenGL集成了所有曲面造型、图形变换、光照、材质、纹理、像素操作、融合、反走样、雾化等等复杂的计算机图形学算法。应用OpenGL绘制图形就像我们使用Windows GDI的MoveTo()函数一样方便。随着微处理器性能的不断提高和32位操作系统的出现,使得运用OpenGL开发的三维图形质量正在接近工作站的水平。OpenGL 的特点 o[b] [/b]从程序开发人员的角度来看,OpenGL是一组绘图命令的API(Application Program Interface,应用程序接口)集合。利用这些API能够方便地描述二维和三维几何物体,并控制这些物体按某种方式绘制到显示缓冲区中。OpenGL的API集提供了物体描述、平移、旋转、缩放、光照、纹理、材质、象素、位图、文字、交互以及提高显示性能等方面的功能,基本涵盖了开发二、三维图形程序所需的各个方面。与一般的图形开发工具相比,OpenGL具有以下几个突出特点: n[b] [/b]应用广泛n[b] [/b]跨平台性n[b] [/b]高质量和高性能 n[b] [/b]出色的编程特性 n[b] [/b]网络透明性 •[b] [/b]应用广泛 OpenGL是目前最主要的二、三维交互式图形应用程序开发环境,已成为业界最受推荐的图形应用编程接口。自从1992年发表以来,OpenGL已被广泛地应用于CAD/CAM、三维动画、数字图象处理以及虚拟现实等领域,Kinetix公司的3D Studio Max就是突出的代表。无论是在PC机上,还是在工作站甚至是大型机和超级计算机上,OpenGL都能表现出它的高性能和强大威力。o[b] [/b]跨平台性 OpenGL能够在几乎所有的主流操作系统上运行,包括UNIX、Mac OS、OS/2、Windows NT、Windows9x、Linux等。o[b] [/b]高质量和高性能 无论是在CAD/CAM、三维动画还是可视化仿真等领域,OpenGL高质量和高效率的图形生成能力都能得到充分的体现。在这些领域中,开发人员可以利用OpenGL制作出效果逼真的二、三维图象来。o[b] [/b]出色的编程特性n[b] [/b]OpenGL体系结构评审委员会(ARB)独立负责管理OpenGL的规范,这使得OpenGL具有充分的独立性。n[b] [/b]OpenGL在各种平台上已有多年的应用实践,加上严格的规范控制,因此OpenGL具有良好的稳定性。n[b] [/b]良好的前瞻性、伸缩性和易使用性等也是OpenGL的突出编程特点。o[b] [/b]网络透明性 建立在客户/服务器模型上的网络透明性是OpenGL的固有特性,它允许一个运行在工作站上的进程在本机或通过网络在远程工作站上显示图形。利用这种透明性能够均衡地共同承担图形应用任务的各工作站的负荷,也能使得没有图形功能的服务器能够使用图形工具。OpenGL 的 API 结构 o[b] [/b]图 (a)是Win32平台上OpenGL API的结构简图;(b)是UNIX平台上OpenGL API的结构简图。其中“OpenGL”表示OpenGL基本API,这类API的主要功能包括物体描述、平移、旋转、缩放、光照、纹理、材质、象素、位图、文字处理等。“GLU”表示实用API,其主要功能包括绘制二次曲面、NURBS曲线曲面、复杂多边形以及纹理、矩阵管理等。“WGL”是Win32为支持OpenGL而特别设计的一套编程接口;“GLX”是UNIX系统支持OpenGL的编程接口。o[b] [/b]为了实现与硬件平台无关,OpenGL不提供窗口管理、输入管理和事件响应机制,因此OpenGL程序必须使用所在平台的用户接口(如GDU和Xlib)。OpenGL 的工作顺序 o[b] [/b]OpenGL的工作顺序就是一个从定义几何要素到把象素段写入帧缓冲区的过程。在屏幕上显示图象的主要步骤是以下3步:n[b] [/b](1). 构造几何要素(点、线、多边形、图象、位图),创建对象的数学描述。在三维空间上放置对象,选择有利的场景观察点。n[b] [/b](2). 计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间接给出。n[b] [/b](3). 光栅化,把对象的数学描述和颜色信息转换到屏幕的象素。OpenGL程序结构
  ---------------------基本语法 o[b] [/b]常用的程序设计语言,如C、C++、Pascal、Fortran和Java等,都支持OpenGL的开发。这里只讨论C版本下OpenGL的语法。o[b] [/b]OpenGL基本函数均使用gl作为函数名的前缀,如glClearColor();实用函数则使用glu作为函数名的前缀,如gluSphere()。OpenGL基本常量的名字以GL_开头,如GL_LINE_LOOP;实用常量的名字以GLU_开头,如GLU_FILL。一些函数如glColor*()(定义颜色值),函数名后可以接不同的后缀以支持不同的数据类型和格式。如glColor3b(...)、glColor3d(...)、glColor3f(...)和glColor3bv(...)等,这几个函数在功能上是相似的,只是适用于不同的数据类型和格式,其中3表示该函数带有三个参数,b、d、f分别表示参数的类型是字节型、双精度浮点型和单精度浮点型,v则表示这些参数是以向量形式出现的。o[b] [/b]OpenGL定义了一些特殊标识符,如GLfloat,GLvoid。它们其实就是C中的float和void。在gl.h文件中可以看到以下定义:n[b] [/b]……n[b] [/b]typedef float GLfloat;n[b] [/b]typedef void GLvoid;n[b] [/b]……n[b] [/b] 一些基本的数据类型都有类似的定义项。OpenGL程序结构
  ---------------------状态机制 o[b] [/b]OpenGL的工作方式是一种状态机制,它可以进行各种状态或模式设置,这些状态或模式在重新改变它们之前一直有效。例如,当前颜色就是一个状态变量,在这个状态改变之前,绘制的每个象素都将使用该颜色,直到当前颜色被设置为其它颜色为止。OpenGL中大量地使用了这种状态机制,如颜色模式、投影模式、单双显示缓存区的设置、背景色的设置、光源的位置和特性等等。许多状态变量可以通过glEnable()、glDisable()这两个函数来设置成有效或无效状态,OpenGL程序结构
  ---------------------程序的基本结构 o[b] [/b]OpenGL程序的基本结构可分为三个部分:n[b] [/b]第一部分是初始化部分。主要是设置一些OpenGL的状态开关,如颜色模式(RGBA或ALPHA)的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等。这些状态一般都用函数glEnable(???), glDisable(???)来设置,???表示特定的状态。n[b] [/b]第二部分设置观察坐标系下的取景模式和取景框位置大小。主要利用了三个函数:o[b] [/b]函数void glViewport(left,top,right,bottom):设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示);o[b] [/b]函数void glOrtho(left,right,bottom,top,near,far):设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体;o[b] [/b]函数void gluPerspective(fovy,aspect,zNear,zFar):设置投影方式为透视投影,其取景体积是一个截头锥体。n[b] [/b]第三部分是OpenGL的主要部分,使用OpenGL的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系、几何变换、光照处理等等。o[b] [/b]以上三个部分是OpenGL程序的基本框架,即使移植到使用MFC的Windows程序中,也是如此。只是由于Windows自身有一套显示方式,需要进行一些必要的改动以协调这两种不同显示方式。OpenGL程序结构
  -------------OpenGL有关的库 o[b] [/b]基本库:主要功能包括物体描述、平移、旋转、缩放、光照、纹理、材质、象素、位图、文字处理等 ¡ª¡ª基本库函数以gl 开头,基本常量名以GL_开头,如GL_LINE_LOOP,glClearColor()。o[b] [/b]实用库:主要功能包括绘制二次曲面、NURBS 曲线曲面、复杂多边形以及纹理、矩阵管理等 ¡ª¡ª实用库函数以glu 开头,实用常量库以GLU_开头,如GLU_FILL,gluSphere()。o[b] [/b]辅助库:这个库建立了一系列简单而又较完整的编程例子,例如初始化窗口、监控输入,以及绘制一些三维几何体等函数。辅助库函数用前缀aux。o[b] [/b]在Windows95/98 中,相关的库以动态链接库的形式存在,opengl32.lib、glu32.lib、glaux.lib 分别表示OpenGL 库、实用库和辅助库,和它们相应的头文件是gl.h、glu.h 及glaux.h。 OpenGL程序结构
  ------------一个简单的程序 o[b] [/b]在VC中新建项目 n[b] [/b]选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里。 o[b] [/b]为项目添加文件 n[b] [/b]为了使用OpenGL,我们需要在项目中加入三个相关的Lib文件:glu32.lib、glaux.lib、opengl32.lib,这三个文件位于c:\program files\Microsoft Visual Studio\vc98\lib目录中。 n[b] [/b]选中菜单Project->Add To Project->Files项(或用鼠标右键),把这三个文件加入项目,在FileView中会有显示。这三个文件请务必加入,否则编译时会出错。或者将这三个文件名添加到Project->Setting->Link->Object/library Modules 即可。 n[b] [/b]点击工具条中New Text File按钮,新建一个文本文件,存盘为Test.c作为你的源程序文件,再把它加入到项目中,然后就可以开始编程了。 #include #include #include #include void myinit (void) //初始化OpenGL场景 { glClearColor (0.0, 0.0, 0.0, 0.0); //将背景置成黑色 glShadeModel (GL_FLAT); } //设置明暗处理 void CALLBACK display(void) //用户的绘图过程 { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除缓存 glBegin(GL_LINES); //开始画一根白线 glColor3f (1.0f, 1.0f, 1.0f); //设置颜色为白色 glVertex2f(10.0f, 50.0f); //设置第一根线的两个端点,glVertex2f(110.0f, 50.0f);//请注意:OpenGL坐标系的原点是在屏幕左下角 glColor3f (1.0f, 0.0f, 0.0f); //设置颜色为红色 glVertex2f(110.0f, 50.0f); //设置第二根线的两个端点 glVertex2f(110.0f, 150.0f); glEnd(); //画线结束 glFlush (); } //绘图结束 //主过程: 初始化Windows的窗口界面 ,并初始化OpenGL场景,绘图 int main(int argc, char** argv) { auxInitDisplayMode (AUX_RGB); //初始化显示模式,采用RGB彩色系统。 auxInitPosition (0, 0, 400, 150); //初始化窗口位置、大小 auxInitWindow ("Display Lists"); //初始化窗口,设置标题 myinit (); auxMainLoop(display); //循环运行display过程,display由用户编写 return(0); }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值