內容簡介
系統包括大規模三維地形可視化系統、三維線路設計系統、三維場景漫遊系統、第三方模型(3DS、DXF)管理和套用系統、紋理管理和套用系統、多媒體輸出系統(三維動畫錄製、圖像序列錄製、列印輸出、導出到AutoCAD等外部模型)。內容涵蓋了OpenGL程式框架、OpenGL幾何模型、坐標變換、紋理映射、材質、計算機動畫技術、雙目立體真三維、OpenGL擴展套用、OpenGL圖像處理、三維圖形學基礎、攝像漫遊、構造天空和地形、模型載入、高級紋理映射、圖元處理、OpenGL緩衝區、顯示列表、空間信息查詢、基於OpenGL和遙感圖像的地形三維動態顯示技術、Oracle 資料庫編程、Oracle OCI編程技術等多個方面。
本書附帶光碟1張,內容為本書實例的源檔案、系統運行所需要的影像紋理和數字高程模型檔案;此外,還包括程式功能運行動畫和OCI程式示例。
本書深入淺出、內容廣泛,既可以作為從事可視化系統、虛擬現實、計算機圖形學研究及其他圖形應用程式開發的工作人員的必備用書,也可作為大學相關專業師生的參考書,還可作為OpenGL三維圖形編程的培訓教程,或供其他相關專業人士和計算機愛好者閱讀。
編輯推薦
體驗OpenGL三維世界無窮樂趣,成就非凡三維可視化軟體開發高手。
全面系統講解OpenGL在三維可視化系統開發中所用的編程方法、技術和技巧,循序漸進,圖文並茂。
強調編程的快捷省力,套用多個成熟的類代碼。
關注初學者的編程感受,步驟詳盡;重視高層技術人員的探討精神,提供多種解決實際問題的途徑。
以功能說明、設計思想、程式實現和運用效果為流程,詳細講解系統開發的步驟和具體實例。
所有程式實現及代碼都給出詳細說明、實例步驟和代碼詳細注釋,並對涉及的主要函式及需要注意的地方進行歸納,便於讀者在學習過程中舉一反三。
提供完整大型案例,側重實際套用,語言簡潔精練,講解清晰透徹,幫助讀者提高開發水平。
作者簡介
呂希奎,博士,畢業於西南交通大學道路與鐵道工程專業。主要從事道路勘測設計現代技術、城市軌道交通、選線設計理論、工程信息技術與虛擬環境仿真技術的研究,已發表及被錄用論文近20篇,導師是第二屆全國教學名師易思蓉教授。先後參與國家自然科學基金“基於GIS的虛擬環境選線系統智慧型環境建模方法及套用”(0278082)、鐵道部“高速磁懸浮鐵路線路平縱面技術參數初步研究”、 國家863“高速磁懸浮鐵路線路設計參數研究”項目的研究。3年軟體公司的工作經驗,高級程式設計師,具有多年的OpenGL、Oracle資料庫開發經驗。目前正在主持“交通安全與控制”河北省重點實驗室開放課題資助項目(城市軌道交通三維可視化規劃與設計系統,211001)研究。
目錄
第1篇 系統開發基礎
第1章 三維圖形世界
1.1 計算機三維圖形技術的發展
1.2 科學計算可視化技術
1.3 三維可視化工程設計
1.4 本書的適用對象
1.5 全書概覽
第2章 OpenGL概述
2.1 OpenGL概念建立
2.1.1 OpenGL基本理解
2.1.2 OpenGL的特點及功能
2.1.3 OpenGL工作流程
2.1.4 OpenGL繪圖流程
2.2 OpenGL的版本和擴展
2.2.1 OpenGL版本
2.2.2 OpenGL擴展
2.3 OpenGL編程基礎
2.3.1 OpenGL數據類型
2.3.2 OpenGL庫函式
2.3.3 OpenGL句法
2.3.4 OpenGL狀態變數
2.3.5 OpenGL變換
2.4 OpenGL程式框架建立
2.4.1 OpenGL像素格式
2.4.2 著色描述表
2.4.3 設定像素格式
2.4.4 創建著色描述表
2.4.5 創建Visual C++程式
2.5 本章小結
第3章 Oracle與OCI技術及編程基礎
3.1 Oracle資料庫簡介
3.2 Oracle資料庫的安裝
3.3 Oracle數據類型
3.4 Oracle編程接口
3.4.1 ADO開發接口
3.4.2 Pro* C/C++
3.4.3 Oracle OCI
3.4.4 ADO、Pro*C/C++、Oracle OCI的對比分析
3.5 OCI編程
3.5.1 OCI編程基礎
3.5.2 OCI數據結構
3.5.3 OCI程式的基本結構
3.5.4 OCI執行SQL的步驟
3.6 VC ++ 6.0下OCI編程實例
3.6.1 數據的準備
3.6.2 建立工程
3.6.3 加入OCI的頭檔案與庫檔案
3.6.4 在VC中套用OCI編程
3.7 本章小結
第2篇 大規模地形三維可視化系統設計與實現
第4章 地形三維可視化系統框架與OCI類模組設計
4.1 系統程式框架建立
4.1.1 建立Visaul C ++工程
4.1.2 添加OpenGL框架代碼和檔案
4.1.3 程式實現
4.2 OCI公共類的實現
4.2.1 新類的添加
4.2.2 類變數的添加
4.2.3 類函式的實現
4.3 本章涉及到的OpenGL函式與知識點
4.4 本章小結
第5章 地形三維可視化系統的地形渲染實現
5.1 地形三維可視化概述
5.2 地形三維可視化的主要算法
5.2.1 主要算法概述
5.2.2四叉樹結構的多解析度地形模型
5.3 地形三維可視化系統的實現
5.3.1 海量地形與影像紋理數據的獲取方法
5.3.2 海量地形自分塊程式實現
5.3.3 大影像的自分塊及程式實現
5.3.4 狀態欄指示器的實現
5.3.5 地形與影像子塊的調度
5.3.6 三維地形紋理映射
5.3.7 地形節點評價系統
5.3.8 系統最佳化算法
5.3.9 三維地形的渲染
5.3.10 真三維立體的實現
5.4 本章涉及到的OpenGL函式與知識點
5.5 本章小結
第6章 地形三維可視化系統項目管理與輔助功能
6.1 項目管理
6.1.1 新建項目
6.1.2 打開項目
6.2 背景天空的實現
6.3 繪圖模式的控制
6.4 空間查詢
6.4.1 查詢算法實現
6.4.2 查詢標識設定
6.4.3 查詢三維坐標
6.4.4 查詢空間距離
6.5 照相機模組的設計與實現
6.5.1 鍵盤控制的實現
6.5.2 滑鼠控制的實現
6.6 本章涉及到的OpenGL函式與知識點
6.7 本章小結
第3篇 線路三維可視化系統設計與實現
第7章三維互動技術與三維線路數據結構
7.1 三維互動技術
7.1.1 互動環境概述
7.1.2正射投影模式實現
7.1.3 正射投影模式下場景控制
7.1.4 透視投影模式實現
7.2 三維地面坐標的獲取
7.2.1 正射投影模式下的獲取
7.2.2 透視投影模式下的獲取
7.3 三維線路數據結構設計
7.3.1 邊坡數據結構
7.3.2 橋樑數據結構
7.3.3 隧道數據結構
7.3.4 水溝數據結構
7.3.5 線路數據結構
7.4 本章涉及到的OpenGL函式與知識點
7.5 本章小結
第8章 三維線路設計實現
8.1 線路方案主要參數設計
8.2 設計交點信息輸入實現
8.3 線路中心線定位
8.4 設計方案保存與平面方案生成
8.4.1 設計方案保存
8.4.2 平面方案的自動生成
8.5縱斷面設計模組的實現
8.6 邊坡模型的生成算法
8.7 線路路基三維建模
8.8 隧道三維建模與繪製
8.8.1 隧道三維建模
8.8.2 隧道參數設定實現
8.8.3 隧道繪製實現
8.9 橋樑三維建模與繪製
8.9.1 橋樑三維建模
8.9.2 橋樑參數設定實現
8.9.3 橋樑繪製實現
8.10 線路三維模型繪製
8.11 本章涉及到的OpenGL函式與知識點
8.12 本章小結
第9章 道路整體三維建模
9.1 道路整體三維模型的實現
9.1.1 線路封閉區域確定與分割算法
9.1.2 地形塊綜合數據點計算
9.1.3 分塊TIN模型的構網實現
9.1.4 封閉區域內數據點的剔除
9.1.5 整體構網的實現
9.2 紋理管理
9.2.1 邊坡紋理
9.2.2 路肩紋理
9.2.3 橋樑護坡面紋理
9.2.4 隧道內牆紋理
9.2.5 隧道洞門紋理
9.3 本章涉及到的OpenGL函式與知識點
9.4 本章小結
第10章 三維漫遊的實現
10.1 飛行路徑建立
10.1.1 飛行路徑簡介
10.1.2 飛行路徑設定方法
10.1.3 飛行路徑插值算法
10.1.4 飛行路徑的保存
10.1.5 打開飛行路徑
10.1.6 顯示/關閉飛行路徑
10.2 沿飛行路徑漫遊實現
10.2.1 沿固定高度漫遊實現
10.2.2 沿相對高度漫遊實現
10.3 沿線路方案線三維漫遊實現
10.3.1 飛行路徑的獲取
10.3.2 漫遊的實現
10.4 三維漫遊的控制
10.4.1 開始/暫停漫遊
10.4.2 停止漫遊
10.4.3 單步前進
10.5 三維漫遊的調整
10.5.1 飛行視野調整
10.5.2 飛行高度調整
10.5.3 飛行傾角調整
10.5.4 飛行速度調整
10.5.5 三維漫遊調整的熱鍵實現
10.6 三維漫遊的相關計算
10.6.1 三維漫遊幀頻的計算
10.6.2 三維漫遊速度的計算
10.6.3 三維漫遊里程的計算
10.7 本章涉及到的OpenGL函式與知識點
10.8 本章小結
第4篇 線路三維可視化系統輔助功能實現
第11章 顯示模式控制及實現
11.1 顯示模式控制及實現
11.1.1 雙目立體方式
11.1.2 正射投影方式
11.1.3 透視投影方式
11.2 時鐘指北針的實現
11.3 縮略圖的實現
11.4 本章涉及到的OpenGL函式與知識點
11.5 本章小結
第12章 3D模型載入與套用
12.1 常用3D模型概述
12.1.1 3DS模型
12.1.2 OBJ模型
12.1.3 ASE模型
12.1.4 MD2/MD3模型
12.1.5 MS3D模型
12.2 3DS模型的載入
12.2.1 3DS檔案基本構成
12.2.2 第三方軟體轉換法
12.2.3 程式直接載入
12.2.4 程式直接載入的實現
12.3 3DS模型在系統中套用實例
12.4 本章涉及到的OpenGL函式與知識點
12.5 本章小結
第13章 系統輸出接口與動畫錄製實現
13.1 輸出線路三維模型到AutoCAD
13.1.1 輸出格式DXF簡介
13.1.2 DXF輸出模組的設計
13.1.3 輸出的實現
13.2 AVI動畫錄製
13.2.1 動畫錄製類實現
13.2.2 動畫錄製參數設定
13.2.3 開始錄製動畫
13.2.4 暫停錄製動畫
13.2.5 結束錄製動畫
13.3 螢幕圖形的列印
13.3.1 圖形列印類的實現
13.3.2 列印預覽的實現
13.3.3 列印設定的實現
13.3.4 列印的實現
13.4 錄製圖像
13.4.1 圖像採集頻率
13.4.2 圖像錄像
13.4.3 停止錄像圖像
13.5 保存螢幕到點陣圖
13.6 本章小結
第14章 系統簡介與運行實例
14.1 系統介紹
14.1.1 系統主要特點
14.1.2 系統運行環境
14.2 系統功能模組簡介
14.3 系統運行實例
14.4 本章小結
附錄
附錄A 相關數學程式模組
附錄B OpenGL核心函式館和套用函式館
附錄C OpenGL常用編程技巧
附錄D OpenGL資源網站
參考文獻
序言
可視化技術作為圖形生成和圖像理解相結合的一種新技術,賦予人們一種仿真的、三維的並且具有實時互動的能力,這樣人們可以在三維圖形世界中用以前不可想像的手段來獲取信息或發揮自己創造性的思維,尤其是在可視化技術基礎發展起來的虛擬現實技術、三維仿真技術及科學計算可視化技術,它們的發展及其相互結合使人類認識和駕馭世界的技能更是得到了極大延伸。OpenGL(Open Graphics Library,開放性圖形庫)作為一個性能優越的圖形應用程式設計界面(API)而適合於廣泛的計算機環境,從個人計算機到工作站和超級計算機,OpenGL都能實現高性能的三維圖形功能。由於許多在計算機界具有領導地位的計算機公司紛紛採用OpenGL作為三維圖形應用程式設計界面,OpenGL應用程式具有廣泛的可移植性,已成為目前的三維圖形開發標準,其自誕生至今已催生了各種計算機平台及設備上的數千優秀應用程式。
進入21世紀以來,新科技革命迅猛發展,遙感技術、數字攝影測量技術、虛擬現實技術等高新技術取得了長足的發展。航空航天遙感技術的進步提供了快速獲取信息的手段。數字攝影測量技術除了能提供數字線劃圖外,還能生產正射影像圖、數字高程模型等,這些數字攝影測量產品所包含的信息量和信息類型已遠遠超過了傳統的等高線地形圖。如果利用OpenGL優秀的三維圖形功能,結合現代信息技術,建立一個逼真顯示的三維可視化地理環境,使工程師可以從二維平面圖中得以解放直接進入三維世界,實現直接在三維環境中進行工程設計,實時建立工程的三維模型,達到所見即所得的設計效果,從根本上改變重複無味的設計工作方式,使設計工作變得趣味盎然,對提高設計質量和加快設計速度有著巨大的作用。
文摘
第1篇 系統開發基礎
包括第1章三維圖形世界、第2章OpenGL概述和第3章Oracle與 OCI技術及編程基礎。
第1章 介紹了計算機三維圖形技術的發展、科學計算可視化技術、三維可視化工程設計的基本概念和發展現狀。
第2章 主要對OpenGL的基本概念、OpenGL編程基礎和在Visual C++環境下OpenGL基本程式框架的建立進行了講解,並給出了一個簡單的旋轉立方體程式示例。通過這一章,使讀者對OpenGL有初步的概念和了解,對於紋理、顯示列表等更深入的編程,我們將通過後續章節進行更詳細的講解和學習。
第3章 主要對Oracle資料庫及其特點進行簡要的介紹和說明。以Oracle 9i為例,介紹了Oracle資料庫的安裝步驟和Oracle支持的數據類型。在此基礎上,介紹了ADO、Pro*C/C++和OCI三個主要Oracle編程接口,對它們的各自功能和特點進行了詳細說明,從功能方面、性能方面、開發難度方面進行了詳細分析和比較。重點介紹OCI編程基礎、OCI的數據結構、OCI程式的基本結構、OCI執行的步驟,最後給出了在Visual C++6.0環境下開發OCI應用程式的示例。
第2篇 大規模地形三維可視化系統設計與實現
包括第4章地形三維可視化系統框架與OCI類模組設計、第5章地形三維可視化系統的地形渲染實現和第6章地形三維可視化系統項目管理與輔助功能設計。
第4章 在第2章的基礎上,完成了基於OpenGL的地形三維可視化系統程式框架的建立,為後續的功能模組開發提供了基礎平台;在第3章的基礎上,設計了OCI公共類,將所有與OCI有關的資料庫操作、數據讀取等功能函式實現全部封裝在該類中,並定義了公共類的全局變數myOci。
第5章 本章對地形三維可視化進行了基本概述,介紹了目前地形三維可視化的主要算法。主要介紹了海量地形與影像紋理數據的常用獲取方法,給出了海量地形自分塊與影像紋理分塊原則和程式實現,以及地形與影像子塊調度的程式實現,在此基礎上實現了地形的三維可視化;還介紹了真三維立體的實現算法和數學模型,在此基礎上給出了基於OpenGL的真三維立體的程式實現。
第6章 主要講解了新建項目、打開項目、背景天空的繪製、繪圖模式控制的實現方法和程式設計。介紹了基於OpenGL深度快取的二維螢幕坐標向三維空間坐標的轉換算法,實現了對三維空間坐標和空間距離查詢,以及查詢標識設定的程式設計;最後講解了基於鍵盤和滑鼠聯合控制的三維場景照相機程式模組的實現,實現三維場景的前、後、左、右移動和任意方向的旋轉。
第3篇 線路三維可視化系統設計與實現
包括第7章三維互動技術與三維線路數據結構、第8章三維線路設計實現、第9章道路整體三維建模和第10章三維漫遊的實現。
第7章 主要對三維互動環境進行了介紹,詳細講解了正射投影模式的實現、正射投影模式下場景控制方法和程式設計,以及透視投影模式的實現方法;還講解了正射投影模式和透視投影模式下三維地面坐標的獲取原理、方法,在此基礎上,設計了邊坡數據結構、橋樑數據結構、隧道數據結構、水溝數據結構及線路數據結構,為實現三維線路設計做好了前期準備。
第8章 主要對線路方案的主要參數設計方法和程式實現、設計交點信息輸入實現、線路中心線定位方法、設計方案的保存、平面方案的自動生成和程式設計、縱斷面設計模組的實現、邊坡模型的生成算法、線路路基三維建模方法和實現、隧道三維建模和參數控制、橋樑三維建模和參數控制的程式設計進行了詳細講解。
第9章 主要講解了道路整體三維模型實現,對其中的線路封閉區域確定與分割算法、地形塊綜合數據點計算、分塊TIN模型的構網實現、封閉區域內數據點的剔除、整體構網的程式實現都進行了詳細說明;在紋理管理部分,詳細講解了邊坡紋理、路肩紋理、橋樑護坡面紋理、隧道內牆紋理、隧道洞門紋理的程式設計和實現。
第10章 從多個方面對三維漫遊的基本概念、程式實現、參數調整和控制進行了講解,幫助讀者學會在三維可視化系統中三維漫遊模組的程式設計方法;對飛行路徑的基本概念、設定方法、插值算法、保存和打開的程式設計,沿飛行路徑實現三維漫遊的程式設計,沿線路方案漫遊的固定高度和相對高度兩種模式的程式設計,三維漫遊控制和調整的程式設計,以及三維漫遊的相關計算都進行了詳細的講解,每一部分都給出了完整的程式代碼。
第4篇 線路三維可視化系統輔助功能實現
包括第11章顯示模式控制及實現、第12章3D模型載入與套用、第13章系統輸出接口與動畫錄製實現和第14章系統簡介與運行實例。
第11章 本章主要對雙目立體方式、正射投影方式和透視投影方式的顯示模型模式控制和實現、時鐘指北針的程式設計和實現、縮略圖的實現方法和程式設計進行了詳細的講解和說明。
第12章 本章主要對目前常用的3DS、AES、OBJ、MD2、MD3、MS3D等3D模型進行了介紹和說明,並給出了每種3D模型的示例,在此基礎上,詳細介紹了在OpenGL中套用3DS模型的兩種主要方法:通過第三方軟體對3DS模型進行轉換和直接通過程式讀取3DS模型;以橋墩3DS模型為例,給出了3DS模型線上路三維場景中的套用方法和程式設計實現。
第13章 介紹了DXF檔案格式,詳細講解了DXF輸出模組的程式設計,實現了線路三維模型輸出到DXF檔案,可以在AutoCAD中打開線路三維模型進行觀察;設計了動畫錄製類,實現將OpenGL動畫錄製到AVI檔案中;設計了螢幕圖形列印類,實現了對OpenGL螢幕圖形的列印,在此基礎上,設計錄製螢幕圖像模組,實現了將OpenGL動畫錄製為一系列圖像並保存到硬碟中。
第14章 主要對所建立的三維可視化設計系統的主要特點和功能進行了介紹,對線路可視化設計系統加以總結,並對相應的功能模組進行集中說明,使讀者能夠對整個三維可視化設計有更加清晰的思路和概念,最後給出系統運行實例。
附錄
包括附錄A:相關數學程式模組;附錄B:OpenGL核心函式館和套用函式館;附錄C:OpenGL常用編程技巧;附錄D:OpenGL資源網站。