《iPhone 3D遊戲編程基礎》是2013年9月清華大學出版社出版的圖書,作者是袁冠遠。
基本介紹
- 中文名:iPhone 3D遊戲編程基礎
- 作者:袁冠遠
- 出版時間:2013年9月
- 出版社:清華大學出版社
- ISBN:9787302330530
- 類別:資料庫系統與套用
- 定價:34.5 元
內容簡介,圖書目錄,
內容簡介
本書主要介紹如何使用OpenGL ES 在 IOS 平台開發互動式3D圖形程式,重點是遊戲開發。全書首先介紹必要的數學工具,然後講解相關的3D概念。書中內容幾乎涵蓋了OpenGL ES中所有基本運算,例如,圖元的繪製、光照、紋理、Alpha融合、模板,以及如何使用OpenGL ES實現遊戲中所需的技術。
本書內容深入淺出,內容廣泛,實踐性強,不僅可作為大學本科生教材,也適合各種遊戲開發培訓機構作為 OpenGL ES編程的培訓教程,對於從事IOS 3D遊戲程式設計、可視化系統設計或其他圖形應用程式開發的開發人員來說,也是一本不可多得的參考書。
圖書目錄
第1章數學基礎1
1.1向量1
1.1.1向量相等2
1.1.2向量的大小2
1.1.3向量的規範化2
1.1.4向量加法3
1.1.5向量減法3
1.1.6數與向量的乘積3
1.1.7向量點積3
1.1.8向量叉積4
1.2矩陣4
1.3變換6
1.3.1平移變換6
1.3.2縮放變換7
1.3.3旋轉變換7
1.3.4矩陣複合8
1.4思考題8
第2章創建OpenGL ES項目9
2.1開發工具9
2.1.1Mac電腦9
2.1.2iPhone9
2.1.3Xcode9
2.1.4ObjectiveC10
2.2OpenGL ES簡介10
2.3選擇適當的OpenGL ES版本11
2.4使用嚮導創建OpenGL ES項目11
2.5從頭開始創建OpenGL ES項目15
2.5.1創建Windowbased Application15
2.5.2清理OpenGL ES無關信息16
2.5.3連線OpenGL與Quartz庫19[1][2][1][3]2.5.4添加UIView子類——GLView19
2.5.5運行結果27
2.6應用程式設定27
2.6.1設定應用程式圖示27
2.6.2處理啟動畫面28
2.6.3處理狀態欄28
2.6.4運行結果28
2.7思考題29
第3章基本圖元30
3.1OpenGL ES坐標系30
3.1.1左手和右手坐標系30
3.1.2OpenGL ES默認坐標系30
3.2圖元31
3.2.1點圖元31
3.2.2渲染點圖元31
3.2.3線圖元36
3.2.4渲染線圖元37
3.2.5三角形圖元41
3.2.6渲染三角形圖元42
3.3思考題46
第4章遊戲循環47
4.1基本的遊戲循環47
4.2幾種常見的遊戲循環體48
4.2.1基於幀的循環體48
4.2.2基於時間的不定間隔循環體49
4.2.3基於時間的固定間隔循環體49
4.3IOS遊戲循環驅動器50
4.4IOS遊戲循環的實現51
4.4.1修改類聲明51
4.4.2實現新定義的方法52
4.5遊戲(動畫)的啟動與停止54
4.6實現簡單動畫55
4.7思考題56
第5章顏色57
5.1顏色理論57
5.1.1RGB模式57
5.1.2顏色深度57
5.1.3顏色立方體模型57
5.2設定渲染顏色58
5.3頂點顏色59
5.4著色模式60
5.5思考題61
第6章頂點格式62
6.1頂點屬性62
6.2頂點屬性的數據類型63
6.3支持不同數據類型的函式63
6.4交錯頂點數組64
6.4.1原理64
6.4.2使用交錯頂點數組65
6.5使用結構體定義頂點數據66
6.6思考題68
第7章紋理69
7.1概述69
7.2紋理坐標69
7.3在OpenGL ES中使用紋理71
7.3.1定義頂點信息結構體71
7.3.2設定頂點信息71
7.3.3創建紋理71
7.3.4渲染帶紋理屬性圖元77
7.3.5運行78
7.4紋理定址模式78
7.4.1重複紋理定址模式79
7.4.2箝位紋理定址模式79
7.4.3分別設定s軸和t軸的紋理定址模式80
7.5使用多個紋理80
7.6思考題81
第8章渲染流水線82
8.1渲染流水線概述83
8.2變換過程中的坐標系83
8.3基於OpenGL ES的圖形變換84
8.3.1概述84
8.3.2世界變換86
8.3.3視圖變換86
8.3.4投影變換89
8.3.5視口變換92
8.4思考題92
第9章渲染正方體93
9.1正方體頂點的組成93
9.2使用OpenGL ES默認變換渲染正方體93
9.2.1準備項目93
9.2.2定義頂點屬性結構體93
9.2.3定義頂點數據94
9.2.4渲染95
9.2.5運行結果96
9.3設定投影矩陣以適配螢幕的寬高比96
9.3.1修改投影矩陣96
9.3.2運行結果97
9.4設定模型變換及結果97
9.4.1設定模型變換97
9.4.2運行結果98
9.5設定背面剔除及運行結果98
9.5.1設定背面剔除98
9.5.2運行結果99
9.6設定透視投影及運行結果99
9.6.1設定透視投影99
9.6.2運行結果101
9.6.3使用另一種透視相機模型101
9.7設定視圖變換及運行結果102
9.7.1設定視圖變換102
9.7.2運行結果102
9.8使立方體動起來102
9.9渲染第二個立方體103
9.10思考題105
第10章混合106
10.1實例: 半透明效果106
10.1.1實驗準備106
10.1.2渲染玻璃107
10.1.3運行結果109
10.1.4啟用混合109
10.2混合原理110
10.2.1混合原理簡介110
10.2.2混合公式111
10.3渲染帶有alpha通道的紋理112
10.4多次紋理混合113
10.5alpha測試115
10.6思考題117
第11章多重紋理118
11.1原理118
11.1.1紋理單元118
11.1.2紋理混合瀑布119
11.1.3紋理環境參數的設定119
11.1.4紋理分量120
11.1.5不同混合模式下紋理分量的計算公式121
11.1.6合併模式(Combine)下紋理分量的計算公式121
11.1.7操作122
11.2實例: 顏色、紋理混合123
11.2.1定義頂點屬性結構體123
11.2.2定義頂點數據124
11.2.3聲明各四邊形渲染函式124
11.2.4渲染函式125
11.2.5渲染第一個四邊形126
11.2.6渲染第二個四邊形126
11.2.7渲染第三個四邊形127
11.2.8渲染第四個四邊形128
11.2.9渲染第五個四邊形128
11.2.10渲染第六個四邊形130
11.3實例: 精靈表動畫131
11.3.1精靈表131
11.3.2圖像合成131
11.3.3代碼實現132
11.3.4調用代碼137
11.4實例: 光照紋理139
11.4.1原理139
11.4.2代碼139
11.5思考題141
第12章光照142
12.1光照的組成142
12.2材質143
12.3法線143
12.4法線的計算144
12.5光源145
12.6實例: 向場景中添加光照147
12.6.1設定頂點法向量147
12.6.2設定光源149
12.6.3立方體渲染函式149
12.6.4渲染各立方體150
12.7思考題153
第13章創建幾何體154
13.1程式框架重構154
13.1.1通用函式和結構體154
13.1.2基類GLViewBase 158
13.1.3派生類GLView164
13.2圓柱體建模164
13.2.1剖分方法164
13.2.2底面建模165
13.2.3側面建模166
13.2.4圓柱體類166
13.2.5調用圓柱體類170
13.3球體建模174
13.3.1剖分方法174
13.3.2球體類176
13.3.3調用球體類180
13.4思考題182
第14章頂點索引183
14.1原理183
14.2實例: 使用頂點索引建模球體184
14.3思考題188
第15章頂點快取對象189
15.1原理189
15.1.1定義快取對象名189
15.1.2生成快取對象名189
15.1.3綁定快取對象189
15.1.4傳輸快取數據190
15.1.5渲染190
15.2使用頂點快取對象最佳化球體模型190
15.3思考題194
第16章深度快取195
16.1原理195
16.1.1準備深度快取196
16.1.2清除深度快取197
16.1.3啟用深度測試197
16.1.4設定深度測試函式197
16.1.5渲染198
16.2實例: 使用深度快取198
16.2.1準備深度快取198
16.2.2清除深度快取198
16.2.3啟用深度測試渲染圖元199
16.2.4渲染結果200
16.3控制深度快取更新200
16.4思考題200
第17章模板快取201
17.1原理201
17.1.1準備模板快取202
17.1.2清除模板快取203
17.1.3啟用模板測試204
17.1.4設定模板測試函式204
17.1.5設定模板更新方式204
17.1.6渲染205
17.2實例: 鏡面效果205
17.2.1概述205
17.2.2鏡面變換206
17.2.3準備模板快取206
17.2.4清除模板快取207
17.2.5渲染207
17.3思考題208
第18章載入3D模型209
18.1常見3D模型檔案格式簡介209
18.2OBJ檔案格式簡介211
18.3一些OBJ關鍵字211
18.4MTL關鍵字212
18.5OBJ檔案實例214
18.6MTL檔案實例214
18.7WaveFrontObjLoader215
18.7.1WaveFrontObjLoader的特點215
18.7.2WaveFrontObjLoader的組成215
18.7.3WaveFrontOBJScene類215
18.7.4WaveFrontOBJGroup類216
18.7.5使用方式216
18.8實例: 載入OBJ模型並渲染218
18.8.1準備工作218
18.8.2修改GLView類的定義219
18.8.3初始化219
18.8.4渲染220
18.9改進221
18.9.1改進材質類221
18.9.2修改WaveFrontOBJGroup類的定義221
18.9.3修改WaveFrontOBJGroup類的實現222
18.9.4為WaveFrontOBJScene類添加render方法226
18.9.5調用改進的類226
18.9.6渲染結果228
18.10思考題228
第19章3D碰撞檢測229
19.1定義包圍信息229
19.2為WaveFrontOBJGroup類添加包圍信息230
19.2.1修改WaveFrontOBJGroup類的定義230
19.2.2實現Bounding屬性232
19.2.3實現calculateBoundingInfo方法232
19.3為WaveFrontOBJScene類添加包圍信息233
19.3.1修改WaveFrontOBJScene類定義233
19.3.2實現Bounding屬性234
19.3.3實現calculateBoundingInfo方法235
19.4渲染包圍盒236
19.4.1概述236
19.4.2添加WireFrameBox類236
19.4.3修改GLView類237
19.4.4渲染結果240
19.5實現碰撞檢測240
19.5.1概述240
19.5.2相關算法241
19.5.3添加Square類,用於繪製按鈕242
19.5.4修改GLView類,實現實例244
19.5.5測試程式250
19.6擴展討論250
19.7思考題251
第20章地形繪製基礎252
20.1高度圖253
20.1.1原理253
20.1.2創建高度圖253
20.1.3載入RAW檔案253
20.1.4訪問高度圖254
20.2創建地形幾何信息254
20.2.1Terrain類的定義254
20.2.2頂點的計算256
20.2.3索引的計算258
20.2.4紋理的計算259
20.3渲染地形261
20.4在地形中“行走”261
20.5調用地形類265
20.6思考題268
第21章天空繪製基礎269
21.1原理269
21.2實現天空盒270
21.2.1創建天空盒渲染數據270
21.2.2創建天空盒紋理271
21.2.3渲染天空盒272
21.3調用天空盒類273
21.4思考題276
第22章拾取277
22.1概述277
22.2原理278
22.2.1射線的定義278
22.2.2計算拾取射線278
22.2.3變換物體到觀察坐標系280
22.2.4射線/物體相交判定280
22.2.5封裝Picking類282
22.3拾取實例282
22.3.1修改Sphere類282
22.3.2修改GLView類的定義283
22.3.3初始化變數284
22.3.4實現渲染包圍球方法285
22.3.5修改renderRoles函式285
22.3.6實現拾取功能287
22.3.7修改touchesBegan函式288
22.3.8運行288
22.4思考題288
參考文獻289