1. 引言
什么是计算机图形学?本文尽量避免给它做严格的定义,但是通常来说,计算机图形学是数字图象处理的逆过程,这只是一个不确切的定义,后面我们会看到,实际上,计算机图形学、数字图象处理和计算机视觉在很多地方的区别不是非常清晰的,很多概念是相通的。
计算机图形学是用计算机来画东西的学科,数字图象处理是把外界获得的图象用计算机进行处理的学科。在法国,图形图象是一门课程。
如何学习计算机图形学呢?除了计算机图形学的基础知识以外,你还需要有以下的知识,你懂的越多,当然做的越好。
*英语,你一定要把英语学好,如果你想学习计算机图形学的话,尽量看英文的书籍和资料
*数学,计算机图形学里面的数学用的比较多,,我们可以列举一些常用的:
高等数学,数值分析,微分几何,拓扑,概率,插值理论,(偏)微分方程…
*物理,如果你要进行基于物理的建模,一些物理理论是要学习的:
力学(运动学,动力学,流体力学…),光学,有限元…
*编程语言:C或C++是计算机图形学最通用的‘普通话’,
*数据结构:你需要数据结构来描述你的图形对象,除了通用的链表、树等数据结构外,图形学还有自己特殊的数据结构
*其他类别:有的时候你需要其他学科的知识,根据你的需要去学习吧
上面列举的不是你必须学习的东西,而是计算机图形学可能会用到的东西,一定要记住,不要指望通过一本教材就学会计算机图形学,它比你想象的要复杂的多。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
2. 图形学的问题
每个学科都有自己学科的特定问题,图形学要解决的是如何画出图来,得到需要的效果,当然这是图形学最大的一个问题。
在开始学习计算机图形学的时候,找一本简单的书看,对计算机图形学有个大概的认识,你就可以开始图形学之旅了:
OpenGLProgrammingGuide:TheOfficialGuidetoLearningOpenGL,Version1.4,FourthEdition
OpenGLSuperBible(3rdEdition)
是比较好的学习计算机图形学的入门教材,在练中去学,一开始就去啃
Foley的
ComputerGraphics:PrinciplesandPractice,SecondEditioninC
不是好主意,会看的一头雾水,一本什么都讲的书的结果往往是什么都没讲清楚。
当你把OpenGL的基本内容掌握之后,你对图形学就有了大概的了解了
3. 那么下面你可以来学习一下计算机图形学的数据结构和算法,下面的书比较适合
JosephO'Rourke的ComputationalGeometryinC,书里面有C的源代码,讲述简单,清晰,适合程序员学习
总的来说,计算机图形学涉及到2大部分:建模和渲染
3.1建模
你想画一个东西,首先要有它的几何模型,那么这个几何模型从什么地方来呢?下面的书很不错的:
GeraldFarin的CurvesandSurfacesforCAGD:APracticalGuide
这本书就有一点的难度了,呵呵,要努力看啊
这本书算是CAGD(计算机辅助几何设计)的经典图书,CAGD方面的全貌,还有2本很好的讲述曲面的书Bezier和Nurbs的书
LesA.Piegl,WayneTiller的TheNurbsBook
书里面有NURBS曲线、曲面的程序伪代码,很容易改成C的,书讲的通俗、易懂,但是你要有耐心看的:)
曲线与曲面的数学
这本书是法国人写的中文翻译版,里面还有Bezie本人写的序J,翻译的很不错的,看了你就掌握Bezier曲面技术了
//另外一些你想知道的事情:其他的造型方式-开始
注意:在后面会有这样的章节,标明
//另外一些你想知道的事情:其他的造型方式-开始
//另外一些你想知道的事情:其他的造型方式-结束
里面是我认为的一些高级话题,跳过他们不影响你学习计算机图形学,但是要学好就要注意了,呵呵
还有其他的一些造型技术,比如:
隐式曲面(ImplicitSurface)的造型:
就是用函数形式为F(x,y,z<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 11.25pt; HEIGHT: 11.25pt; mso-wrap-distance-left: 1.5pt; mso-wrap-distance-top: 1.5pt; mso-wrap-distance-right: 1.5pt; mso-wrap-distance-bottom: 1.5pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.blogcn.com/images/wink.gif" src="file:///C:/DOCUME~1/phinecos/LOCALS~1/Temp/msohtml1/01/clip_image001.gif"></imagedata></shape>=0的曲面进行造型,这样的造型技术适合描述动物器官一样的肉乎乎的东西,有2本书推荐大家
JulesBloomenthal编辑的IntroductiontoImplicitSurfaces,是一本专著,讲述了ImplicitSurface建模型(Modeling),面片化(Polygonization),渲染(Rendering)的问题
LuizVelho的ImplicitObjectsComputerGraphics也是一本专著,讲述个更新的一些进展
细分曲面(SubdivisionSurface)造型
当用NURBS做造型的时候,曲面拼接是复杂的问题,在动画的时候,可能产生撕裂或者褶皱,SubdivisionSurface用来解决这个问题
JoeWarren的SubdivisionMethodsforGeometricDesign:AConstructiveApproach就是这方面的专著
从实际物体中得到造型,现在的技术可以用三维扫描仪得到物体表面的点,然后根据这些点把物体的表面计算出来,称为重建(Reconstruction),因为这些技术之在文章中论述,所以我们省略对它的描述
//另外一些你想知道的事情:其他的造型方式-结束
下面还是一个高级话题:)
//另外一些你想知道的事情:光有造型是不够的!-开始
在你的几何模型做好之后,有一些问题需要对这个模型进一步处理,得到适合的模型,当面片很多的时候,或者模型很复杂的时候,需要对几何模型进行简化,才可以满足一些实时绘制的需要,这个技术叫做层次细节(LOD-LevelofDetail)。下面的书就是讲这个的:
DavidLuebke编著的LevelofDetailfor3DGraphics
//另外一些你想知道的事情:光有造型是不够的!-结束
3.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图形<shape id="_x0000_i1026" style="WIDTH: 11.25pt; HEIGHT: 11.25pt; mso-wrap-distance-left: 1.5pt; mso-wrap-distance-right: 1.5pt" alt="::URL::" type="#_x0000_t75"><imagedata o:href="http://www.blogcn.com/images/aurl.gif" src="file:///C:/DOCUME~1/phinecos/LOCALS~1/Temp/msohtml1/01/clip_image002.gif"></imagedata></shape>http://research.microsoft.com/~cohen/CohenSmallBW2.jpg
FrancoisX.Sillion的RadiosityandGlobalIllumination,Sillion是法国人,他的主要研究方向是Radiosity,这本书写的很不错的,非常清晰
PhilipDutre的新书AdvancedGlobalIllumination,看起来还不错,刚拿到手,还没看,呵呵,所以不好评价
IanAshdown的Radiosity:AProgrammer'sPerspective
有源代码的书啊!!就凭这个,得给5*****
Photonmapping
这个我也不知道怎么翻译,呵呵。这个技术出现的比较晚,一本好书!
HenrikWannJensen的RealisticImageSynthesisUsingPhotonMapping
HenrikWannJensen是Photonmapping技术的发明者
3.3这些也是图形学吗?图形和图象的区别模糊了:(
除了上面讲的‘经典’的计算机图形学,还有下面的一些东西,它们也叫计算机图形学吗?是的!!!
<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">3.3.1</chsdate>非真实性图形学(Non-PhotorealisticGraphics)
真实性不是计算机图形学的唯一要求,比如:你给我画一个卡通效果的图出来,或者我要用计算机画水彩画怎么办?或者:把图象用文字拼出来怎么做?,解决这些问题要用到非真实性图形学,好书继续推荐!!!
BruceGooch,AmyAshurstGooch的Non-PhotorealisticRendering
3.3.2体图形学(VolumeGraphics)
用CT机做很多切片(比如头骨),那么能通过这些切片得到3D的头骨吗?VolumeGraphics就是解决这样的问题的
MinChen编著的VolumeGraphics
上面的2个图形学技术就和图象的界限不明显了,实际上他们是图形图象的综合
4.还有其他的书吗?
还有一些好书啊,呵呵,好书看不完的:),继续放送:
GraphicsGemsI~V,一大帮子人写的书,包括研究人员,程序员…
有计算机图形学的各种数据结构,编程技巧
TomasAkenine-Moller等人编著的Real-TimeRendering(2ndEdition)
许多最新的计算机图形学进展
DavidEbert等人的Texturing&Modeling:AProceduralApproach,ThirdEdition
讲述如何通过程序实现纹理、山、地形等图形学要素
F.KentonMusgrave号称分形狂(FractalMania)
KenPerlin就是Perlin噪声的发明者,用过3d软件的人对PerlinNoise不会陌生的
关于图形学的特定对象,有特定的专题图书,
EvanPiphoFocusOn3DModels,对于图形学的常用模型格式,进行了讲解
TrentPolack的FocusOn3DTerrainProgramming,讲地形的
DonaldH.House的ClothModelingandAnimation,讲布料的
NikLever的Real-time3DCharacterAnimationwithVisualC++,讲角色动画的
……
还有:)
RichardParent的ComputerAnimation:AlgorithmsandTechniques,当然是讲动画的啦,呵呵。
DavidH.Eberly的3DGameEngineDesign:APracticalApproachtoReal-TimeComputerGraphics,有代码的啊!呵呵:)
最后,没事情的时候,看看下面的书吧
AlanH.Watt,3DComputerGraphics(3rdEdition)
JamesD.Foley等人的ComputerGraphics:PrinciplesandPracticeinC(2ndEdition),这本圣经没事的时候再看吧,呵呵
累了:(不说了,上面的书差不多了,还有一些shader的书,我不了解,以后会补上的:)
5.从哪里找到这些书啊?还有什么资源啊?
我保证,上面的书在www.amazon.com都可以买到:)别打我
那好,大部分的书在国家图书馆可以复印到,北京的兄弟有福啦,3年前的书借出来复印,1角/页,但是新书要早图书馆里复印,5~6角/页,还是比Amazon便宜啊,呵呵。
不行大家就到国外买,合买吧,还负担的起。
我对DirectX不了解,所以没有涉及关于DirectX的内容:)
分享到:
相关推荐
本书主要讲述了计算机图表学中的关键内容,清晰地介绍了计算机图形学的基础概念和它们之间的关系,也介绍了计算机图形学的整体框架,并着重于数学结果和算法实现。书中所有的示例都可以很容易地转换成一个特定的...
计算机图形学学习笔记,用webgl绘制彩色立方体,并对立方体进行旋转,平移,缩放的操作,另附书中函数库
1.三次cardinal样条曲线 2.正弦曲线与三次参数样条曲线 3.二次Bezier曲线 4.三次Bezier曲线 5.DeCasteliau曲线 7.三次B样条曲线和三次Bezier曲线的对比 8.双三次B样条曲面49重点 9.动态旋转双三次Bezier曲面实体模型
本书采用面向对象语言Visual C 6.0的MFC编程环境作为开发平台,系统讲解“基本图形的扫捕转换”、“二维变换和裁剪”、“三维变换和投影”、“自由曲线和曲面”、“分形几何”、... 本书为大学图形学入门的经典书籍。
(1、了解 C++.NET 开发基于 OPENGL 的图形应用程序的步骤。 2、了解 OPENGL 的流水线。 3、学习鼠标、键盘交互技术。 4、实现二点定矩形的橡皮筋技术。 ) 2、 实验二:定义四面体和填充图案 (1、通过段,...
该资源为计算机图形学课程综合实验内容,是在visualstudio平台下用OpenGL编写的程序。该程序综合了坐标变换、键盘鼠标交互控制、视点移动、光源、纹理贴图等图形学基本要求,主要实现了以下功能:1、在三维空间内...
计算机图形学pdf 内容可copy 适合要学习开发3d游戏的朋友们学习 希望对大家有所帮助 目录: 第1章基本图形的生成 1.1 直线 1.1.1 生成直线的DDA 算法 1.1.2 生成直线的中点算法 1.1.2 生成直线的Bresenham算法 ...
利用Visual Studiu2013 & OpenGL开发工具,编写一个魔方体旋转模拟显示程序,可用于计算机图形学课程设计。利于学习
1.在世界坐标系中定义一个立方体(由6个面组成),并给定观察点在世界坐标系中的位置(a,b,c)以及观察坐标系的方位角θ,俯仰角φ和姿态角α,另外再给定投影面离观察点的距离D,在屏幕上画出立方体的透视投影图形。...
种子填充算法,以边为标志的填充算法,橡皮筋直线、圆、椭圆、多边形,拖动技术,定位技术,旋转、平移、比例变换,线段裁剪,贝塞尔曲线绘制等图形学主要内容,可供授课时讲解使用,也可作为图形学入门者的学习参考...
帮朋友做的图形学课程设计,实现了立方体,圆锥,圆柱,球体的平移,旋转,放大缩小等以及上色等基本功能,没能实现光照那部分功能。基本的矩阵变换算法来自网上,我只是从展示和代码组织上做了些改动,并在原来的...
计算机图形学绘制线、圆、球体等基本几何二维图形的相关代码,可以提供给你们学习研究,欢迎大家前来下载。
计算机图形学实验!OPENGL可视化 计算机图形学实验 opengl 三个实验 附有具体代码 跟VC6一样的 一、下载并安装glut库 opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 ...
对3d图形的绘制,纹理映射,环境映射,旋转、平移以及边框颜色的改变···对学习opengl的同学应该有所帮助
这是计算机图形学实验,要求完成一个简单的绘图软件包,利用实验学习计算机图形学的主要内容,包括基本图形的实现,图形的平移、放缩、旋转操作,多边形的扫描线算法实现,平行投影、透视投影实现等等。虽然很是粗糙...
包括计算机图形学的介绍,绘制直线的DDA算法,BERHAM算法,中点算法,绘制圆和椭圆的各种算法,填充的4种算法,裁剪的各种算法,图元的平移,缩放,旋转,以及贝塞尔曲线和B样...是学习计算机图形学不可多得的好资料。
计算机图形学作业-基于C++实现MFC程序源码+项目说明.zip 【资源介绍】 MFC程序实现: 1.基本图形绘制: Bresenham、DDA、改进的Bresenham、系统库函数四种方法画直线, Bresenham画圆,Bresenham画椭圆,绘制矩形,...
计算机图形学编程作业-使用opengl实现正方体的旋转缩放移动,并对正方体进行贴图+源代码+文档说明 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传...
“计算机图形学教学系统”,是帮助学习, 图形学的学生和工程人员的好工具,里面动态的演示了图形生成过程, 详细的源代码使你粘贴后就可以运行,其中包括DDA、bresenham、 逐点比较法直线生成算法;bresenham,DDA...
使用VS 2017实现字符的生成与旋转,此资源包括完整的项目文件,可以直接使用。此代码仅供学习交流使用。