我的github

本书采用自顶向下的方法并辅以面向编程的方式,基于现代可编程GPU的着色器编程,将JavaScript和 OpenGLES2.0结合起来,利用WebGL技术编写可以在当前大多数浏览器中运行的示例,同时系统地介绍了 现代计算机图形学的核心概念、原理和方法。本书是作者多年来教学与科研工作的总结,涵盖了交互式图形编程、三维可编程绘制流水线、变换与观察、光照与着色、曲线曲面建模等基本的计算机图形学内容以及离散 技术、层级建模、过程建模、光线跟踪、并行绘制和体绘制等高级内容。为了方便读者进一步深人学习和研究,本书在每章后面提供了相关的建议阅读资料。

本书既可作为有一-定JavaScript、C、C++语言或者Java编程基础的计算机及相关专业高年级本科生或研究生的计算机图形学教材,也适合作为相关技术人员的参考书。

随着GPU和JavaScript引擎的速度与复杂性的日益增加,我们希望更多图形应用程序都可以使用WebGL开发或者移植到WebGL中。目前国外许多大学都已经将基于可编程GPU的高级着色语言融人计算机图形学的教学与实践中。因此,随着目前可编程GPU的快速发展,为了切实提高计算机图形学课程的教学质量与教学水平,更好地与国际计算机图形学教育及科研实践接轨,逐渐在我国高校的计算机图形学课程中引人基于可编程GPU绘制流水线及面向着色器编程的新型教学模式已是当务之急。译者多年从事计算机图形学的教学与研究,深知选择这样一本“基础性与先进性、理论性与应用性、科学性与通俗性"相结合且能满足目前计算机图形学新型教学模式教材的重要性。目前在国内外很少有基于这种新型教学模式的计算机图形学书籍,而本书第七版反映了计算机图形学在图形硬件设备和图形绘制标准等方面的最新发展现状。 相比于前面六个版本,第七版基于可编程GPU的WebGL着色器编程来介绍计算机图形学的相关原理、方法和技术,编写的三维图形示例能运行于最新的Web浏览器且不需要任何额外的插件或库。因此,本书的第七版能很好地满足新型教学模式的需求。与桌面版OpenGL相比,WebGL更适合讲授计算机图形学也是培养学生基于现代GPU的可编程计算思维的一本非常难得的优秀教材

本书特点:

内容丰富而又系统,基础性内容和拓展性主题相结合。本书涉及了现代计算机图形学课程几乎所有的主要内容,涵盖了交互式图形编程、三维可编程绘制流水线、变换与观察、光照与明暗绘制、曲线曲面建模等基本的计算机图形学内容以及离散技术、层级建模、过程建模、光线跟踪、并行绘制和体绘制等高级内容。

内容编排和组织独具特色,综合了知识性和实用性。本书采用了“自顶向下”和面向着色器编程的方法,使学生能既使用WebGL和JavaScript迅速地编写自己的交互式三维Web图形应用程序,又能系统地掌握计算机图形学的基本原理、方法和技术。

所有的应用程序采用WebGL技术标准,WebGL应用程序包含三种语言:HTML5、JavaScript和OpenGL着色器语言,虽然第七版中的许多示例程序的输出结果与以前的版本相同,但代码完全不同。

包含了一个高效的矩阵-向量工具包。

 相关代码:Index of /~angel/BOOK/INTERACTIVE_COMPUTER_GRAPHICS (unm.edu)

jiayaozhang/Interactive-Computer-Graphics-WebGL (github.com)

 

第1章 图形系统和模型

多年以来,讲授计算机图形学的传统方法把课程的起点放在如何在帧缓存中构造简单二维几何实体(比如点、直线、多边形)的光栅图像。接下来,大多数教科书讨论如何在计算机中定义二维或三维数学对象并利用二维光栅化的图元来绘制它们。

这种教学方法对于绘制简单对象的简单图像是很好的。可是,在现代图形系统中,我们希望充分利用软硬件的性能来绘制由计算机生成的三维对象的逼真图像,这个任务涉及图像生成的许多方面,比如光照、着色和材质的属性。因为大多数现代计算机图形系统都直接支持这样的功能,所以在这里我们更愿意为介绍生成这些逼真图像的方法做准备,而不是以后再去扩展一个功能有限的模型。

不管成像是数学的还是物理的,在任何成像过程里都必须有两个基本的实体:对象和观察者。对象在空间中的存在是不依赖于任何图像生成过程和任何观察者的。计算机图形学考虑的是合成的对象,我们通过指定各种几何图元(比如点、线和多边形)的空间位置来构造对象。在大多数图元系统中,利用一组空间中的位置,或者说顶点(vertex),就能够定义或者近似描述大多数对象。例如,两个顶点可以确定一条直线;一个有序的顶点列表可以确定一个多边形;球面可以由在球心的一个顶点和在球面上任意位置处的另一个顶点来确定。CAD系统的主要功能之一就是要提供一个界面,使用户可以方便地构造现实世界的虚拟模型。在第2章中,我们会看到如何用OpenGL构造简单的对象。在第9章,我们将学习一种定义对象的方法,这种方法可以把对象之间的关系考虑进来。

除了对象和观察者,还有一个重要的变量,光。如果没有光源,对象看起来是黑的,图像里不会有任何可见的东西。我们没有提及颜色是如何出现在图像中的,也没有提及对象表面的材质属性会对图像有什么影响。

这里的分析方法更注重物理过程。光源的光线照射到对象的各个表面,反射的光线中有一部分通过镜头进入到照相机中。光线和对象表面相互作用的细节决定了有多少光线进入照相机。

光是电磁辐射的一种形式。从经典的观点来看,我们把电磁能视为电磁波,即以波的形式传播,可以由其波长或者频率来表征。电磁波谱包括无线电波、红外线,还有能引起我们视觉系统响应的部分。波长在350~780nm之间的可见光谱称为可见光。给定光源的颜色由其在不同波长的能量分布决定。可见光谱的中间部分,即波长大约为520nm的光为绿色;波长大约为450nm的光为蓝色;波长大约为650nm的光为红色。正如在彩虹中所看到的那样,波长在红和绿之间的光为黄色;波长比蓝色更短的光为紫色。

幸运的是,在计算机图形学中,除了需要认识到不同的频率表现为不同的颜色以外,我们很少需要处理光的物理性质。

我们可以采取更传统的方法来处理光,但前提是光线足够强并且在某种程度上不考虑光的波动性。几何光学把光源建模为具有固定强度的光能发射器。几何光学认为,光线从光源出发沿直线到达与其相互作用的对象。一个理想的点光源从一个点向所有方向均匀地发射光线,发射出的光线可以是单一频率的,也可以包含多个频率。像灯泡这样更复杂的光源可以认为从一块区域上辐射能量,并且向某个方向发射的光线比向其他方向发射的光线更强。一个特定的光源由其所发出光线的能量依频率和方向的分布来表征。现在我们只考虑点光源。更复杂的光源常常可以由一些精心布置的点光源来近似。第6章将讨论光源的建模。

给定了场景中的对象、对象反射光的性质和场景中光源的性质,我们有许多方法可以生成该场景的图像。这一节将介绍两种物理方法。虽然这两种方法并不能够实现我们的最终目的:实时生成图像,但是它们可以使我们理解如何构造一个有用的成像系统。在第12章还会深入介绍这些方法。

为了构造一个成像模型,可以先跟踪从光源发出的光线。考虑图1.10所示的只有一个点光源的场景。一条射线(ray)是从一个点出发,向着一个特定方向无限延伸的半无穷直线。因为光线沿直线传播,所以我们可以把光线看成是从点光源出发向所有方向发出的许多条射线。这些射线当中的一部分到达照相机的胶片平面,就形成了图像。

光线跟踪可以提供对物理世界的一个很好的近似,但它并不适合于实时计算。其他图像生成的物理方法以能量守恒为基础,其中在计算机图形学中最常用的是辐射度方法(radiosity)。这种方法最适合于把入射光线均匀地向所有方向散射的表面。但即使是对这种情况,辐射度方法所需要的计算量仍然太大,因而不难实时实现。我们把这些技术的讨论推迟到第12章。

讲了成像模型后,现在介绍两种物理成像系统:针孔照相机和人类视觉系统。

针孔照相机是成像系统的一个简单例子,它可以帮助我们理解照相机和其他光学成像仪器的工作原理。通过模仿针孔照相机,可以得到一个图像生成的模型。

 通过针孔相机,便可以把现实中的大的物体缩放到一张很小的几百像素的图片上。

理想的针孔照相机具有无穷大的景深(depth of field):视域范围内的每个点都会被投影到位于照相机后面的胶片上清晰成像。针孔相机有两个缺点:第一,因为孔如此之小,一个点光源只能有一条光线通过小孔,所以几乎没有光线进入照相机。第二,照相机的视角不能调节。

只要做一些小的改进就可以得到更复杂的照相机和其他具有透镜的成像系统。首先,透镜收集的光线比小孔所能通过的光线要多。透镜孔径越大,所能收集的光线就越多。其次,通过选择具有合适焦距的透镜我们可以获得任何想要的视角。然而,实际的透镜并不具有无限大的景深:不是所有透镜前的物体都可以清晰成像。

人眼视觉系统之所以能够区分颜色是由于三种视锥细胞具有不同的光谱敏感度。正因为具有三种视锥细胞,所以可以使用三种标准原色来近似我们能感知的所有颜色,而不需要单独处理所有可见光的波长。因此,大多数图像生成系统,包括电影和视频,只使用三种基色来表达所有的颜色。我们将在第2章和第8章深入讨论颜色。

从针孔相机和人类视觉系统之后就可以自然地引出现代三维计算机图形学的概念基础。我们认为,利用计算机生成图像和在光学系统中成像是相似的,这种模式称为虚拟照相机模型。在实际的照相机中,我们可以通过翻转胶片来获得正立的像,但对于虚拟照相机,可以使用一个简单的技巧而不需翻转。我们在透镜前面画另一个平面。为了找出对象上的一点在虚拟成像平面上所成的图像,我们从该点到透镜的中心连一条线,这条线叫做投影线,透镜的中心叫做投影中心。移到透镜前面来的虚拟成像平面叫做投影平面。对象上一个点的成像位于投影线和投影平面的交点上。在第5章,我们将详细讨论这个过程并导出相关的数学公式。

我们也必须考虑到图像的大小是受限的。前面已经看到,不是所有的物体都可以在针孔照相机平面上完整的成像。视角就是用来描述这个限制的。如图1.19所示,在虚拟照相机中,可以通过在投影平面内设置一个裁剪举行或者叫裁剪窗口来把这个限制移到透镜的前面。给定投影中心的位置,投影平面的位置和方向,还有裁剪窗口的大小,就能够确定哪些对象会在图像中出现了。

虚拟照相机的API需要考虑四个要素:对象、观察者、光源和材质属性。

对象通常由一组顶点定义。对于简单的几何对象,比如线段、长方形和多边形,一个顶点(vertex)列表与这些对象之间存在简单的关系。对于更复杂的对象,从一组顶点可能有许多方式来确定对象。

posted on 2022-12-29 11:49  XiaoNiuFeiTian  阅读(206)  评论(0编辑  收藏  举报