《計算機圖形學及實用編程技術》分上、下篇,共13章。上篇介紹計算機圖形學的原理、算法及實現(xiàn),即從基本圖形的生成,由簡單到復雜,由二維到多維,循序漸進。下篇介紹基于MFC和OpenGL的實用圖形編程技術,學以致用,并起到舉一反三的作用。內容為:計算機圖形學的概念、發(fā)展、應用和軟硬件系統(tǒng);直線、圓、橢圓基本圖形的生成、曲線及區(qū)域的填充;幾何圖形的投影與變換;圖形裁剪、消隱處理;光照模型和圖案映射等真實感生成技術,圖像處理的基本知識,并用VC++進行交互式圖形設計實例。在多年教學、科研和科技開發(fā)的基礎上,從計算機圖形學的理論高度和計算機繪圖的實用角度來研究、編寫《計算機圖形學及實用編程技術》。
《計算機圖形學及實用編程技術》可作為計算機、以及航空航天領域、機械、電子、建筑等專業(yè)的本科生教材,也可作為相關工程人員的參考書。
《計算機圖形學及實用圖形編程技術》第一篇較詳細地介紹了計算機圖形學的有關原理、算法及實現(xiàn),從計算機圖形的基本圖形生成講起,采取循序漸進的內容安排,由簡單到復雜、由二維至三維,理論與實踐相結合,對書中的主要算法都給出了C程序。在第二篇給出了完整的VC編程范例,考慮到OpenGL強大的功能和良好的結構,以及MFC的方便實用性,實例是以它們?yōu)榛A的;另外,為給學習者留有余地,范例中的許多算法與理論篇中的不盡相同,學習者須按照書中的講解,將這些C程序移植到范例中去,舉一反三,就可容易地在計算機上得到驗證與提高,從而為深入理解圖形學原理提供重要的保證,并為今后的計算機圖形學應用打下堅實的實踐基礎和編程經(jīng)驗積累。 《計算機圖形學及實用圖形編程技術》要求學習者有線性代數(shù)和C、C++語言的基礎。若有Visual C++6.0基礎更好,因為考慮到實用性和適用性,《計算機圖形學及實用圖形編程技術》使用的開發(fā)工具是微軟公司的Visual Studio 6.0版。學習者可根據(jù)自身情況,在C語言或Visual C++的基礎上上機練習,掌握和應用圖形學的各種算法,并開發(fā)一些具有實用性的小型繪圖軟件。
隨著知識經(jīng)濟時代的到來,計算機圖形生成技術的應用日益廣泛。這就必然促使計算機專業(yè)人員、廣大非計算機專業(yè)的應用人員,從計算機圖形學的理論高度和計算機繪圖的實用角度來研究和開發(fā)計算機圖形生成技術及軟件。在多年的教學、科研和技術的開發(fā)工作中,深刻地體會到:沒有計算機圖形的理論基礎,計算機圖形生成技術就無從談起;沒有高級語言描述算法的詳細思路,圖形學復雜的理論和方法就不能真正得到理解和應用。基于這些體會,作者認為很有必要編寫出版這樣的一本書,即把計算機圖形學理論與計算機繪圖的實踐結合起來,并掌握用VC++開發(fā)工具進行圖形軟件的設計。
有一個形象地有關汽車的比喻可以類推到計算機圖形學的教學方法上,講授圖形學有三種方法:方法一——算法法,就是要求學生掌握與汽車工作原理有關的各種知識,如發(fā)動機、傳動裝置等;方法二——觀察法,就是讓學生坐在后排作為一個旁觀者欣賞風景;方法三——編程法,就是指導學生如何駕駛,如何把汽車開到想去的地方。本書把方法一與方法三相結合,使學習者在掌握理論和實用知識兩方面均感到應用自如。
本書第一篇較詳細地介紹了計算機圖形學的有關原理、算法及實現(xiàn),從計算機圖形的基本圖形生成講起,采取循序漸進的內容安排,由簡單到復雜、由二維至三維,理論與實踐相結合,對書中的主要算法都給出了C程序。在第二篇給出了完整的VC編程范例,考慮到OpenGL強大的功能和良好的結構,以及MFC的方便實用性,實例是以它們?yōu)榛A的;另外,為給學習者留有余地,范例中的許多算法與理論篇中的不盡相同,學習者須按照書中的講解,將這些C程序移植到范例中去,舉一反三,就可容易地在計算機上得到驗證與提高,從而為深入理解圖形學原理提供重要的保證,并為今后的計算機圖形學應用打下堅實的實踐基礎和編程經(jīng)驗積累。
本書要求學習者有線性代數(shù)和C、C++語言的基礎。若有Visual C++6.0基礎更好,因為考慮到實用性和適用性,本書使用的開發(fā)工具是微軟公司的Visual Studio 6.0版。學習者可根據(jù)自身情況,在C語言或Visual C++的基礎上上機練習,掌握和應用圖形學的各種算法,并開發(fā)一些具有實用性的小型繪圖軟件。
本書由鄭州大學李春雨、鄭志蘊、譚同德,中原工學院張?zhí)幽限r(nóng)業(yè)大學李福超,鄭州輕工業(yè)學院魏云冰,河南工業(yè)大學丁偉等同志對本課程10多年的教學積累和科學研究,反復研討并集體編寫而成。具體分工如下:第1,2,3章由李春雨編寫,第4、6章由鄭志蘊編寫,
第5章由譚同德編寫,第7、8章由魏云冰編寫,第9、10章由李福超編寫,第11、12章由張?zhí)帉懀?br> 第13章由丁偉編寫。全書由李春雨匯總和整理。書中內容雖為作者多年教學和科研工作的總結與體會,但由于作者水平有限,書中難免存在缺點和不足,殷切希望廣大讀者批評指正。
上篇
第1章 計算機圖形學基本知識
1.1 概述2
1.1.1 計算機圖形學的概念2
1.1.2 計算機圖形學的研究內容2
1.1.3 計算機圖形學與圖像處理的關系3
1.2 計算機圖形學的發(fā)展3
1.2.1 計算機圖形學的發(fā)展簡史3
1.2.2 計算機圖形學的發(fā)展動向5
1.3 計算機圖形學的應用7
1.4 計算機圖形系統(tǒng)9
1.4.1 計算機圖形系統(tǒng)硬件9
1.4.2 計算機圖形系統(tǒng)軟件10
習題10
第2章 基本圖形的生成與計算
2.1 直線的生成算法11
2.1.1 直線的DDA算法11
2.1.2 直線的Bresenham算法12
2.2 二次曲線15
2.2.1 圓弧和橢圓弧的擬合法15
2.2.2 二次曲線的參數(shù)擬合法23
2.3 自由曲線28
2.3.1 拋物線參數(shù)樣條曲線29
2.3.2 Hermite曲線30
2.3.3 三次參數(shù)樣條曲線34
2.3.4 Bezier曲線37
2.3.5 B樣條曲線41
2.4 字符的生成44
2.4.1 基礎知識44
2.4.2 掃描線填色算法45
2.4.3 種子填色算法51
2.5 區(qū)域填充52
2.5.1 點陣式字符53
2.5.2 矢量式字符53
2.5.3 方向編碼式字符53
2.5.4 輪廓字型技術54
2.6 圖形的剪裁55
2.6.1 直線的剪裁55
2.6.2 多邊形的剪裁59
2.6.3 字符串的剪裁63
習題64
第3章 圖形變換
3.1 二維圖形的幾何變換66
3.1.1 二維圖形的幾何基本變換66
3.1.2 二維圖形幾何變換的表示69
3.1.3 錯切變換71
3.1.4 組合變換71
3.2 窗口視圖變換73
3.2.1 用戶域和窗口區(qū)73
3.2.2 顯示器域和視圖區(qū)74
3.2.3 窗口區(qū)和視圖區(qū)的坐標變換74
3.2.4 從規(guī)格化坐標(NDC)到設備坐標(DC)的變換75
3.3 三維圖形的幾何變換77
3.3.1 變換矩陣77
3.3.2 平移變換77
3.3.3 比例變換78
3.3.4 繞坐標軸的旋轉變換78
3.3.5 繞任意軸的旋轉變換79
3.4 形體的投影變換81
3.4.1 投影變換分類81
3.4.2 正平行投影(三視圖)81
3.4.3 斜平行投影82
3.4.4 透視投影83
3.4.5 投影空間88
3.4.6 用戶坐標系到觀察坐標系的轉換89
3.4.7 規(guī)格化裁剪空間和圖像空間90
3.5 三維線段裁剪94
習題95
第4章 數(shù)據(jù)接口與交換標準
4.1 GKS元文件標準GKSM97
4.1.1 GKSM功能97
4.1.2 GKSM生成97
4.1.3 GKSM輸入99
4.2 計算機圖形元文件標準CGM100
4.2.1 CGM功能100
4.2.2 CGM描述100
4.3 計算機圖形接口標準CGI102
4.3.1 CGI功能102
4.3.2 光柵功能集104
4.4 基本圖形交換規(guī)范標準IGES104
4.4.1 IGES功能104
4.4.2 IGES元素105
4.4.3 IGES文件結構109
4.5 DXF數(shù)據(jù)接口111
4.5.1 DXF文件結構111
4.5.2 閱讀圖形交換文件112
4.5.3 利用圖形交換文件提取實體數(shù)據(jù)114
4.6 產(chǎn)品數(shù)據(jù)表達與交換標準STEP116
4.6.1 STEP的組成117
4.6.2 產(chǎn)品模型信息結構118
4.6.3 幾何與拓撲表示120
習題121
第5章 三維形體的表示
5.1 曲面的表示122
5.1.1 孔斯(Coons)曲面123
5.1.2 貝塞爾(Bezier)曲面127
5.1.3 B樣條曲面130
5.1.4 曲面片的連接131
5.2 實體的表示131
5.2.1 幾何元素的定義132
5.2.2 實體的線框表示133
5.2.3 實體的定義和正則形體134
5.2.4 正則集合運算及集合成員分類136
5.2.5 實體的邊界表示138
5.2.6 掃描表示法143
5.2.7 構造的實體幾何法144
5.2.8 八叉樹表示法146
5.3 其他三維造型法147
5.3.1 特征表示147
5.3.2 分形幾何表示148
5.3.3 體繪制技術151
5.3.4 從二維圖像信息構造三維形體152
習題152
第6章 真實感圖形顯示
6.1 線消隱154
6.1.1 消隱的基礎知識154
6.1.2 凸多面體的隱藏線消除155
6.1.3 凹多面體的隱藏線消除155
6.2 面消隱157
6.2.1 區(qū)域排序算法157
6.2.2 深度緩存(Zbuffer)算法157
6.2.3 掃描線算法158
6.3 光照模型159
6.3.1 光源特性和物體表面特性159
6.3.2 光照模型及其實現(xiàn)160
6.3.3 明暗的光滑處理163
6.4 表面圖案與紋理164
6.4.1 表面圖案的描繪164
6.4.2 表面紋理的描繪166
6.5 顏色空間167
6.5.1 顏色的基本概念167
6.5.2 CIE色度圖168
6.5.3 幾種常用的顏色模型169
習題171
第7章 圖像處理
7.1 圖像基礎172
7.1.1 圖像的表示173
7.1.2 采樣和量化174
7.1.3 圖像文件的數(shù)據(jù)結構175
7.2 圖像變換177
7.2.1 離散傅里葉變換177
7.2.2 快速傅里葉變換178
7.3 圖像增強180
7.3.1 空域增強180
7.3.2 頻域增強181
7.4 圖像恢復與壓縮編碼182
7.4.1 圖像恢復183
7.4.2 圖像編碼184
7.5 圖像分割186
7.5.1 四類圖像分割技術186
7.5.2 閾值分割法188
7.6 應用實例——儲糧害蟲圖像識別189
習題193
下篇
第8章 基于MFC的圖形編程基礎
8.1 圖形軟件的MFC實現(xiàn)方法195
8.1.1 建立工程myvc195
8.1.2 0nDraw成員函數(shù)197
8.2 CDC類198
8.2.1 CDC類中常用的成員函數(shù)199
8.2.2 CDC類的派生類200
8.2.3 CDC類的調用函數(shù)201
8.3 基本圖元的繪制方法202
8.3.1 繪制點、直線、矩形202
8.3.2 繪制簡單曲線204
8.3.3 文本的繪制205
8.4 圖形設備接口GDI206
8.4.1 GDI對象206
8.4.2 庫存GDI對象207
8.4.3 CPen類的使用208
8.4.4 CBrush類的使用210
8.4.5 CFont類的使用212
8.5 Windows映射模式與窗口視區(qū)變換214
8.5.1 Windows中定義的映射模式214
8.5.2 Windows映射模式設置215
8.5.3 窗口和視口219
習題220
第9章 基于MFC的交互繪圖
9.1 鼠標繪圖221
9.1.1 如何響應鼠標消息221
9.1.2 繪圖模式的設置223
9.2 用鼠標繪制圓225
9.3 通過對話框繪圖228
習題232
第10章 OpenGL基礎知識和實驗框架的建立
10.1 OpenGL基礎知識和功能介紹233
10.1.1 OpenGL的簡單介紹233
10.1.2 OpenGL工作流程234
10.1.3 OpenGL圖形操作步驟235
10.1.4 Windows下的OpenGL函數(shù)235
10.1.5 OpenGL基本功能236
10.1.6 Windows下OpenGL的結構237
10.2 OpenGL的程序框架237
10.2.1 建立非控制臺的Windows程序框架238
10.2.2 建立OpenGL框架239
10.2.3 建立OpenGL框架的類文件239
10.2.4 完善Windows框架243
10.2.5 程序間的相互關系246
習題247
第11章 OpenGL的基本圖形
11.1 OpenGL庫函數(shù)命名方式248
11.2 基本圖形249
11.3 幾何變換254
11.4 輔助庫物體255
11.5 在OpenGL中顯示圖形255
11.6 建立物體類文件258
11.7 本章程序結構260
習題262
第12章 OpenGL的組合圖形及光照和貼圖
12.1 飛機模型263
12.1.1 構造飛機264
12.1.2 程序注釋265
12.1.3 增加動感265
12.2 貼圖266
12.2.1 調入圖形文件266
12.2.2 給模型貼圖267
12.2.3 自定義長方體BOX269
12.3 又一個組合圖形270
12.4 使用燈光271
12.4.1 OpenGL光組成271
12.4.2 創(chuàng)建光源272
12.4.3 啟動光照273
12.4.4 在程序中使用光源273
12.5 本章程序結構274
習題275
第13章 攝像漫游與OpenGL的坐標變換
13.1 攝像機+漫游276
13.1.1 原理276
13.1.2 漫游程序277
13.1.3 漫游程序注釋278
13.1.4 漫游相關定義278
13.2 地面279
13.2.1 網(wǎng)格地面279
13.2.2 邊界設定280
13.2.3 使用攝像機281
13.3 OpenGL中的坐標變換282
13.3.1 從三維空間到二維平面——相機模擬282
13.3.2 視點變換282
13.3.3 模型變換284
13.3.4 投影變換284
13.3.5 視口變換285
13.3.6 其他必要的矩陣操作285
習題286
參考文獻