內容簡介
本書是作者多年來教學與科研工作的總結,采用自頂嚮下的結構進行講解,涵蓋瞭基於WebGL編程工具的交互式圖形編程、三維可編程繪製流水綫、變換與觀察、光照與明暗繪製、麯綫麯麵建模等基本的計算機圖形學內容,以及離散技術、層級建模、過程建模、光綫跟蹤、並行繪製和體繪製等高級內容。並為讀者進一步深入學習和研究,在每章後麵提供瞭相關的建議閱讀資料。
作者簡介
Edward Angel,是新墨西哥大學(UNM)計算機科學的退休教授,並擔任過藝術、技術和科學實驗室(ARTS Lab)的主任。直到2007年7月,他一直是UNM的計算機科學、電子與計算機工程、媒體藝術教授。Angel於1964年在加州理工大學獲得學士學位,並於1968年在南加州大學獲得博士學位。他曾任職於加州大學伯剋利分校、南加州大學和羅切斯特大學。Angel目前的研究領域是計算機圖形學及科學可視化、虛擬現實和大規模並行計算等。
張榮華,華北電力大學計算機與科學學院,高級工程師,主要研究方嚮為計算機視覺、計算機圖形學等,曾翻譯過多部圖形學著作。
目錄
第1章 圖形係統和模型
1.1 計算機圖形學的應用
1.1.1 信息的顯示
1.1.2 設計
1.1.3 仿真和動畫
1.1.4 用戶界麵
1.2 圖形係統
1.2.1 像素和幀緩存
1.2.2 CPU與GPU
1.2.3 輸齣設備
1.2.4 輸入設備
1.3 物理圖像與閤成圖像
1.3.1 對象和觀察者
1.3.2 光和圖像
1.3.3 成像模型
1.4 成像係統
1.4.1 針孔照相機
1.4.2 人類視覺係統
1.5 虛擬照相機模型
1.6 應用程序編程接口
1.6.1 筆式繪圖儀模型
1.6.2 三維API
1.6.3 使用WebGL API繪製的一係列
圖像
1.6.4 建模-繪製模式
1.7 圖形繪製係統的體係結構
1.7.1 顯示處理器
1.7.2 流水綫體係結構
1.7.3 圖形繪製流水綫
1.7.4 頂點處理
1.7.5 裁剪和圖元組裝
1.7.6 光柵化
1.7.7 片元處理
1.8 可編程流水綫
1.9 性能特徵
1.10OpenGL版本和WebGL
小結和注釋
建議閱讀資料
習題
第2章 圖形學編程
2.1 Sierpinski鏤墊
2.2 編寫二維圖形應用程序
2.3 WebGL應用程序編程接口
2.3.1 圖形函數
2.3.2 圖形繪製流水綫和狀態機
2.3.3 OpenGL和WebGL
2.3.4 WebGL接口
2.3.5 坐標係
2.4 圖元和屬性
2.4.1 多邊形的基本概念
2.4.2 WebGL中的多邊形
2.4.3 利用多邊形近似球麵
2.4.4 三角剖分
2.4.5 文本
2.4.6 麯綫和麯麵對象
2.4.7 屬性
2.5 顔色
2.5.1 RGB顔色
2.5.2 索引顔色
2.5.3 設置顔色屬性
2.6 觀察
2.6.1 正投影
2.6.2 二維觀察
2.7 控製函數
2.7.1 和窗口係統的交互
2.7.2 寬高比和視口
2.7.3 應用程序組織結構
2.8 Sierpinski鏤墊繪製程序
2.8.1 嚮GPU發送數據
2.8.2 繪製Sierpinski鏤墊的
點數據
2.8.3 頂點著色器
2.8.4 片元著色器
2.8.5 組閤代碼段
2.8.6 initShaders()函數
2.8.7 init()函數
2.8.8 從應用程序讀入著色器
2.9 多邊形和遞歸
2.10三維Sierpinski鏤墊
2.10.1 使用三維點
2.10.2 命名規範
2.10.3 使用多邊形的三維Sierpinski
鏤墊
2.10.4 隱藏麵消除
小結和注釋
建議閱讀資料
習題
第3章 交互和動畫
3.1 動畫
3.1.1 鏇轉的正方形
3.1.2 顯示過程
3.1.3 雙緩存
3.1.4 使用定時器
3.1.5 使用requestAnimFrame
函數
3.2 交互
3.3 輸入設備
3.4 物理輸入設備
3.4.1 鍵盤碼
3.4.2 光筆
3.4.3 鼠標和跟蹤球
3.4.4 數據闆、 觸摸闆和觸摸屏
3.4.5 操作杆
3.4.6 多維輸入設備
3.4.7 邏輯設備
3.4.8 輸入模式
3.5 客戶和服務器
3.6 事件驅動輸入編程
3.6.1 事件和事件監聽器
3.6.2 增加按鈕
3.6.3 菜單
3.6.4 使用鍵碼
3.6.5 滑動條
3.7 位置輸入
3.8 窗口事件
3.9 拾取
3.10建立交互式模型
3.11交互式程序的設計
小結和注釋
建議閱讀資料
習題
第4章 幾何對象和變換
4.1 標量、 點和嚮量
4.1.1 幾何對象
4.1.2 與坐標無關的幾何
4.1.3 數學的觀點: 嚮量空間和仿射
空間
4.1.4 計算機科學的觀點
4.1.5 幾何ADT
4.1.6 直綫
4.1.7 仿射加法
4.1.8 凸性
4.1.9 點積和叉積
4.1.10平麵
4.2 三維圖元
4.3 坐標係和標架
4.3.1 嚮量的錶示和n元組
4.3.2 坐標係的變換
4.3.3 舉例: 不同基下的錶示之間的
變換
4.3.4 齊次坐標
4.3.5 舉例: 標架變換
4.3.6 對錶示進行處理
4.4 WebGL中的標架
4.5 矩陣和嚮量類型
4.6 建模一個彩色立方體
4.6.1 建模立方體的麵
4.6.2 嚮內和嚮外的麵
4.6.3 錶示對象的數據結構
4.6.4 彩色立方體
4.6.5 顔色插值
4.6.6 顯示立方體
4.6.7 使用元素繪製網格
4.7 仿射變換
4.8 平移、 鏇轉和縮放
4.8.1 平移
4.8.2 鏇轉
4.8.3 縮放
4.9 變換的齊次坐標錶示
4.9.1 平移
4.9.2 縮放
4.9.3 鏇轉
4.9.4 錯切
4.10 變換的級聯
4.10.1 不動點在任意位置的
鏇轉
4.10.2 一般的鏇轉
4.10.3 實例變換
4.10.4 繞任意軸的鏇轉
4.11 WebGL中的變換矩陣
4.11.1 當前變換矩陣
4.11.2 基本矩陣函數
4.11.3 鏇轉、 平移和縮放
4.11.4 繞任意不動點的鏇轉
4.11.5 變換的順序
4.12使立方體鏇轉起來
4.13三維應用程序的接口
4.13.1 使用屏幕區域
4.13.2 虛擬跟蹤球
4.13.3 平滑的鏇轉
4.13.4 增量式鏇轉
4.14四元數
4.14.1 復數和四元數
4.14.2 四元數和鏇轉
4.14.3 四元數和萬嚮節死鎖
小結和注釋
建議閱讀資料
習題
第5章 觀察
5.1 經典觀察和計算機觀察
5.1.1 經典觀察
5.1.2 正投影
5.1.3 軸測投影
5.1.4 斜投影
5.1.5 透視觀察
5.2 計算機觀察
5.3 定位照相機
5.3.1 照相機標架的定位
5.3.2 兩個觀察API
5.3.3 lookAt函數
5.3.4 其他觀察API
5.4 平行投影
5.4.1 正投影
5.4.2 WebGL中的平行投影
5.4.3 投影的規範化
5.4.4 正投影變換矩陣
5.4.5 斜投影
5.4.6 交互式觀察立方體
5.5 透視投影
5.6 WebGL中的透視投影
5.7 透視投影變換矩陣
5.7.1 透視投影的規範化
5.7.2 WebGL中的透視投影
變換
5.7.3 透視投影示例程序
5.8 隱藏麵消除
5.9 顯示網格
5.9.1 顯示網格麯麵
5.9.2 多邊形偏移
5.9.3 在場景中漫遊
5.10 投影和陰影
5.11 陰影映射
小結和注釋
建議閱讀資料
習題
第6章 光照和著色
6.1 光綫和材質
6.2 光源
6.2.1 彩色光源
6.2.2 環境光
6.2.3 點光源
6.2.4 聚光燈
6.2.5 遠距離光源
6.3 Phong反射模型
6.3.1 環境光反射
6.3.2 漫反射
6.3.3 鏡麵反射
6.3.4 改進的Phong模型
6.4 計算嚮量
6.4.1 法嚮量
6.4.2 反射角
6.5 多邊形的著色
6.5.1 均勻著色
6.5.2 平滑著色
6.5.3 Phong著色
6.6 通過遞歸細分逼近球麵
6.7 指定光照參數
6.7.1 光源
6.7.2 材質
6.8 實現光照模型
6.8.1 在WebGL應用程序代碼中應用
光照模型
6.8.2 繪製效率
6.8.3 在頂點著色器中實現光照
計算
6.9 球麵模型的著色
6.10 基於每個片元的光照計算
6.11 非真實感著色
6.12 全局光照
小結和注釋
建議閱讀資料
習題
第7章 離散技術
7.1 緩存
7.2 數字圖像
7.3 映射方法
7.4 二維紋理映射
7.5 WebGL的紋理映射
7.5.1 紋理對象
7.5.2 紋理圖像數組
7.5.3 紋理坐標和紋理采樣器
7.5.4 紋理采樣
7.5.5 使用紋理坐標
7.5.6 多紋理映射
7.6 紋理生成
7.7 環境貼圖
7.8 反射貼圖示例程序
7.9 凹凸映射
7.9.1 計算凹凸貼圖
7.9.2 凹凸貼圖示例程序
7.10 融閤技術
7.10.1 不透明度與融閤
7.10.2 圖像融閤
7.10.3 WebGL中圖像的融閤
7.10.4 再探反走樣
7.10.5 從後嚮前或從前嚮後繪製
多邊形
7.10.6 場景反走樣和多重采樣
7.10.7 圖像處理
7.10.8 其他的多通道繪製方法
7.11 GPGPU
7.12 幀緩存對象
7.13 緩存交換
7.14 拾取
小結和注釋
建議閱讀資料
習題
第8章 從幾何到像素
8.1 圖形繪製流水綫的基本實現
策略
8.2 圖形繪製係統的四個主要
任務
8.2.1 建模
8.2.2 幾何處理
8.2.3 光柵化
8.2.4 片元處理
8.3 裁剪
8.4 綫段的裁剪
8.4.1 Cohen-Sutherland裁剪
算法
8.4.2 Liang-Barsky裁剪算法
8.5 多邊形的裁剪
8.6 其他圖元的裁剪
8.6.1 包圍盒與包圍體
8.6.2 麯綫、 麯麵和字符的裁剪
8.6.3 幀緩存中的裁剪
8.7 三維裁剪
8.8 光柵化
8.9 Bresenham算法
8.10 多邊形光柵化算法
8.10.1 內外測試法
8.10.2 WebGL與凹多邊形
8.10.3 填充與分類
8.10.4 漫水填充算法
8.10.5 處理奇點
8.11 隱藏麵消除
8.11.1 對象空間和圖像空間消隱
算法
8.11.2 排序與隱藏麵消除
8.11.3 掃描綫填充算法
8.11.4 背麵剔除
8.11.5 z緩存算法
8.11.6 基於z緩存的掃描轉換
算法
8.11.7 深度排序和畫傢算法
8.12 反走樣
8.13 顯示方麵的問題
8.13.1 顔色係統
8.13.2 顔色矩陣
8.13.3 γ校正
8.13.4 抖動輸齣技術和半色調輸齣
技術
小結和注釋
建議閱讀資料
習題
第9章 層級建模方法
9.1 圖符和實例
9.2 層級模型
9.3 機器人手臂
9.4 樹與遍曆
9.5 使用樹數據結構
9.6 動畫
9.7 圖形對象
9.7.1 方法、 屬性和消息
9.7.2 一個立方體對象
9.7.3 對象與層級結構
9.7.4 幾何和非幾何對象
9.8 場景圖
9.9 實現場景圖
9.10 其他樹結構
9.10.1 CSG樹
9.10.2 BSP樹
9.10.3 四叉樹和八叉樹
小結和注釋
建議閱讀資料
習題
第10章 過程建模方法
10.1 基於算法的建模
10.2 基於物理的建模和粒子係統
10.3 牛頓粒子
10.3.1 獨立的粒子
10.3.2 彈簧力
10.3.3 吸引力與排斥力
10.4 求解粒子係統方程
10.5 約束條件
10.5.1 碰撞
10.5.2 軟約束
10.6 一個簡單的粒子係統
10.6.1 繪製粒子
10.6.2 更新粒子的位置
10.6.3 碰撞
10.6.4 作用力
10.6.5 群聚行為
10.7 基於agent的建模
10.8 基於語言的建模
10.9 遞歸方法和分形
10.9.1 標尺和長度
10.9.2 分形維數
10.9.3 中點劃分及布朗運動
10.9.4 分形山脈
10.9.5 Mandelbrot集
10.9.6 Mandelbrot片元著色器
10.10 過程噪聲
小結和注釋
建議閱讀資料
習題
第11章 麯綫和麯麵
11.1 麯綫和麯麵的錶示形式
11.1.1 顯式錶示形式
11.1.2 隱式錶示形式
11.1.3 參數錶示形式
11.1.4 參數多項式麯綫
11.1.5 參數多項式麯麵
11.2 設計準則
11.3 三次參數多項式麯綫
11.4 插值
11.4.1 調和函數
11.4.2 三次插值麯麵片
11.5 Hermite麯綫和麯麵
11.5.1 Hermite形式
11.5.2 幾何與參數連續性
11.6 B?zier麯綫和麯麵
11.6.1 B?zier麯綫
11.6.2 B?zier麯麵片
11.7 三次B樣條
11.7.1 三次B樣條麯綫
11.7.2 B樣條和基函數
11.7.3 樣條麯麵
11.8 普通B樣條
11.8.1 B樣條的遞歸定義
11.8.2 均勻樣條
11.8.3 非均勻B樣條
11.8.4 NURBS
11.8.5 Catmull-Rom樣條
11.9 麯綫和麯麵的繪製
11.9.1 多項式求值方法
11.9.2 遞歸細分B?zier多項式
11.9.3 基於細分算法的其他多項式
麯綫的繪製
11.9.4 細分B?zier麯麵
11.10 Utah茶壺模型
11.11 代數麯麵
11.11.1 二次麯麵
11.11.2 使用光綫跟蹤繪製
麯麵
11.12 麯綫和麯麵的細分
11.13 從數據生成網格
11.13.1 迴顧高度場
11.13.2 Delaunay三角剖分
11.13.3 點雲
11.14 支持麯綫和麯麵的圖形API
11.14.1 麯麵細分著色
11.14.2 幾何著色
小結和注釋
建議閱讀資料
習題
第12章 高級繪製
12.1 超越流水綫繪製結構
12.2 光綫跟蹤
12.3 構建一個簡單的光綫跟蹤器
12.3.1 光綫跟蹤遞歸算法
12.3.2 計算交點
12.3.3 其他不同形式的光綫
跟蹤
12.4 繪製方程
12.5 輻射度方法
12.5.1 輻射度方程
12.5.2 求解輻射度方程
12.5.3 計算排列因子
12.5.4 實現輻射度算法
12.6 全局光照和路徑跟蹤
12.7 RenderMan
12.8 並行繪製
12.8.1 sort-middle繪製方法
12.8.2 sort-last繪製方法
12.8.3 sort-first繪製方法
12.9 GPU硬件實現
12.10 隱函數和等高綫圖
12.10.1 步進方格
12.10.2 步進三角形
12.11 體繪製
12.11.1 體數據集
12.11.2 隱函數的可視化
12.12 等值麵與步進立方體
12.13 步進四麵體
12.14 網格簡化
12.15 直接體繪製
12.15.1 指定顔色和透明度
12.15.2 拋雪球算法
12.15.3 體光綫跟蹤
12.15.4 基於紋理映射的體繪製
12.16 基於圖像的繪製
小結和注釋
建議閱讀資料
習題
附錄A 初始化著色器
附錄B 空間
附錄C 矩陣
附錄D 采樣與走樣
參考文獻
前言/序言
譯 者 序
計算機圖形學(Computer Graphics)産生於20世紀60年代, 是研究圖形的計算機生成、 處理和顯示的一門學科。目前計算機圖形學已經滲透到工業生産和社會活動的各個領域, 從飛機、 汽車的計算機輔助設計到飛行模擬器, 從視頻遊戲到數字電影, 從天氣預報到地質勘探, 無一不應用計算機圖形生成技術。因此, 以圖形人機接口和可視化技術為代錶的計算機圖形學已成為計算機學科中最活躍的分支之一。
在過去十幾年, GPU得到瞭迅速發展, 三維圖形程序也經曆瞭從運行速度的提高到擁有高質量圖形錶現力的轉變, 圖形繪製係統性能的增長速度遠遠超過瞭摩爾定律, GPU的可編程性也不斷增強。對於現代的OpenGL應用程序, 所有的繪製都是通過可編程GPU的頂點著色器和片元著色器來控製的, 因此新的可編程結構為三維圖形應用程序開發人員提供瞭極大的靈活性。目前桌麵版OpenGL的最新版本為OpenGL 4.3。其中, OpenGL 2.0的齣現是OpenGL的重大進步, 因為它引入瞭OpenGL著色語言, 允許應用程序編程人員編寫他們自己的著色器程序並且充分利用GPU的巨大能力。隨著移動終端和互聯網的廣泛應用, OpenGL的變體——OpenGL ES和WebGL陸續衍生齣來。OpenGL ES 2.0基於OpenGL 2.0, 在嵌入式設備的應用中(如智能手機、 平闆電腦和遊戲機等)獲得瞭良好的圖形錶現。但是桌麵版OpenGL和簡化版的OpenGL ES都被設計成在本地運行, 不能充分利用Web的優勢。2011年Khronos Group發布的第一個WebGL版本源自OpenGL ES 2.0。WebGL是運行在當前大多數Web瀏覽器上的OpenGL ES 2.0的JavaScript接口, 可以為HTML5 Canvas提供硬件3D加速渲染, 這樣我們可以藉助本地的圖形硬件在幾乎所有最新的瀏覽器上更流暢地展示3D場景和模型, 而不需要額外的專用插件或庫。隨著GPU和JavaScript引擎的速度與復雜性的日益增加, 我們希望更多圖形應用程序都可以使用WebGL開發或者移植到WebGL中。
目前國外許多大學都已經將基於可編程GPU的高級著色語言融入計算機圖形學的教學與實踐中, 如University of New Mexico、 Harvard、 MIT、 Caltech、 Stanford、 Purdue、 Brown University、 University of Illinois、 University of Texas, Austin, 等等。因此, 隨著目前可編程GPU的快速發展, 為瞭切實提高計算機圖形學課程的教學質量與教學水平, 更好地與國際計算機圖形學教育及科研實踐接軌, 逐漸在我國高校的計算機圖形學課程中引入基於可編程GPU繪製流水綫及麵嚮著色器編程的新型教學模式已是當務之急。譯者多年從事計算機圖形學的教學與研究, 深知選擇這樣一本“基礎性與先進性、 理論性與應用性、 科學性與通俗性”相結閤且能滿足目前計算機圖形學新型教學模式教材的重要性。目前在國內外很少有基於這種新型教學模式的計算機圖形學書籍, 而本書第七版反映瞭計算機圖形學在圖形硬件設備和圖形繪製標準等方麵的最新發展現狀。相比於前麵六個版本, 第七版基於可編程GPU的WebGL著色器編程來介紹計算機圖形學的相關原理、 方法和技術, 編寫的三維圖形示例能運行於最新的Web瀏覽器且不需要任何額外的插件或庫。因此, 本書的第七版能很好地滿足新型教學模式的需求。與桌麵版OpenGL相比, WebGL更適閤講授計算機圖形學, 也是培養學生基於現代GPU的可編程計算思維的一本非常難得的優秀教材。
本書的主要特色如下所述。
內容豐富而又係統, 基礎性內容和拓展性主題相結閤。本書涉及瞭現代計算機圖形學課程幾乎所有的主要內容, 涵蓋瞭交互式圖形編程、 三維可編程繪製流水綫、 變換與觀察、 光照與明暗繪製、 麯綫麯麵建模等基本的計算機圖形學內容以及離散技術、 層級建模、 過程建模、 光綫跟蹤、 並行繪製和體繪製等高級內容。
內容編排和組織獨具特色, 綜閤瞭知識性和實用性。本書采用瞭“自頂嚮下”和麵嚮著色器編程的方法, 使學生能既使用WebGL和JavaScript迅速地編寫自己的交互式三維Web圖形應用程序, 又能係統地掌握計算機圖形學的基本原理、 方法和技術。
本書作者結閤自己在計算機圖形學領域多年的教學和科研成果, 為本書提供瞭大量的經典示例程序、 豐富的插圖、 彩圖和習題, 並在每章後麵提供瞭最新的建議閱讀資料, 為進一步加深和擴展讀者對有關內容的理解提供瞭有力支持。
本書既不乏經典理論, 又側重近幾年計算機圖形學發展的最新成果。本書第七版中新增的某些技術是最近的文獻中齣現的新技術。為瞭及時反映計算機圖形學的發展現狀, 本書對第六版中的某些章節進行瞭調整, 並增刪瞭相關內容:
將第六版中有關輸入和交互的內容集中起來作為獨立的章節, 即本書的第3章; 增加瞭有關離屏繪製、 繪製到紋理、 基於Agent建模等內容。
所有的應用程序采用WebGL技術標準, WebGL應用程序包含三種語言: HTML5、 JavaScript和OpenGL著色器語言, 雖然第七版中的許多示例程序的輸齣結果與以前的版本相同, 但代碼完全不同。
包含瞭一個高效的矩陣-嚮量工具包。
本書原版是國外諸多大學采用的一本經典的計算機圖形學教材, 譯者甚感榮幸再次承接瞭本書最新版本的翻譯工作。為瞭確保譯文的質量, 譯者和校對人員花費瞭大量時間對譯文進行認真的校對和統稿。對於原文中顯而易見的錯誤, 譯者在譯文中直接進行瞭更正, 而對於原文中可能有誤的地方, 譯文中均以“譯者注”的形式做瞭標注, 以供讀者參照。
本書的翻譯得到瞭很多人的幫助與參與, 在此衷心感謝為本書翻譯付齣努力的每一個人!參加本書翻譯的人員主要有: 張榮華、 薑麗梅、 邵緒強、 馬玉梅、 李繼榮、 王藍婧, 王新穎也參與瞭本書的翻譯和校對工作, 張榮華和李繼榮參與瞭全書的統稿與審校。在此感謝本書第七版的所有譯者!
譯者在翻譯過程中雖然力求準確地反映原著內容, 但由於自身的知識局限性, 譯文中難免有不妥之處, 謹嚮原書作者和讀者錶示歉意, 並敬請讀者批評指正。
華北電力大學計算機係 張榮華 2016年3月於保定
前 言
本書是計算機圖形學入門教材, 重點介紹應用程序的編寫。本書於1997年首次齣版, 第一版在使用OpenGL和自頂嚮下的方法上多多少少是一場革命。在接下來的16年中, 發行瞭六個版本, 大多數計算機圖形學概論課以及幾乎所有的教科書都采用瞭本書的方法。
本書的第六版反映瞭主要的圖形硬件升級引起的重大圖形軟件變化。特彆地, 第六版是完全基於著色器的, 可以使讀者創建完全利用現代GPU性能的應用程序。我們注意到這些改變也被包括在OpenGL ES 2.0中, 可以用來為嵌入式係統和便攜式設備開發應用程序, 例如手機和平闆電腦, 以及WebGL的JavaScript實現。當初, 通過HTML5支持WebGL的Web瀏覽器齣現的時候, 我們並沒有預料到會對WebGL産生如此大的興趣。
當我們繼續編寫書籍, 講授SIGGRAPH課程以及從事其他圖形學相關活動的時候, 我們開始意識到對WebGL逐漸産生的興趣。WebGL的應用如今非常普遍, 包括最近智能手機上的一些程序。雖然WebGL缺少瞭一些最新版OpenGL的高級功能, 但是其與HTML5的整閤開闢瞭大量新的應用領域。作為一個額外的好處, 我們發現WebGL比桌麵版OpenGL更適閤講授計算機圖形學。因此, 我們決定使用WebGL作為編程語言編寫本書的第七版。我們相信第七版也會像其他版本一樣帶來巨大變革。
第七版新增內容
● 全書使用瞭WebGL
● 所有的代碼使用JavaScript編寫
● 所有的代碼在近期的Web瀏覽器上運行
● 增加瞭一章關於交互的內容
● 增加瞭關於繪製到紋理的內容
● 增加瞭關於顯示網格的內容
● 包含瞭一個高效的矩陣-嚮量工具包
● 增加瞭基於Agent建模的介紹
自頂嚮下的方法
圖形學的新進展以及本書前六個版本的成功一直鞭策著我們堅持采用自頂嚮下的、 麵嚮程序設計的方法來介紹計算機圖形學。雖然許多計算機科學與工程係現在開設瞭多門計算機圖形學課程, 但是大多數學生隻選修一門。在學生們學習瞭程序設計、 數據結構、 算法、 軟件工程和基礎數學以後給他們安排一門圖形學課程, 應允許教師以內容充實並且有趣的方式按上述已學課程來組織計算機圖形學課程, 我們希望這些學生學習這門課程時盡可能早地編寫齣三維應用程序。底層的算法, 例如繪製綫段或者填充多邊形, 可以在學生們編寫瞭圖形程序之後再考慮。
當被問到“為什麼講授編程”這個問題時, 計算機教育的先驅John Kemeny曾經把自頂嚮下的編程方法與我們熟悉的汽車來類比: 你沒必要知道汽車發動機罩下麵是什麼, 但是如果知道內部的工作原理, 就會去駕駛汽車而不是坐在汽車後座上。同樣的類比適用於講授計算機圖形學的方法。第一種方法(算法的方法)是把汽車工作原理的方方麵麵都交代清楚: 發動機、 傳動裝置、 燃燒過程等。第二種方法(概覽的方法)是雇一名司機, 自己坐在後麵觀光。第三種方法(本書采用的編程方法)是教會你如何駕駛並把汽車開到你想要去的地方, 正如一句過時的租賃廣告詞說的那樣: “讓我們把你放在駕駛員的位子上去。”
使用WebGL和JavaScript編程
當本書的第一作者Edward Angel在30年前開始講授計算機圖形學的時候, 當時以麵嚮編程的方式講授這門課程並編寫相應教材的最大障礙是缺乏一個廣泛接受的圖形庫或者應用程序編程接口(API)。遇到的睏難包括: 高成本、 可用性受限、 缺乏通用性以及高復雜性