`
phinecos
  • 浏览: 343172 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(转)关于计算机图形学的学习

 
阅读更多

1. 引言
什么是计算机图形学?本文尽量避免给它做严格的定义,但是通常来说,计算机图形学是数字图象处理的逆过程,这只是一个不确切的定义,后面我们会看到,实际上,计算机图形学、数字图象处理和计算机视觉在很多地方的区别不是非常清晰的,很多概念是相通的。
计算机图形学是用计算机来画东西的学科,数字图象处理是把外界获得的图象用计算机进行处理的学科。在法国,图形图象是一门课程。
如何学习计算机图形学呢?除了计算机图形学的基础知识以外,你还需要有以下的知识,你懂的越多,当然做的越好。
*
英语,你一定要把英语学好,如果你想学习计算机图形学的话,尽量看英文的书籍和资料
*
数学,计算机图形学里面的数学用的比较多,,我们可以列举一些常用的:
高等数学,数值分析,微分几何,拓扑,概率,插值理论,(偏)微分方程
*
物理,如果你要进行基于物理的建模,一些物理理论是要学习的:
力学(运动学,动力学,流体力学),光学,有限元
*
编程语言:CC++是计算机图形学最通用的普通话
*
数据结构:你需要数据结构来描述你的图形对象,除了通用的链表、树等数据结构外,图形学还有自己特殊的数据结构
*
其他类别:有的时候你需要其他学科的知识,根据你的需要去学习吧

上面列举的不是你必须学习的东西,而是计算机图形学可能会用到的东西,一定要记住,不要指望通过一本教材就学会计算机图形学,它比你想象的要复杂的多。<?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本很好的讲述曲面的书BezierNurbs的书

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
RadiosityandRealisticImageSynthesisCohen获得SIGGRAPH1998计算机图形学成就奖,他把Radiosity变成实际可用,现在CohenMSR图形<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
RadiosityandGlobalIlluminationSillion是法国人,他的主要研究方向是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的内容:)

分享到:
评论

相关推荐

    《计算机图形学习题与解答(全美经典学习指导系列)》[PDF]

    本书主要讲述了计算机图表学中的关键内容,清晰地介绍了计算机图形学的基础概念和它们之间的关系,也介绍了计算机图形学的整体框架,并着重于数学结果和算法实现。书中所有的示例都可以很容易地转换成一个特定的...

    计算机图形学学习笔记.zip

    计算机图形学学习笔记,用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内容版)

    计算机图形学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,在屏幕上画出立方体的透视投影图形。...

    VB 计算机图形学算法演示系统

    种子填充算法,以边为标志的填充算法,橡皮筋直线、圆、椭圆、多边形,拖动技术,定位技术,旋转、平移、比例变换,线段裁剪,贝塞尔曲线绘制等图形学主要内容,可供授课时讲解使用,也可作为图形学入门者的学习参考...

    计算机图形学课程设计源码

    帮朋友做的图形学课程设计,实现了立方体,圆锥,圆柱,球体的平移,旋转,放大缩小等以及上色等基本功能,没能实现光照那部分功能。基本的矩阵变换算法来自网上,我只是从展示和代码组织上做了些改动,并在原来的...

    图形学相关源代码

    计算机图形学绘制线、圆、球体等基本几何二维图形的相关代码,可以提供给你们学习研究,欢迎大家前来下载。

    计算机图形学实验 opengl 三个实验 附有具体代码

    计算机图形学实验!OPENGL可视化 计算机图形学实验 opengl 三个实验 附有具体代码 跟VC6一样的 一、下载并安装glut库 opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 ...

    计算机图形学源码,一个学期的心血

    对3d图形的绘制,纹理映射,环境映射,旋转、平移以及边框颜色的改变···对学习opengl的同学应该有所帮助

    计算机图形学opengl实现简单绘图软件包

    这是计算机图形学实验,要求完成一个简单的绘图软件包,利用实验学习计算机图形学的主要内容,包括基本图形的实现,图形的平移、放缩、旋转操作,多边形的扫描线算法实现,平行投影、透视投影实现等等。虽然很是粗糙...

    计算机图形学完全课件打包

    包括计算机图形学的介绍,绘制直线的DDA算法,BERHAM算法,中点算法,绘制圆和椭圆的各种算法,填充的4种算法,裁剪的各种算法,图元的平移,缩放,旋转,以及贝塞尔曲线和B样...是学习计算机图形学不可多得的好资料。

    计算机图形学作业-基于C++实现MFC程序源码+项目说明.zip

    计算机图形学作业-基于C++实现MFC程序源码+项目说明.zip 【资源介绍】 MFC程序实现: 1.基本图形绘制: Bresenham、DDA、改进的Bresenham、系统库函数四种方法画直线, Bresenham画圆,Bresenham画椭圆,绘制矩形,...

    计算机图形学编程作业-使用opengl实现正方体的旋转缩放移动,并对正方体进行贴图+源代码+文档说明

    计算机图形学编程作业-使用opengl实现正方体的旋转缩放移动,并对正方体进行贴图+源代码+文档说明 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传...

    大学时代开发的一个图形学教学演示系统(源代码)

    “计算机图形学教学系统”,是帮助学习, 图形学的学生和工程人员的好工具,里面动态的演示了图形生成过程, 详细的源代码使你粘贴后就可以运行,其中包括DDA、bresenham、 逐点比较法直线生成算法;bresenham,DDA...

    基于MFC的字符生产与旋转算法实现

    使用VS 2017实现字符的生成与旋转,此资源包括完整的项目文件,可以直接使用。此代码仅供学习交流使用。

Global site tag (gtag.js) - Google Analytics