计算机图形学基础

更新时间:2024-02-18 作者:用户投稿原创标记本站原创 点赞:9901 浏览:43396

OpenGL入门学习——写给想用计算机画图的朋友

OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1,与C语言紧密结合. 2,强大的可移植性. 3,高性能的图形渲染. 总之,OpenGL是一个很NB的图形软件接口.至于究竟有多NB,去看看DOOM3和QUE4等专业游戏就知道了.

说起编程作图,大概还有很多人想起TC的#include<,graphics.h>,吧 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的就靠TC那可怜的640*480分辨率,16色来做吗显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1,与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的.如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单. 2,强大的可移植性. 微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机).而OpenGL不仅用于Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机,各种专业计算机(如:医疗用显示设备)上都有应用.并且,OpenGL的基本命令都做到了硬件无关,甚至是平台无关. 3,高性能的图形渲染. OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先. 总之,OpenGL是一个很NB的图形软件接口.至于究竟有多NB,去看看DOOM3和QUE4等专业游戏就知道了. OpenGL网站(英文) opengl. 下面我将对Windows下的OpenGL编程进行简单介绍.

学习OpenGL前的准备工作

第一步,选择一个编译环境 现在Windows系统的主流编译环境有VisualStudio,BrolandC++Builder,Dev-C++等,它们都是支持OpenGL的.但这里我们选择VisualStudio2005作为学习OpenGL的环境.

第二步,安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows环境下的GLUT下载地址:(大小约为150k) opengl./resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的连接: upload.programfan./upfile/200607311626279.zip Windows环境下安装GLUT的步骤: 1,将下载的压缩包解开,将得到5个文件 2,在"我的电脑"中搜索"gl.h",并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的"VC\PlatformSDK\include\gl文件夹").把解压得到的glut.h放到这个文件夹. 3,把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的"VC\lib"文件夹). 4,把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内.(典型的位置为:C:\Windows\System32) 第三步,建立一个OpenGL工程 这里以VisualStudio2005为例. 选择File->,New->,Project,然后选择Win32ConsoleApplication,选择一个名字,然后按OK. 在谈出的对话框左边点ApplicationSettings,找到Emptyproject并勾上,选择Finish. 然后向该工程添加一个代码文件,取名为"OpenGL.c",注意用.c来作为文件结尾. 搞定了,就跟平时的工程没什么两样的.


第一个OpenGL程序 一个简单的OpenGL程序如下:(注意,如果需要编译并运行,需要正确安装GLUT,安装方法如上所述) #include<,GL/glut.h>, voidmyDisplay(void) { glClear(GL_COLOR_BUFFER_BIT), glRectf(-0.5f,-0.5f,0.5f,0.5f), glFlush(), } intmain(intargc,char*ar[]) { glutInit(&,argc,ar), glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE), glutInitWindowPosition(100,100), glutInitWindowSize(400,400), glutCreateWindow("第一个OpenGL程序"), glutDisplayFunc(&,myDisplay), glutMainLoop(), return0, } 该程序的作用是在一个黑色的窗口画一个白色的矩形.下面对各行语句进行说明.

怎么样代码还不算长吧 首先,需要包含头文件#include<,GL/glut.h>,,这是GLUT的头文件. 本来OpenGL程序一般还要包含<,GL/gl.h>,和<,GL/glu.h>,,但GLUT的头文件中已经自动将这两个文件包含了,不必再次包含. 然后看main函数. intmain(intargc,char*ar[]),这个是带命令行参数的main函数,各位应该见过吧没见过的同志们请多翻翻书,等弄明白了再往下看. 注意main函数中的各语句,除了最后的return之外,其余全部以glut开头.这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍. 1,glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次.其格式比较死板,一般照抄这句glutInit(&,argc,ar)就可以了. 2,glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色).GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲).更多信息,请自己Google.当然以后的教程也会有一些讲解. 3,glutInitWindowPosition,这个简单,设置窗口在屏幕中的位置. 4,glutInitWindowSize,这个也简单,设置窗口的大小. 5,glutCreateWindow,根据前面设置的信息创建窗口.参数将被作为窗口的标题.注意:窗口被创建后,并不立即显示到屏幕上.需要调用glutMainLoop才能看到窗口. 6,glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用.(这个说法不够准确,但准确的说法可能初学者不太好理解,暂时这样说吧). 7,glutMainLoop,进行一个消息循环.(这个可能初学者也不太明白,现在只需要知道这个函数可以显示窗口,并且等待窗口关闭后才会返回,这就足够了.) 在glutDisplayFunc函数中,我们设置了"当需要画图时,请调用myDisplay函数".于是myDisplay函数就用来画图.观察myDisplay中的三个函数调用,发现它们都以gl开头.这种以gl开头的函数都是OpenGL的标准函数,下面对用到的函数进行介绍. 1,glClear,清除.GL_COLOR_BUFFER_BIT表示清除颜色,glClear函数还可以清除其它的东西,但这里不作介绍. 2,glRectf,画一个矩形.四个参数分别表示了位于对角线上的两个点的横,纵坐标. 3,glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待).其作用跟fflush(stdout)类似.

大家可以按照上面的叙述,自己设置编译器,下载GLUT,并亲手编译示例代码. 祝大家成功~ 以后有空我会陆续放出后面一点的教程. 声明:我本人也是OpenGL菜鸟,大家可不要指望我可以教大家写个"星际争霸"什么的.当然也欢迎有此能力的朋友能给我们上一上课了.

一定要记住,不要指望通过一本教材就学会计算机图形学,它比你想象的要复杂的多.

1.引言 计算机图形学是用计算机来画东西的学科,数字图象处理是把外界获得的图象用计算机进行处理的学科.在法国,图形图象是一门课程.

如何学习计算机图形学呢除了计算机图形学的基础知识以外,你还需要有以下的知识,你懂的越多,当然做的越好.

*英语,你一定要把英语学好,如果你想学习计算机图形学的话,尽量看英文的书籍和资料

*数学,计算机图形学里面的数学用的比较多,,我们可以列举一些常用的: 高等数学,数值分析,微分几何,拓扑,概率,插值理论,(偏)微分方程等

*物理,如果你要进行基于物理的建模,一些物理理论是要学习的: 力学(运动学,动力学,流体力学等),光学,有限元等

*编程语言:C或C++是计算机图形学最通用的'普通话',

*数据结构:你需要数据结构来描述你的图形对象,除了通用的链表,树等数据结构外,图形学还有自己特殊的数据结构

*其他类别:有的时候你需要其他学科的知识,根据你的需要去学习吧

上面列举的不是你必须学习的东西,而是计算机图形学可能会用到的东西,一定要记住,不要指望通过一本教材就学会计算机图形学,它比你想象的要复杂的多.

2.图形学的问题 每个学科都有自己学科的特定问题,图形学要解决的是如何画出图来,得到需要的效果,当然这是图形学最大的一个问题.

在开始学习计算机图形学的时候,找一本简单的书看,对计算机图形学有个大概的认识,你就可以开始图形学之旅了:

OpenGLProgrammingGuide:TheOfficialGuidetoLearningOpenGL,Version1.4,FourthEdition OpenGLSuperBible(3rdEdition)

是比较好的学习计算机图形学的入门教材,在练中去学,一开始就去啃Foley的ComputerGraphics:PrinciplesandPractice,SecondEditioninC不是好主意,会看的一头雾水,一本什么都讲的书的结果往往是什么都没讲清楚.

当你把OpenGL的基本内容掌握之后,你对图形学就有了大概的了解了

那么下面你可以来学习一下计算机图形学的数据结构和算法,下面的书比较适合JosephO'Rourke的ComputationalGeometryinC,书里面有C的源代码,讲述简单,清晰,适合程序员学习

总的来说,计算机图形学涉及到2大部分:建模和渲染

2.1建模

你想画一个东西,首先要有它的几何模型,那么这个几何模型从什么地方来呢下面的书很不错的: GeraldFarin的CurvesandSurfaceorCAGD:APracticalGuide这本书就有一点的难度了,呵呵,要努力看啊

这本书算是CAGD(计算机辅助几何设计)的经典图书,CAGD方面的全貌,还有2本很好的讲述曲面的书Bezier和Nurbs的书LesA.Piegl,WayneTiller的TheNurbsBook书里面有NURBS曲线,曲面的程序伪代码,很容易改成C的,书讲的通俗,易懂,但是你要有耐心看的:)

曲线与曲面的数学 这本书是法国人写的中文翻译版,里面还有Bezie本人写的序J,翻译的很不错的,看了你就掌握Bezier曲面技术了

//另外一些你想知道的事情:其他的造型方式-开始 注意:在后面会有这样的章节,标明 //另外一些你想知道的事情:其他的造型方式-开始 //另外一些你想知道的事情:其他的造型方式-结束 里面是我认为的一些高级话题,跳过他们不影响你学习计算机图形学,但是要学好就要注意了,呵呵 还有其他的一些造型技术,比如: 隐式曲面(ImplicitSurface)的造型: 就是用函数形式为F(x,y,z)等于0的曲面进行造型,这样的造型技术适合描述动物器官一样的肉乎乎的东西.

有2本书推荐大家 JulesBloomenthal编辑的IntroductiontoImplicitSurfaces,是一本专着,讲述了ImplicitSurface建模型(Modeling),面片化(Polygonization),渲染(Rendering)的问题

LuizVelho的ImplicitObjectsComputerGraphics也是一本专着,讲述个更新的一些进展细分曲面(SubdivisionSurface)造型当用NURBS做造型的时候,曲面拼接是复杂的问题,在动画的时候,可能产生撕裂或者褶皱,SubdivisionSurface用来解决这个问题 JoeWarren的SubdivisionMethodorGeometricDesign:AConstructiveApproach就是这方面的专着

从实际物体中得到造型,现在的技术可以用三维扫描仪得到物体表面的点,然后根据这些点把物体的表面计算出来,称为重建(Reconstruction),因为这些技术之在文章中论述,所以我们省略对它的描述

//另外一些你想知道的事情:其他的造型方式-结束

下面还是一个高级话题:)

//另外一些你想知道的事情:光有造型是不够的!-开始在你的几何模型做好之后,有一些问题需要对这个模型进一步处理,得到适合的模型,当面片很多的时候,或者模型很复杂的时候,需要对几何模型进行简化,才可以满足一些实时绘制的需要,这个技术叫做层次细节(LOD-LevelofDetail).下面的书就是讲这个的: DidLuebke编着的LevelofDetailfor3DGraphics //另外一些你想知道的事情:光有造型是不够的!-结束

2.2渲染 有了模型,怎么把这个几何模型画出来呢这个步骤就是渲染啦

如果你看了上面的OpenGL的书,那么你就知道一些渲染的知识了,但是别高兴的太早,OpenGL使用的是局部光照模型(LocalIlluminationModel),不要被这个词吓住了

LocalilluminationModel指的是在做渲染的时候只考虑光源和物体之间的相互作用,不考虑物体和物体之间的影响,所以OpenGL不支持阴影,一个(半)透明物体的效果..,这些需要考虑物体之间的影响才可以实现.

//另外一些你想知道的事情:OpenGL可以实现阴影-开始 OpenGL本身不支持,但是通过一些方法可以实现的:),用Google搜索一下 ShadowVolume,OpenGL就找到答案啦 //另外一些你想知道的事情:OpenGL可以实现阴影-结束

GlobalIlluminationModel这类模型考虑的就比较全啦.现在关于GlobalIllumination的技术有3大类,具体的技术就不在这里介绍了,如果想了解,可以联系我,大家一起讨论:

光线追踪(RayTracing) 关于RayTracing的好书有2本:

AndrewGlassner的AnIntroductiontoRaytracing Glasser是图形界的名人,这本书也是RayTracing的经典

R.KeithMorley,PeterShirley的RealisticRayTracing,SecondEdition 这本书第一版是伪代码,第二版是C代码.它的结构不是很清楚,虎头蛇尾的感觉.

辐射度(Radiosity) 关于Radiosity的好书有4本: MichaelCohen的RadiosityandRealisticImageSynthesis,Cohen获得SIGGRAPH1998计算机图形学成就奖,他把Radiosity变成实际可用,现在Cohen在MSR图形http://research.microsoft./~cohen/CohenSmallBW2.jpg

FrancoisX.Sillion的RadiosityandGlobalIllumination,Sillion是法国人,他的主要研究方向是Radiosity,这本书写的很不错的,非常清晰

PhilipDutre的新书AdvancedGlobalIllumination,看起来还不错,刚拿到手,还没看,呵呵,所以不好评价

IanAshdown的Radiosity:AProgrammer'sPerspective 有源代码的书啊!!就凭这个,得给5*****

Photonmapping 这个我也不知道怎么翻译,呵呵.这个技术出现的比较晚,一本好书! HenrikWannJensen的RealisticImageSynthesisUsingPhotonMapping HenrikWannJensen是Photonmapping技术的发明者

3.3这些也是图形学吗图形和图象的区别模糊了:( 除了上面讲的'经典'的计算机图形学,还有下面的一些东西,它们也叫计算机图形学吗是的!!! 3.3.1非真实性图形学(Non-PhotorealisticGraphics) 真实性不是计算机图形学的唯一要求,比如:你给我画一个卡通效果的图出来,或者我要用计算机画水彩画怎么办或者:把图象用文字拼出来怎么做,解决这些问题要用到非真实性图形学,好书继续推荐!!! BruceGooch,AmyAshurstGooch的Non-PhotorealisticRendering

3.3.2体图形学(VolumeGraphics) 用CT机做很多切片(比如头骨),那么能通过这些切片得到3D的头骨吗VolumeGraphics就是解决这样的问题的 MinChen编着的VolumeGraphics

上面的2个图形学技术就和图象的界限不明显了,实际上他们是图形图象的综合 4.还有其他的书吗 还有一些好书啊,呵呵,好书看不完的:),继续放送:

GraphicsGemsI~V,一大帮子人写的书,包括研究人员,程序员等 有计算机图形学的各种数据结构,编程技巧

TomasAkenine-Moller等人编着的Real-TimeRendering(2ndEdition) 许多最新的计算机图形学进展

DidEbert等人的Texturing&,Modeling:AProceduralApproach,ThirdEdition 讲述如何通过程序实现纹理,山,地形等图形学要素 F.KentonMusgre号称分形狂(FractalMania) KenPerlin就是Perlin噪声的发明者,用过3d软件的人对PerlinNoise不会陌生的

关于图形学的特定对象,有特定的专题图书, EvanPiphoFocusOn3DModels,对于图形学的常用模型格式,进行了讲解 TrentPolack的FocusOn3DTerrainProgramming,讲地形的 DonaldH.House的ClothModelingandAnimation,讲布料的 NikLever的Real-time3DCharacterAnimationwithVisualC++,讲角色动画的 等

还有:) RichardParent的ComputerAnimation:AlgorithmsandTechniques,当然是讲动画的啦,呵呵. DidH.Eberly的3DGameEngineDesign:APracticalApproachtoReal-TimeComputerGraphics,有代码的啊!呵呵:)

最后,没事情的时候,看看下面的书吧 AlanH.Watt,3DComputerGraphics(3rdEdition)

JamesD.Foley等人的ComputerGraphics:PrinciplesandPracticeinC(2ndEdition),这本圣经没事的时候再看吧,呵呵

累了:(不说了,上面的书差不多了,还有一些shader的书,我不了解,以后会补上的:)

5.从哪里找到这些书啊还有什么资源啊 我保证,上面的书在amazon.都可以写到:)别打我

来自网络上的推荐,未一一验证,如果有任何问题请告诉ITHao.COM,:ithao123@163.,谢谢

重点推荐:opengl.:opengl的网站,内容丰富,学习opengl知识的百宝箱,圣地.

重点推荐:nehe.gamedev./:NeHe网站的opengl教程,讲解的非常详细,非常适合初学者,把上面的教程看完,应该对opengl有初步的认识.

sgi./products/software/opengl/:sgi公司的opengl主页.

eecs.tulane.edu/Terry/OpenGL/Introduction.#Introduction:tulane大学opengl教程

rush3d./reference/opengl-bluebook-1.0/bk02.

:opengl参考手册(referencemanual)

xmission./~nate/opengl.:NateRobin的教程,不同的视角,和演示,比nehe来的直观,适合对opengl的初步了解.

gamedev./reference/list.aspcategoryid等于31

GameDev的opengl主页,有很多技术帖子,相当不错.

mevis.de/opengl/opengl.:openglindex对所有的opengl命令的详细解释.

codecolony.de/opengl.:codecolony的opengl教程

基本上就是这些,初学者把nehe的教程学完,再作深入的学习,是一个不错的选择.

API是工具,不是本质,OpenGL/Direct3D的本质是图形学,而不是OpenGL/Direct3D的本身,API的本身只是一些Interface而已.

最近很多人在问,我该如何学习OpenGL我学完了OpenGL了,该怎么用 我想在回答这些类似的问题以前先和大家谈谈怎么学习API的方法,或许谈完了,我就不需要回答了. 首先,我认为API是工具,不是本质,OpenGL/Direct3D的本质是图形学,而不是OpenGL/Direct3D的本身,API的本身只是一些Interface而已.如果你明白图形学的原理.那么你很容易这些接口的作用,以及为什么要有这些接口的存在.所以,我要说的第一点是:你要学习3D编程,不是学会了OpenGL/Direct3D就可以了.甚至会不会这些API都不是那么的重要(虽然这么说,或许很多人不太赞同).最重要的,最根本的是,你要明白这些API背后的图形学的原理---因为那才是根本中的根本. 下面我来介绍我对API学习的看法. 我认为API的学习有两种方法:一是正向学习.二是反向学习. 一:正向学习,所谓的正向学习,就是学习API的本身.我觉得这种方法是一种BruteForce行为.不是很好.我们只要看看API的特性,有那些部分.就可以了.比如学习Direct3D的时候,我们要知道它如何初始化,以及它和操作系统的结合.它在Direct3D8里引入了VS/PS.最后就是创建一个Direct3D应用的步骤和方法.这些就足够了.要不然.Direct3D那么多的函数,每一个都会要了我的命. 正向学习的第二个作用就是你在熟悉了图形学和大概了解了API后,有空就来看看API的细节,然后思索一下API里提供的一些特性对你的程序有什么作用.比如Direct3D里的TwoSideStencil.OpenGL里的TextureCombine等. 二:逆向学习.这是根本的方法,到了这一步,你就可以真正的算是图形学入门了.这要求你要有一定的图形学基础.比如,你现在开始做一个demo.你预计你的demo里有一堆眩眩的效果,当然你也要明白你的这些眩眩的效果要怎么实现的.然后你去找API里对应的功能,我想如果你的想法正常,一般的功能在Direct3D/OpenGL里应该都会有的.当然你也会碰到你想要的功能在这些API里没有,但是这不重要,重要的是你又学到新东西了---这个特性在XXAPI里不支持^_^. 通常我是采用先正向,再逆向,同时再进行正向学习的方法.希望以上的建议,对各位初学者有一定的帮助.

如何建立一支强力的手机游戏开发团队的问题: STEP.1找一名经验丰富的策划做LEADER, STEP.2招聘, STEP.3办公室和设备

呵呵,现在有很多公司要开始开发手机游戏,那以下这篇文章值的大家看看,说不定有些益处,我想对从事手机游戏开发行业的人来说,也是一个很好的文章,可以找到自己的定位,这样的公司,这样的团队要什么样的人!(在Baidu里找的) 各位,今天我们来谈谈如何建立一支强力的手机游戏开发团队的问题. STEP.1找一名经验丰富的策划做LEADER 一般来说,策划在游戏开发团队中的作用很难界定,因为他并不想画图的艺术家或编码的科学家那样有明显的标签,也不像写故事的剧作家那样有明显的工作成果,所以长期以来,在我国的游戏业界很有些人将策划与办公室助理划上等号.其实这种错误是因为对游戏开发工作本身缺乏了解,和我们国家并没有成熟的游戏人才培养氛围,使得大量滥竽充数的伪策划充斥业内,才造成了如今这种劣币淘汰良币的事实. 一个真正的策划是什么都要通的,市场,技术情报,沟通,美术,音乐,程序,编剧,管理流程,宣传,软硬件器材都要考量,虽然不见得全要精通,但游戏策划事实上相当于一部电影的导演. 正因为策划的工作范围涉及了如此广泛的方面,所以策划对于聘用什么样的人才最是要心中有数,若非如此,自然不能对游戏开发的各个环节了如指掌,也不能对游戏的质量予以把握,出来的产品会是什么样子,恐怕只有上帝知道. 同时,为了能彻底的贯彻策划意图,将停留在幻想阶段的策划案变成实实在在的游戏,必须要给予LEADER必要的权力,只有这样才能做到上令下行,才能将游戏在保证质量的前提下制作出来. 本来很多优秀的策划案就是因为策划的意图不能贯彻执行最终都变成了一纸空谈,这是游戏开发公司必须要重视的问题. STEP.2招聘开始了 有了一名经验丰富的策划后,不要犹豫,派他去吧! JA游戏由于目前的功能有限,所以一般的开发团队主要是需要程序,美工这两种人才. 目前市场上的主流机型,比如NOKIA,MOTO等都支持J2ME语言,所以程序员也要以此为主要技能,同时游戏编程与普通的软件编程也有很大区别,计算机图形学和各种优化图像大小的算法多少也有要懂些,如果有实际的开发经验,并且热爱游戏的话,那就太完美了. SYMBIAN游戏主要使用C++语言编程,其他条件与J2ME程序员相同. 美工方面主要要求是掌握点阵图的画法.软件以PHOTOSHOP为主,对色彩构成必须很了解,手绘技能由于手机游戏要求的图都是很小尺寸的图形,所以不是很重要.别的方面还是那句话——如果有实际的开发经验,并且热爱游戏的话,那就太完美了. 目前业内手机游戏方面的有经验人才薪资都被炒的虚高,所以我认为如果没有迫切压力的话,不妨试着从新手培养,只要坚持热爱游戏和心态踏实这两点原则,不难在短时间内培养出优秀的人才,国内着名的手机游戏开发论坛上并不缺乏这类人的身影,何况还可以通过和NOKIA等厂商在各个大学中开办的培训专业里挑选.而美工方面由于近年动漫市场的火爆比找程序员更容易,夸张点说随时都能抓出一大把技艺高超的艺术家来. 其他人员,如配乐,测试等可以等发展达到一定程度后再委以专人负责,初期可以由其他部门人员负责. 薪资上,刚毕业的新人试用期一律以3K/M为基准,有过实际开发经验的则按情况而论,估计在6-8K左右. STEP.3办公室和设备 电脑基本配置如下: CPU:IntelCeleron42.4G 主板:技嘉GA-8I845PE-RZ 内存:Hy256MDDR400 硬盘:希捷酷鱼7200.7/ST380011A 显卡:小影霸G8520D 显示器:优派E70f 键盘:Microsoft光学灵动鲨套装BasicOpticalDesktop 机箱:华康107(空箱) 电源:航嘉BS2000+ 手写笔:WACOM 总计:4500元左右 其中程序员所用的电脑不需要手写笔,可以改为增加一条256M内存. 还需要购写几部市场主流的手机用于测试,相应的通讯工具如蓝牙,IRC等设备也必须齐备. 另外就是最好有单独的办公室,将游戏开发部门同其他部门员工分隔开来,避免相互之间的影响. 一个完整的手机游戏开发团队最重要的资产就是人,在此我们得感谢互联网将我们带进了这个资讯发达得世界,得此助力,所需要得一切人才基本上都能在网上找到.当将这些人装到一个办公室之后,如何扬长避短,人尽其用,发挥出最大潜能,制作出世界一流的手机游戏则是管理者最为重要的问题.

要看开发什么游戏了,开发2DRPG,则不需要那么多知识,C++,DIRECTX,数据结构和计算机图形常识,RPG游戏制作流程及常识,会用MFC或VB来开发地图脚本编辑器,最后加上一些算法,A*,ALPHABLENDING,斜45度地图技术等就可以了.

游戏开发所需知识 数学基础:高等数学,线性代数,离散数学,数值分析等, 编程语言:c/c++,汇编(pascal,ja可选), 编程工具:vc++6.0,delphi, 操作系统:windowsapi,系统工作原理, 硬件基础:计算机工作原理,特殊硬件优化, 图形基础:计算机图形学,图形快速显示算法,抖动算法, 多媒体:波形文件回放,音频设备控制,视频图像的解码及播放, 压缩加密:声音,图像压缩解压缩算法,加密算法, 游戏sdk:opengl,directx, 其它知识:人工智能,脚本算法,遗传算法,模糊逻辑,物理建模(uml),软件工程,编译原理. 日本游戏培训课程: 第一年:c语言,游戏设计,文章构成,windows开发,计算机系统导论,程序算法,游戏开发工具使用,情报数学,windows基础, 第二年:c++语言,windows程序游戏设计,cg数学,ja,playstation程序开发,可视化程序开发,数据通信,数据库入门, 第三年:游戏开发演习,游戏理论,directx研究,vb游戏制作,ja游戏制作,playstation研究, 游戏设计工具: 调试器:ollydbg(免费), 十六进制编辑:hexworkshop, 安装工具:installshieldprofessioal midi音乐:cakewalk, 声效音乐:cooledit(或soundfe), 3d建模:3dmax(或maya), 2d图形程序:paintshoppro(或painter), 2d画图程序:coreldraw, 2d图像处理:photoshop, c/c++编译器:vc++6.0,

要看开发什么游戏了,开发2DRPG,则不需要那么多知识,C++,DIRECTX,数据结构和计算机图形常识,RPG游戏制作流程及常识,会用MFC或VB来开发地图脚本编辑器,最后加上一些算法,A*,ALPHABLENDING,斜45度地图技术等就可以了

如果你想编游戏,而又有很多不清楚的问题,那请看这个: 1语言编程:c/c++ 2编程基础一定要好:数据结构,c/c++语言 2IDE集中开发环境:visualstudio.2003 3游戏开发SDK用DirectX9 4Win32api开始的时候不能学的太多 5可以不用MFC(如果你c++基础好,MFC学起来很简单) 6编网络游戏,使用winsock,通讯协议用TCP 7多下载源代码,观看之 8数学上的要求(其它基础文化课类似):不需要了解算法的来历,推导等,但一定要知道它们是干什么用的以及如何用 9学习STL,必须C++要过关!否则会很难学.首先要学会如何用STL,再想深入的话,学习STL的内部代码.STL首先从list,vector学起.

这里有一些经典推荐书籍介绍: 《微型计算机原理及应用》(第三版)编着:郑学坚周斌清华大学出版社 这是一本大学计算机基础教材,虽然内容不是很新鲜,但基础部分和汇编部分还是不错的,并且方面,嘿嘿,借也可以借到,拥有这本书的学生真是太多了.

《C程序设计》(第二版)作者:谭浩强清华大学出版社 这本书不用我说,大家也都知道,流传最广泛的C语言教材了.如果看好了此书,C的功底一定不错!

《数据结构(C语言版)》编着:严蔚敏吴伟民清华大学出版社 又是一本大学经典教材,想对程序有深入了解,数据结构不可不看,学了他,你才能打开专业之门.

《C++编程思想》(第二版)作者:BruceEckel机械工业出版社 嘿嘿嘿,又是经典之作,想学C++和OO,看他,绝对没错,不用写别的C++入门书籍了!!!绝对经典.

《TheC++StandardLibrary--ATutorialandReference》作者:NicolaiM.Josuttis 具有了一定的C++功底,该是看他的时候了,STL可是前人的思想精华.这本书主要讲述如何使用STL.(我只有这本书的电子版)

《设计模式》作者:ErichGamma等着机械工业出版社

本文试图帮助那些想实现自己的游戏,但又没什么编程经验的人.事实上,在这里我将检测定您根本不懂编程,我主要针对游戏开发的编程与设计进行阐述,而不会涉及设计艺术.我也不大算对这个行业展开长篇赘论(毕竟到处可以找到大量的资源),但我将指出在制作你自己的游戏时需要注意的某些事情.

作者:DeAstle 译者:Room3rd@hotmail. 1.作者简介 从1984年开始,DeAstle就做着游戏开发工作.日间,他是ROISystem,Inc的一名软件工程师,夜间,引领MyopicRhino游戏开发小组.只要有时间,他就会帮助GameDev.成为最好的游戏开发资源网站.当然,他也需要偶尔的休息. 2.译者序 3.正文 很多刚接触开发或没什么编程经验的人经常会问:我该如何开始游戏编程.即便直到现在,我也只是帮助回答我所知道一个又一个的基本问题.然而,最近这种类似问题太多了,多的有些难以接受了,所以,我决定还是把所有建议写下来,分享给大家吧. 本文试图帮助那些想实现自己的游戏,但又没什么编程经验的人.事实上,在这里我将检测定您根本不懂编程,我主要针对游戏开发的编程与设计进行阐述,而不会涉及设计艺术.我也不大算对这个行业展开长篇赘论(毕竟到处可以找到大量的资源),但我将指出在制作你自己的游戏时需要注意的某些事情.最后,这里展示的途径不是唯一的——也不一定是最好的——只是指出了该怎样制作游戏的学习途径,但对我和另外一些人来说,它已经足够好了. 选择一门语言 首先,你应该选择一门编程语言,可能会有很多选择:Basic,Pascal,C,C++,Ja等等,并且还会有许多许多争论:对于一个新手来说,到底应该(最好)使用哪种语言呢对于若干流行语言的讨论,可以看JohnHattan的精彩文章"WhatLanguageDoIUse"(gamedev./reference/design/features/whatlang). 我会建议使用C/C++,可能有人会说"对于新手来说太深奥了吧",起码我就是从C++开始的,所以对大家也应该没有问题.另外,C/C++应用很广泛,所以你可以找到大量的资源及帮助.先学C还是C++并不关键,毕竟只要学了一门,另一门也会触类旁通.然而,如果你决定先学习C++的话,还是应该在学习面向对象编程前首先要了解并掌握面向过程的开发.(也就是说,学习使用类前,你完全可以不用它们而很好进行开发) 如果采用C/C++的话,可能发觉深入会越发的困难,当然,重新开始再选择学习一门更为简单的语言,如Basic或者Pascal,也未尝不可,但我还是要告诉你,只要坚持下去,找到所需的资源,逐步深入,C/C++开发也会越来越得心应手. 接着你应该会问"那我该如何学习C/C++呢",很高兴你会这么问.最好的办法是上一个培训班(课),有老师或助教回答你的问题,能使你迅速提高,而留下的作业也会确认你是否真的掌握了你所学的知识点.(译者注:呵呵,在国内很难碰到这么好的教师吧) 如果上培训班对你来说不现实的话,那最好的办法就是找一些好的书籍.不要过于专注"精通"之类的书籍,否则,最后你可能会写上一大摞.我的建议是到最近的图书市场,在那里花些时间来浏览那些关于C/C++介绍(入门)的书籍,直到你确定你能读懂并能从那本书学到一些东西.然后,等你需要一些高级编程的书籍,或者是一本参考时,由于你对于这门语言有了些许了解,那时你就会知道你更需要什么.我们的"bookssection"中给了一些建议,地址为:gamedev./columns/books/. 在此,我还想费些口舌来提醒众多的编程新手,尤其是那些年轻人:没有钱写书或者干其他的事情.首先,你可以找到很多编程资源,其中包括本地库文件,还有MacmillanComputer出版物,通过mcp./personal可以找到成千上百的编程书籍.但是,其次,如果你真的想成为一名出色的程序员,有时脑筋不得不转个弯儿,使用任何东西(合法的,<,)都意味着你不得不数数口袋里的钞票然后掏出来. 通过Web完全可以找到大量的C/C++学习指南,但我觉得这些指南最好作为你学习书籍的补充,而不是作为单独的资源使用. 选择合适的编译器 你写的程序或者说是源代码,被存储为文本文件,你完全可以使用Notepad来写一个C/C++程序,但你还是需要"某些东西"来把源代码转化成可执行文件.在C/C++中,这个"某些东西"指的就是编译器. 编译器有很多,有些还是免费的,选择一个适合你的很重要,免费的更方便你去尝试,并选择一个你觉得最好的.然而,免费也通常意味着功能不全或者支持不够.幸运的是,大多数商业编译器也有入门及学术版本(introductoryoracademicversions),这样你就会花更少的钱而获得全部功能,唯一的限制是:你不能把用它编译的程序发布出去(毕竟在某段时间你不会发布等). 最后,你选择的编译器应该取决于你的花费及开发所处于的操作系统或平台.如果打算在Windows下开发,强烈建议使用MicrosoftVisualC++,它拥有一个强大的开发环境,使得开发变得更容易,并且毫无疑问开发Windows应用程序也没有其他更适合的编译器.(译者注:应该是针对C++而言,不过使用BC或者其他编译器的肯定不同意,但我也推荐使用VC,因为开发资料确实很多,虽然我也不太会:))如果你是学生,那太好了,你会以不错的折价得到一个拷贝,如果在DOS下编程,最好赌注DJGPP(delorie./djgpp),它是免费的.(译者注:的确真的确实非常好奇地问"DOS下开发的人还有么") 目标平台 尽管你最终可能发布到若干不同平台下,但你还是需要一种来重点学习.一旦学习一门语言,在进入开发前(包括图形开发),你可能需要使用一个非GUI的操作系统,如DOS或者UNIX,这会避免一些前置问题(theoverheadinvolvedwith),例如,Windows编程中,你就可以仅专注于语言的学习,(而不用担心界面部分). 一旦你准备好开始游戏编程了,你还是应该确定你的目标平台.还是让我们看看更多的(需要注意的)重要环节吧: Windows:如果你想在游戏行业中做的很专业,或者更多的人能玩你的游戏,那就选择Windows吧.重要的是你的用户在使用Windows—至少现在看来是这样的.Windows大量主流游戏使用了一种开发技术—DirectX,你可能听到过.DirectX是一个开发库,可以使你直接访问硬件层,也就意味着你可以开发高性能的游戏. DOS:DOS曾经是主流的游戏开发平台,但那些日子已经一去不复返了.尽管还有一些嗜好者仍在开发DOS游戏,但不再有商业游戏开发了,毕竟Microsoft不再给予更多的支持了.如果你刚开始做游戏,不要选择DOS,否则,不要执着于此.注意:由于还是有些DOS游戏编程的书籍,需要注意学习的话,可能会跟实际有所不同了.现在Windows游戏开发的书籍越来越多,这方面的争论也会越来越少. Linux:Linux作为一种UNIX变体,基于某些原因,近来变得很流行,这些因素包括稳定性,还有反Microsoft情绪在内.尽管Linux的用户数还相对较少,但由于对它的极度热衷和潜在市场的增长,使得可以作为目标平台的另一种选择. Macintosh:Mac有着大量的不容忽视的热衷者,而且我所了解得每个热衷者都极度渴望Macintosh下能有更多更好的游戏.虽然我没有看到过在Mac下开发的资源,但我还是确信肯定在某处存在着,因此这也是一种有理由选择的平台. 控制器(Consoles):控制器(也就是PS,N64,DC等等)游戏市场是巨大的,开发控制器游戏当然有前途,但是,非商业开发有很多因素使得有很大的不确定性.如果你在开发控制器游戏,可能是正在被一个商业游戏工作室所雇用吧. 备足原料(Ontogoodstuff) 现在可以开始讨论实际的游戏开发了,简单起见,我将检测定你已经选择了C/C++语言并在Windows下开发,但我所说的对其他条件同样适用. 首先,开发游戏前,你应该熟练掌握C/C++.你需要了解指针,数组,结构,函数,可能还有类,应该是很精通了.如果这样的话,那你就已经准备好了. 本文不可能教会游戏开发中的所有事情,幸运的是,也没有必要,Web上完全可以找到大量的相关书籍及指南.GameDev.应该有你所需要的.下面就是我的一些建议: 一本或更多的书籍.Windows中,开始开发游戏的话,"Windows游戏开发诀窍"(amazon./exec/obidos/ASIN/0672313618/gamedev)很适合你看.另外Bookssection也会找到其他一些书籍.通读整本书,尝试所有的范例,然后重新阅读你不能理解的部分. 以在线指南作补充.除了阐明你所读过的知识外,他们同样包含书中没有的知识点(主题). 问专家.书中或指南中都找不到答案的话,那就充分利用留言板和聊天室(译者注:感觉国内的聊天室没有太好的氛围,还是找些BBS或者论坛问吧),会有很多人愿意帮你解决的. 实际中,不应该是一个固定不变的过程,而应该是一个相似过程的不断重复. 仅仅学习是不够的,还需要把学到的东西应用,首先开始一个简单的游戏,然后逐步发展.可以看看GeoffHowland的文章:"我是怎样开发游戏的一条游戏开发的途径"(gamedev./reference/design/features/makegames). 起初,还是打算自己干吧,不要急于加入一个开发组,因为那只会让你的学习过程变得缓慢.一旦你自行完成了数个游戏,那对于一个开发组来说你也会起到更大的作用. 关于书籍我还是愿意多说两句:除游戏开发的书籍外,你需要阅读更多的书籍.为了能创建各式各样的游戏—如售货架上的那些—你将不得不钻研那些更高级的主题.有些你是可以在指南中找到的,但还是会需要更多的书籍:图形,人工智能,网络,物理等等.所以你需要上这些培训(课)—虽然你觉得这些对于游戏编程没有用—这简直够的上一个计算机科学专业的学位. 总结(Wrappingup) 这里还有些重要的提示: 不要仅仅积累知识,去应用.你绝对不会真正懂得或者理解一个事物,除非你使用它.用自己所学,实现些小的demo程序吧.可以做一下书中每章节后的练习题. 玩大量的游戏.这样做可以给你些启发,帮你实现更好游戏,同样也给你很好的理念(awelerelieffromprogramming). 帮助他人.通过帮助他人解决问题,你也会了解这个知识点,并学会更多东西. 完成你所开始的.不要陷入到你的思维陷阱中:"我知道我可以完成这个游戏,但我有了更好的主意,我要实现这个更好的(而不是原来的)."如果坚持完成你所开始的,你会懂得更多东西,而且你拥有了一个事物可以证明你并不是夸夸其谈.要想实现简单些的话,就不要在更多经验前尝试实际上很大,很复杂的游戏. 开始吧!现在你肯定陶醉于制作Quake4中,好的,虽然不见得如此,但至少你能沿着这条路走下去,并找到更多的信息,夜以继日的辛勤工作后,必定有收获.

OpenGLFAQ

标题可能写的大了点,不过没关系,以后还会加新的内容进来,今天先开个头...

学习OpenGL也有一段时间了,想想这一路走来也费了不少劲,现在论坛上仍然有很多人问一些初级的问题,当时我也是那样,可能连OpenGL到底是什么都不知道,呵呵,姑且将自己对OpenGL的一点点了解共享出来,希望对刚刚上路的朋友能有所帮助,还是那句话,如有不当之处,敬请指出,感激不尽!

1.什么是OpenGL

这个问题看起来傻了点,但对于从未接触过OpenGL的人来说,也并不简单.OpenGL

全称:OpenGraphicsLibrary中文译名没有什么说的,就叫它开放式图形库吧,说白了就是一套功能强大的3D图形处理API,如果你连什么是API都不明白的话,兄弟,那就别往下看了,最早是由SGI公司开发并维护的,主要是应用于其图形工作站.现在已经到了OpenGL2.1了,但是遗憾的是微软对OpenGL的支持只到1.1,因为DirectX和OpenGL本来就是死对头.

有一点要说明的是,OpenGL是跨平台的,可以运行在多种操作系统上,Windows,UNIX等等.

2.如何获取OpenGL

如果你使用的是Windows系统,那么你的系统上已经自带了OpenGL1.1的库文件了,如果想使用更高版本的OpenGL,比如1.2或者2.0,那么只能使用OpenGL扩展,关于如何下载和使用OpenGL扩展,请看这里:

myturn.blog.hexun./7704537_d.

强调一下:经常有人这样问:哪里有OpenGL2.0的库文件在Windows平台下,这是一个错误的说法,因为前面已经说过,Windows系统对OpenGL的支持只到1.1,1.1以后的新功能,都是以扩展的形式存在的,所以根本就没有什么OpenGL2.0的库文件了.如果你在别的平台下,也许会幸福一点,没办法,现在毕竟还是Windows的天下.

3.如何使用OpenGL开发程序

这也是经常被问道的一个问题,我只说一下Windows平台,UNIX我没玩过,没有发言权,在Windows平台下,最好使用VisualStudio作为开发环境,比如VC6.0和VC8.0(确切的说是VS2005中的VC++),如果你连编程序都不会,那最好先不要学这个,先把编程学明白再说吧

建议的开发环境:32bit-WINXP-PRO-XP2+VC++8.0

Vista么,刚刚出来,大家用起来可能不太习惯,VC6.0也可以,但最好用VC8,有新的干嘛不用呢,如果你非在2K上编的话,谁也拦不住你,但是我想说一句,2K要淘汰了,Vista都出来了!XP还能用几年要跟得上时代.

4.如何配置开发环境

由于OpenGL是跨平台的,所以与平台有关的东西它都没有,比如Windows系统上的窗口过程,OpenGL标准并不提供窗口函数,如果你要编写窗口函数,只能使用额外的工具函数库,这里我推荐大家使用glut库,当你使用额外的工具函数是,你需要导入一些文件,对于OpenGL来说,主要有三类文件:

.lib文件,也叫库文件,这个文件是编译是链接到程序中的

.dll文件,动态链接库文件,我们用到的函数就保存再这里

.h文件,头文件,包含在你的源程序中

下面我以glut库为例说一下如何放置这些文件,下载glut库以后,解压后共有三个文件,

这样放置:

如果你使用的是VC6.0

将glut.h放入VC98\Include\GL文件夹下

将glut.lib和glut32.lib放入VC98\LIB文件夹下

将glut32.dll和glut.dll放入Windows\System32\文件夹下

如果你使用的是VC8.0(检测定VC8.0装在C:\ProgramFiles)

glut.h放在

C:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\Include\gl

glut.lib和glut32.lib放在

C:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\Lib

glut32.dll和glut.dll放在

C:\Windows\System32\

在你的源程序中包含头文件时要这样写,比如包含glut.h,应该写成:

#include"GL/glut.h"

使用glut的另一个好处是,它已经包含了gl.h和glu.h,不必在程序中再指定这两个文件了

5.函数类型

在OpenGL的程序中经常会看到一些函数有一些固定的前缀,简单解释一下

a)gl核心函数

b)glu使用函数,对核心函数进行了简单封装,主要为了减少编程负担

c)aux辅助函数与平台相关,主要是在windows平台上管理输入输出

d)wgl专用函数,w代表windows,所以这些函数主要在windows平台使用

6.简单代码

说了一大堆,怎么也得给点代码看看,光说不练是扯蛋!来点最简单的,该省的都省了,也许不太规范,多了大家看着烦

在运行这个程序的时候,你需要按照上面第4步的方法配置好环境先.

#include<,windows.h>,

#include<,GL/glut.h>,

voiddisplay(void)

{

glClear(GL_COLOR_BUFFER_BIT),

glBegin(GL_POLYGON),

glVertex3f(0.25,0.25,0.0),

glVertex3f(0.75,0.25,0.0),

glVertex3f(0.75,0.75,0.0),

glVertex3f(0.25,0.75,0.0),

glEnd(),

glFlush(),

}

intmain(intargc,char**ar)

{

glutInit(&,argc,ar),

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB),

glutCreateWindow("IloveOpenGL"),

glutDisplayFunc(display),

glutMainLoop(),

return0,

}

没有任何注释,对于一个新手来说,给你留点思考的空间,对于老手来说,呵呵,我就不多说了,都明白.

简单写点,以后再扩充.

作为3D的工业标准,OpenGL在苹果上可以说无处不在,用起来也是分外的舒服. 一般OpenGL需要搭配一些窗口库来做,比如Qt,MFC等,或者用跨平台的GLUT. 好在GLUT是MacOSX自带的,所以直接用就可以了,很方便. OpenGL和GLUT作为Framework,都在/System/Library/Frameworks下.在程序里 唯一需要注意的是include的头文件. Windows提供了OpenGL和GLU,如果用GLUT,得自己去装一个.Windows下的头文 件使用方式一般是 #include<,Windows.h>, #include<,GL/gl.h>, #include<,GL/glu.h>, //#include"GLUT/glut.h" //dependsonwhereyouputGLUT 而在MacOSX下,一般是 #include<,OpenGL/gl.h>, #include<,OpenGL/glu.h>, #include<,GLUT/glut.h>, 在编译的时候,需要用到MacOSX里gcc的-framework参数,例如 g++-frameworkOpenGL-frameworkGLUT-frameworkFoundation-otestmy.cpp 附件里是以前的实验作业(一个消隐算法,一个是Phong光照模型),在MacOSX 和Windows下的效果都还可以.哪位大虾有空写两个游戏给大家玩玩吧(声音视频 等可以考虑用SDL来做),呵呵.OpenGL发展历程20世纪80年代末,90年代初,三维图形才开始迅速发展.于是各种三维图形工具软件包相继推出,如GL,RenderMan等.随着计算机技术的迅速发展,GL已经进一步发展成为OpenGL,现在OpenGL被认为是高性能图形和交互式视景处理的标准.这些三维图形工具软件包有些侧重于使用方便,有些侧重于绘制效果或与应用软件的连接,但没有一种软件包能在交互式三维图形建模能力和编程方便程度上与OpenGL相比拟.

OpenGL(即开放性图形库OpenGraphicsLibrary),是一个三维的计算机图形和模型库,最初是美国SGI公司为图形工作站开发的一种功能强大的三维图形机制(或者说是一种图形标准).它源于SGI公司为其图形工作站开发的IRISGL,在跨平台移植过程中发展成为OpenGL.SGI在1992年7月发布1.0版,后成为工业标准,由成立于1992年的独立财团OpenGLArchitectureReviewBoard(ARB)控制.SGI等ARB成员以方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现.只有通过了ARB规范全部测试的实现才能称为OpenGL.1995年12月ARB批准了1.1版本,最新版规范是2006年8月2日通过的opengl2.1,是自1.0版本后的第七次版本.新版本适应以往早期的版本,也就是2.0,1.5,1.4,1.3,1.2,1.1,or1.0GL不要任何改变就能在新版本下运行.

OpenGL被设计成独立于硬件,独立于窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/怎么写作器模式工作,是专业图形处理,科学计算等高端应用领域的标准图形库.它低端应用上的主要竞争对手是MS-Direct3D,该图形库是以COM接口形式提供的,所以极为复杂,稳定性差,另外微软公司拥有该库版权,目前只在Windows平台上可用.Direct3D的优势在速度上,但现在低价显卡都能提供很好的OpenGL硬件加速,所以做3D图形开发使用Direct3D已没有特别的必要,在专业图形处理特别是高端应用方面目前还没有出现以Direct3D技术为基础的例子,而游戏等低端应用也有转向OpenGL的趋势.

微软在WindowsNT对OpenGL的支持始于3.51,在Windows9x中的支持始于Win95OEMServiceRelease2.Windows下常用的OpenGL库有两种,MS实现的和SGI实现的,MS-OpenGL调用会自动检测是否存在显示卡制造商提供的ICD(InstallableClientDeviceDriver)驱动程序,有则调用ICD中的例程,否则使用CPU进行计算,所以能利用显示卡的OpenGL加速能力.对开发者来说使用方法并没有区别,只是有ICD驱动时更快些.SGI的版本是纯软件实现,不能利用硬件加速并且SGI已经在1999年宣布停止支持,但这套图形库便于调试程序,仍有不少开发者使用.

1999年SGI宣布与MS合作开发Ferihant,即Windows的下一代图形处理体系,包括DirectX与OpenGL的低级图形处理接口和以场景图支持为特点的高级接口,并且就此停止对其在Windows下的OpenGL实现的支持以示决心.此举令世人瞩目,大家都以为Windows图形处理快要过上幸福生活了,然而,不久,SGI宣布中止合作,并撤回派出的科学家,Ferihant基本上夭折.SGI称终止合作的原因是MS不肯积极合作,光想把SGI的技术合并进DirectX,但是真正内幕不详.不过以SGI在图形处理界的老大地位来说,还是有几分可信度的,因为MS最初支持OpenGL就不积极.

OpenGL可以运行在当前各种流行操作系统之上,如MacOS,Unix,Windows95/98,WindowsNT/2000,Linux,OPENStep,Python,BeOS等.各种流行的编程语言都可以调用OpenGL中的库函数,如C,C++,Fortran,Ada,Ja.OpenGL完全独立于各种网络协议和网络拓扑结构.目前,Microsoft公司,SGI公司,ATT公司的Unix软件实验室,IBM公司,DEC公司,SUN公司,HP公司等几家在计算机市场占主导地位的大公司都采用了OpenGL图形标准.值得一提的是,由于Microsoft公司在WindowsNT和Windows95/98中提供OpenGL标准,使得OpenGL在微机中得到了广泛应用.尤其是在OpenGL三维图形加速卡和微机图形工作站推出后,人们可以在微机上实现CAD设计,仿真模拟,三维游戏等,从而使得应用OpenGL及其应用软件来创建三维图形变得更有机会,更为方便.

OpenGL作为一个性能优越的图形应用程序设计界面(API),适用于广泛的计算机环境.从个人计算机到工作站和超级计算机,OpenGL都能实现高性能的三维图形功能.由于许多在计算机界具有领导地位的计算机公司纷纷采用OpenGL作为三维图形应用程序设计界面,所以OpenGL应用程序具有广泛的移植性.因此,OpenGL已成为目前的三维图形开发标准,是从事三维图形开发工作的技术人员所必须掌握的开发工具.OpenGL应用领域十分宽广,如军事,电视广播,CAD/CAM/CAE,娱乐,艺术造型,医疗影像,虚拟世界等.

1.1opengl1.1

1995年,SGI推出了更为完善的OpenGL1.1版本.OpenGL1.1的性能比1.0版提高甚多.其中包括改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置,法线,颜色,色彩指数,纹理坐标,多边形边缘标识的传输速度,引入了新的纹理特性等等.

1.2opengl1.3

2001年8月,ARB发布OpenGL1.3规范,它增加了立方纹理贴图,纹理环境,多重采样,纹理框架压缩等扩展指令,但是改进程度非常有限.

1.3opengl1.4

2002年7月,ARB正式发布OpenGL1.4,它也只加入了深度纹理/阴影纹理,顶点设计框架,自动纹理贴图等简单的功能.

1.3opengl1.5

2003年的7月,ARB公布OpenGL1.5规范.OpenGL1.5内包含ARB制定的"正式扩展规格绘制语言"(OpenGLShadingLanguagev1.0),该语言用于着色对象,顶点着色,片断着色等扩展功能,同时也将作为下一代OpenGL2.0版本的内核.OpenGL1.5的变化还增加了顶点缓冲对象(可提高性能),非乘方纹理(可提高纹理内存的使用效率)以及阴影功能,隐蔽查询功能等等.其主要内容包括

l顶点BufferObject:进行顶点配列方式可以提高性能 lShadow功能:增加用来比较Shadow映射的函数 l隐蔽查询(QUERY):为提高Curling性能采用非同步隐蔽测试 l非乘方纹理(Texture):提高mipmap等纹理内存的使用效率 lOpenGLShadingLanguagev.1.0:用于着色(shader)对象,顶点着色以及片断着色技术(fragmentshader)的扩展功能 1.4opengl2.0

OpenGL1.0推出后的相当长的一段时间里,OpenGL唯一做的只是增加了一些扩展指令集,这些扩展指令是一些绘图功能,像是ClearCoat,Multisample,视频及绘图的整合工具(某些是通过OpenML的努力而开发出来的,它本身属于OpenGLARB扩展指令之一. OpenGL2.0将在OpenGL1.3基础上进行修改扩充,但它将有下面五个方面的重大改进:①复杂的核心被彻底精简,②完全的硬件可编程能力,③改进的内存管理机制,支持高级像素处理,④扩展至数字媒体领域,使之跨越高端图形和多媒体范畴,⑤支持嵌入式图形应用. 为了在获得强大功能的同时保持理想的兼容性,OpenGL2.0经历以下两个发展阶段:第一个阶段注重兼容能力和平滑过渡,为此,OpenGL2.0核心将在精简后的OpenGL1.3功能模块的基础上加上可完全兼容的新功能共同组成,这种做法在满足兼容性的同时,还可将原有OpenGL中数量众多,且相互纠缠不清的扩展指令进行彻底精简.第一阶段的任务只是为了过渡,而第二阶段才是OpenGL2.0的真正成熟期.此时,ARB将合成出一个"纯OpenGL2.0"内核,纯内核将包含更多新增加的"精简型API函数",这些函数具有完全的可编程特性,结构简单高效,功能强大且应用灵活.除了完成这项任务外,ARB组织还得指导开发商抛弃繁琐的OpenGL1.X,转用更具弹性的"纯OpenGL2.0".

1.5opengl2.1

OpenGLversion2.1在2006年8月2日发布,是最初版本1.0后的第七个版本.尽管增加了版本的层析,支持高层析的编程shaders,但版本能够适于早期的版本,意味着运行2.0,1.5,1.4,1.3,1.2,1.1,or1.0GL的程序不用任何改变就可运行.

OpenGL2.1与当前的2.0版本相比,虽然版本号变更不如DX9到DX10那么巨大,但它却增加了多项实用的技术和功能