《計算機圖形學:基于MFC三維圖形開發》采用面向對象語言visualc++的mfc框架作為開發平臺,系統講解“基本圖元的掃描轉換”、“二維變換與裁剪”、“三維變換與投影”、“自由曲線與曲面”、“建模與消隱”、“光照模型”與“紋理映射”的實現原理與算法。
計算機圖形學是利用計算機研究圖形的表示、生成、處理和顯示的學科。主要原理包括基于光柵掃描顯示器的基本圖形的掃描轉換原理;基于齊次坐標的二維、三維圖形的幾何變換原理;基于幾何造型的自由曲線、曲面的生成原理;基于多面體和曲面體的三維幾何建模原理;基于像空間和物空間的三維物體面消隱原理;基于材質模型、光源模型的簡單光照原理;基于顏色紋理、三維紋理和幾何紋理的紋理映射原理。本書采用類架構建立了三維光照場景,給定光源位置、視點位置和視線方向,只要簡單地改變數據文件中物體的頂點表和表面表,就可以生成不同物體的真實感圖形動畫。
本書有以下特色。
1. 編程環境的先進性。本書選用了Microsoft公司的面向對象程序設計語言Visual C++的MFC框架作為編程環境,不僅可以制作出和3ds max效果一致的三維真實感圖形,而且支持交互式操作。
2. 所有原理的案例化。本書從編程角度講解計算機圖形學,要求所講解的原理都產生相應的圖形效果。筆者使用MFC框架自主開發了本書所有原理的案例,做到本書所講解到的每個原理都有一個對應的源程序。
3. 所有圖形彩色顯示。計算機圖形學是研究由物體的三維幾何模型得到二維圖像的技術。本書使用真彩色表示光照、紋理等特殊圖像效果,意在讓讀者切實感受到計算機圖形學的視覺沖擊力,從而將學習的重點放置在真實感圖形部分。
本書各章節主要內容如下。
第1章導論。介紹了計算機圖形學的定義、應用領域、圖形顯示器的工作原理以及計算機圖形學目前研究的熱點技術。
第2章MFC繪圖基礎。介紹MFC上機操作步驟,主要講解了CDC類的主要繪圖成員函數,最后給出了精美的雙緩沖動畫案例。本章要求重點掌握雙緩沖技術。
第3章基本圖元的掃描轉換。講解直線、圓和橢圓的像素級掃描轉換原理,以及Wu直線反走樣算法。本章要求重點掌握直線的中點Bresenham掃描轉換原理和Wu反走樣原理。
第4章多邊形填充。講解了有效邊表填充原理、邊緣填充原理以及區域填充原理,本章要求重點掌握有效邊表填充原理,這是后續填充三維物體表面模型的基本原理。
第5章二維變換與裁剪。講解二維基本幾何變換矩陣,CohenSutherland直線段裁剪原理、中點分割直線段裁剪原理、LiangBarsky直線段裁剪原理以及SutherlandHodgman多邊形裁剪原理。本章要求重點掌握二維幾何變換。
第6章三維變換與投影。講解三維基本幾何變換、三視圖、斜投影圖以及透視投影的變換矩陣。本章要求重點掌握三維幾何變換和透視投影原理。
第7章自由曲線與曲面。講解Bezier曲線曲面和B樣條曲線曲面的生成原理。本章要求重點掌握B樣條曲線和B樣條曲面的生成原理。
第8章建模與消隱。講解描述物體的雙表數據結構,多面體與曲面體的幾何模型。物體的背面剔除原理以及深度緩沖面消隱和深度排序面消隱原理。本章要求重點掌握立方體、球體的幾何建模方法,以及深度緩沖面消隱原理。
第9章光照模型。講解顏色模型、材質模型、簡單光照模型、Gouraud明暗處理、Phong明暗處理、簡單透明模型和簡單陰影模型。本章要求重點掌握RGB顏色模型、簡單光照模型、Gouraud明暗處理和Phong明暗處理。
第10章紋理映射。講解顏色紋理、三維紋理和幾何紋理的定義及映射方法。給出了將函數紋理與圖像紋理映射到球面、圓柱面、圓錐面和圓環面的方法,最后介紹了一種簡單紋理反走樣方法。本章要求重點掌握國際象棋棋盤函數紋理映射到立方體表面和球體表面的顏色紋理映射方法。
為了幫助讀者鞏固上述原理的學習,筆者精心設計了與本書講解的原理一一對應的60個案例源程序。每個案例全部按照本書原理的算法步驟編碼,可以互相參照學習。本書中所使用的效果圖均出自這些案例。請購買本書的讀者到筆者的個人網站上下載這60個源程序。為了方便教學,筆者也提供了各章的教學課件,并建立了計算機圖形學教師群,愿意與全國高校的計算機圖形學教師一起分享教學經驗。
雖然計算機圖形學領域每年有大量的新技術不斷涌現,但繪制圖形的基本原理和方法卻一直保持著連貫性和穩定性。筆者是從計算機編程角度講授計算機圖形學原理,在不使用任何圖形庫的前提下,單純使用MFC的繪制像素點成員函數(CDC::SetPixelV),按照本書講解的計算機圖形學原理開發出與OpenGL或Direct3D顯示效果一致的真實感圖形。更確切地說是筆者依據本書講解的原理搭建了一個自主開發的圖形庫。只要在場景中構造出物體的幾何模型,就可以根據假定的光照條件,動態渲染出包含材質、紋理的真實感圖形,產生如臨其境、如見其物的視覺效果。
感謝清華大學出版社編校人員對本書的大力支持,感謝國內計算機圖形學教師對筆者的認可,感謝計算機圖形學讀者對源程序的厚愛。懇請從事計算機圖形研究的專家學者繼續提出寶貴的建議和意見,無論是針對文字、代碼還是課件的。如果讀者在學習期間有什么疑問,請添加筆者的QQ進行聯系或者QQ留言,筆者將提供在線幫助。也可以通過QQ郵箱給筆者來信。筆者的QQ號及計算機圖形學群號參見封底。
最后感謝我的妻子康鳳娥女士。在我寫作本書期間,給予了更多的時間;在我調試程序時,曾提出過寶貴的建議;在我完成初稿后,又進行反復校對。 “噫!微斯人,吾誰與歸?”
孔令德
2013年9月
孔令德,教授。山西省教學名師,山西省模范教師。太原市尖草坪區第三、四屆政協委員。山西省計算機學會常務理事。
2006年主持山西省精品課程“c++程序設計”:2008年主持的教改項目“計算機軟件課程群工程化建設”被評為山西省教學成果二等獎。
2008午主持山西省精品課程“計算機圖形學”;2010年主持的教學改革項目“應用型工科院校計算機圖形學教學模式的改革與實踐”被評為山西省教學成果二等獎;2011年主持山西省重點教學改革項目“圖形圖像處理系列課程實踐教學資源與平臺的建設”;2012年主持的教學改革項目“計算機圖形學實踐教學資源庫的建設”被評為山西省教學成果一等獎。2013年負責的“計算機工程實驗教學中心”被評為“十二五”山西省高等學校實驗示范中心。2013年負責的“計算機科學與技術專業”被評為山西省高等學校本科特色專業。2013午被授予山西省高等學校131領軍人才的“優秀中青年拔尖創新人才”稱號。
第1章 導論
1.1 計算機圖形學的定義
1.2 計算機圖形學的應用領域
1.2.1 計算機游戲
1.2.2 計算機輔助設計
1.2.3 計算機藝術
1.2.4 虛擬現實
1.2.5 計算機輔助教學
1.3 計算機圖形學的相關學科
1.4 計算機圖形學的確立與發展
1.5 圖形顯示器的發展及其工作原理
1.5.1 陰極射線管
1.5.2 隨機掃描圖形顯示器
1.5.3 直視存儲管圖形顯示器
1.5.4 光柵掃描圖形顯示器
第1章 導論
1.1 計算機圖形學的定義
1.2 計算機圖形學的應用領域
1.2.1 計算機游戲
1.2.2 計算機輔助設計
1.2.3 計算機藝術
1.2.4 虛擬現實
1.2.5 計算機輔助教學
1.3 計算機圖形學的相關學科
1.4 計算機圖形學的確立與發展
1.5 圖形顯示器的發展及其工作原理
1.5.1 陰極射線管
1.5.2 隨機掃描圖形顯示器
1.5.3 直視存儲管圖形顯示器
1.5.4 光柵掃描圖形顯示器
1.5.5 LCD顯示器
1.5.6 三維圖形顯示原理及立體顯示器
1.6 圖形軟件標準
1.7 計算機圖形學研究的熱點技術
1.7.1 細節層次技術
1.7.2 基于圖像的繪制技術
1.8 本章小結
習題1
第2章 MFC繪圖基礎
2.1 MFC上機操作步驟
2.2 MFC繪圖方法
2.2.1 CDC類結構與GDI對象
2.2.2 映射模式
2.2.3 使用GDI對象
2.2.4 CDC類的主要繪圖成員函數
2.3 設備上下文的調用與釋放
2.4 雙緩沖機制
2.5 MFC繪圖的幾種方法
2.5.1 使用OnDraw()成員函數直接繪圖
2.5.2 使用菜單繪圖
2.5.3 使用自定義函數繪圖
2.6 本章小結
習題2
第3章 基本圖元的掃描轉換
3.1 直線的掃描轉換
3.1.1 算法原理
3.1.2 構造中點誤差項
3.1.3 遞推公式
3.1.4 整數化處理
3.2 圓的掃描轉換
3.2.1 算法原理
3.2.2 構造中點誤差項
3.2.3 遞推公式
3.3 橢圓的掃描轉換
3.3.1 算法原理
3.3.2 構造上半部分橢圓弧的中點誤差項
3.3.3 上半部分橢圓弧的遞推公式
3.3.4 構造下半部分橢圓弧的中點誤差項
3.3.5 下半部分橢圓弧的遞推公式
3.4 反走樣技術
3.5 Wu反走樣算法
3.5.1 算法原理
3.5.2 構造距離誤差項
3.5.3 計算機化
3.5.4 彩色直線段的反走樣
3.6 本章小結
習題3
第4章 多邊形填充
4.1 多邊形的掃描轉換
4.1.1 多邊形的定義
4.1.2 多邊形的表示
4.1.3 多邊形著色模式
4.1.4 多邊形填充算法
4.1.5 區域填充算法
4.2 有效邊表填充算法
4.2.1 填充原理
4.2.2 邊界像素的處理原則
4.2.3 有效邊和有效邊表
4.2.4 桶表與邊表
4.3 邊緣填充算法
4.3.1 填充原理
4.3.2 填充過程
4.4 區域填充算法
4.4.1 填充原理
4.4.2 四鄰接點與八鄰接點
4.4.3 四連通域與八連通域
4.4.4 種子填充算法
4.5 本章小結
習題4
第5章 二維變換與裁剪
5.1 圖形幾何變換基礎
5.1.1 二維變換矩陣
5.1.2 規范化齊次坐標
5.1.3 矩陣相乘
5.1.4 二維幾何變換
5.2 二維基本幾何變換矩陣
5.2.1 平移變換矩陣
5.2.2 比例變換矩陣
5.2.3 旋轉變換矩陣
5.2.4 反射變換矩陣
5.2.5 錯切變換矩陣
5.3 二維復合變換
5.3.1 復合變換原理
5.3.2 相對于任意參考點的二維幾何變換
5.3.3 相對于任意方向的二維幾何變換
5.4 二維圖形裁剪
5.4.1 圖形學中常用的坐標系
5.4.2 窗口與視區及窗視變換
5.4.3 窗視變換矩陣
5.5 CohenSutherland直線段裁剪算法
5.5.1 編碼原理
5.5.2 裁剪步驟
5.5.3 交點計算公式
5.6 中點分割直線段裁剪算法
5.6.1 中點分割直線段裁剪算法原理
5.6.2 中點計算公式
5.7 Liang Barsky直線段裁剪算法
5.7.1 算法原理
5.7.2 算法分析
5.7.3 算法的幾何意義
5.8 多邊形裁剪算法
5.9 本章小結
習題5
第6章 三維變換與投影
6.1 三維圖形幾何變換
6.1.1 三維變換矩陣
6.1.2 三維幾何變換
6.2 三維基本幾何變換矩陣
6.2.1 平移變換
6.2.2 比例變換
6.2.3 旋轉變換
6.2.4 反射變換
6.2.5 錯切變換
6.3 三維復合變換
6.3.1 相對于任意參考點的三維幾何變換
6.3.2 相對于任意方向的三維幾何變換
6.4 平行投影
6.4.1 正投影
6.4.2 三視圖
6.4.3 斜投影
6.5 透視投影
6.5.1 透視投影坐標系
6.5.2 三維坐標系變換
6.5.3 世界坐標系到觀察坐標系的變換
6.5.4 觀察坐標系到屏幕坐標系的變換
6.5.5 透視投影分類
6.5.6 立方體的透視圖
6.5.7 屏幕坐標系的偽深度坐標
6.6 本章小結
習題6
第7章 自由曲線與曲面
7.1 基本概念
7.1.1 樣條曲線曲面
7.1.2 曲線曲面的表示形式
7.1.3 插值、逼近與擬合
7.1.4 連續性條件
7.2 Bezier曲線
7.2.1 Bezier曲線的定義
7.2.2 Bezier曲線的性質
7.2.3 de Casteljau遞推算法
7.2.4 Bezier曲線的拼接
7.3 Bezier曲面
7.3.1 Bezier曲面的定義
7.3.2 雙三次Bezier曲面的定義
7.3.3 雙三次Bezier曲面的拼接
7.4 B樣條曲線
7.4.1 B樣條曲線的定義
7.4.2 二次B樣條曲線
7.4.3 三次B樣條曲線
7.4.4 B樣條曲線的性質
7.4.5 構造特殊三次B樣條曲線的技巧
7.5 B樣條曲面
7.5.1 B樣條曲面的定義
7.5.2 雙三次B樣條曲面的定義
7.5.3 雙三次B樣條曲面的連續性
7.6 本章小結
習題7
第8章 建模與消隱
8.1 三維物體的數據結構
8.1.1 物體的幾何信息與拓撲信息
8.1.2 三表數據結構
8.1.3 物體的表示模型
8.1.4 雙表數據結構
8.2 常用物體的幾何模型
8.2.1 多面體
8.2.2 曲面體
8.3 消隱算法分類
8.4 隱線算法
8.4.1 凸多面體消隱算法
8.4.2 曲面體消隱算法
8.5 隱面算法
8.5.1 深度緩沖器消隱算法
8.5.2 深度排序消隱算法
8.6 本章小結
習題8
第9章 光照模型
9.1 顏色模型
9.1.1 原色系統
9.1.2 RGB顏色模型
9.1.3 HSV顏色模型
9.1.4 CMYK顏色模型
9.2 簡單光照模型
9.2.1 材質模型
9.2.2 環境光模型
9.2.3 漫反射光模型
9.2.4 鏡面反射光模型
9.2.5 光強衰減
9.2.6 增加顏色
9.3 光滑著色
9.3.1 直線的光滑著色
9.3.2 Gouraud明暗處理
9.3.3 Phong明暗處理
9.4 簡單透明模型
9.5 簡單陰影模型
9.6 本章小結
習題9
第10章 紋理映射
10.1 紋理的定義
10.2 顏色紋理
10.2.1 函數紋理
10.2.2 圖像紋理
10.3 三維紋理
10.4 幾何紋理
10.4.1 參數曲面的定義
10.4.2 映射原理
10.4.3 幾何紋理的分類
10.5 簡單紋理反走樣
10.6 本章小結
習題10
附錄A配套案例的說明
參考文獻