`
liq39liq
  • 浏览: 14806 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

opengl

阅读更多

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

相关推荐

    OpenGL深度测试OpenGL深度测试

    OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试...

    vs里配置openGL库

    opengl

    OpenGL ES 2.0规范(中文版)——本人自己翻译总结的

    本规范是本人根据《OpenGL ES Profile Specification 2.0.24 (Difference Specification) (April 1, 2009) (Annotated)》进行学习时翻译的,我今天把它提取出来,仅供大家学习使用,帮助想学习OpenGL ES 2.0这一国内...

    OpenGL编程指南(第四版)(PDF)+源码

    OpenGL图形系统是一个软件接口,让程序员能够创建交互式程序,使用计算机图形学技术生成具有真实感的图像。本书是OpenGL ARB推荐的OpenGL 1.4版学习指南。本书首先阐述OpenGL的功能和计算机图形学基本知识,包括状态...

    OpenGL超级宝典中文第三版带目录清晰扫描版.pdf

    本书是OpenGL编程指南,涵盖了使用新版本的OpenGL进行编程所需要的主要知识。 全书分3个部分,共23章,另有3个附录。第一部分包括第1章到第12章,介绍经典OpenGL绘图的所有基础知识,包括3D图形和OpenGL简介,OpenGL...

    OpenGL开发库(完整版)

    但是在运行程序时还提示说缺少opengl.dll,我又下载了一个opengl.dll接着又运行,说又缺少了HfxClass45.dll,后来又提示还少个ipl.dll.我又下载了补上了. 编译联接都能通的过,可执行时又弹出”无法定位程序输入点...

    OpenGL ES应用开发实践指南(Android卷).pdf

    《OpenGL ES应用开发实践指南:Android卷》是一本系统的OpenGL三维游戏和动态壁纸开发指南。由资深Android开发专家根据OpenGLES2.0版本撰写,不仅系统地讲解了OpenGLES的核心概念、技术,以及Android的图形机制,还...

    OpenGL编程指南(第8版 PDF) 中文版 高清晰 最新 完整版 (带目录书签)

    OpenGL编程指南 第8版 高清 中文 完整版,PDF格式的。是目前网络上最清晰的完整版本。这本书是学习OpenGl的必备资料,非常好的书。 由Khronos小组编写的官方指南,OpenGL领域的权威著作,素有“OpenGL红宝书”美誉...

    opengl+qt实现鼠标选中模型

    opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型...

    OpenGL论文 OpenGL论文 OpenGL论文 OpenGL论文 OpenGL论文

    OpenGL论文 OpenGL论文 OpenGL论文 OpenGL论文 OpenGL论文

    OpenGL教程 OpenGL教程 OpenGL教程 OpenGL教程 OpenGL教程

    OpenGL教程 OpenGL教程 OpenGL教程 OpenGL教程 OpenGL教程

    OpenGL+qt抗锯齿OpenGL+qt抗锯齿

    OpenGL+qt抗锯齿OpenGL+qt抗锯齿OpenGL+qt抗锯齿OpenGL+qt抗锯齿OpenGL+qt抗锯齿OpenGL+qt抗锯齿OpenGL+qt抗锯齿OpenGL+qt抗锯齿OpenGL+qt抗锯齿OpenGL+qt抗锯齿OpenGL+qt抗锯齿OpenGL+qt抗锯齿OpenGL+qt抗锯齿...

    OpenGL Programming Guide: The Official Guide to Learning OpenGL (8th Edition)

    Includes Complete Coverage of the OpenGL® Shading Language! Today’s OpenGL software interface enables programmers to produce extraordinarily high-quality computer-generated images and interactive ...

    OpenGL.rar_OpenGL 线框_opengl 线框消隐

    计算机图形学,OpenGL线框消隐的一个很好的程序

    OpenGL超级宝典 第5版 中文版 pdf

    《OpenGL超级宝典(第5版)》是OpenGL及3D图形编程最好的入门指南,涵盖了使用最新版本的OpenGL进行编程所需要的主要知识。全书分三部分,共16章,另有3个附录。第一部分包括第1章到第7章,介绍如何构建一个使用...

    OpenGL 开发教程chm

    OpenGL 基础图形编程教程,chm格式,OpenGL 开发资料汇编,虽然这个教程很小,不过觉得内容挺全的,一共分二大部分:Jeff Molofee的OpenGL教程和OPenGL基础图形编程教程,在Jeff Molofee的OpenGL教程里,你将学习第...

    opengl c++opengl c++opengl c++

    opengl c++opengl c++opengl c++opengl c++opengl c++opengl c++

    visual studio 2005下OpenGL配置

    visual studio 2005下OpenGL配置 vs2005下OPENGL配置 visual studio 2005下OpenGL配置 vs2005下OPENGL配置 visual studio 2005下OpenGL配置 vs2005下OPENGL配置 visual studio 2005下OpenGL配置 vs2005下OPENGL配置 ...

    OpenGLES.zip Android官方OpenGL例子

    The example code in this class uses the OpenGL ES 2.0 APIs, which is the recommended API version to use with current Android devices. For more information about versions of OpenGL ES, see the OpenGL ...

Global site tag (gtag.js) - Google Analytics