新四季網

面向esri三維gis模塊的植入式真三維立體渲染方法

2023-10-21 10:55:22

專利名稱:面向esri三維gis模塊的植入式真三維立體渲染方法
技術領域:
本發明涉及三維可視化技術領域,具體涉及一種面向ESRI三維GIS模塊 軟體的植入式真三維立體渲染方法。
背景技術:
隨著計算機技術的發展,立體顯示已經成為環境仿真、模擬訓練以及規劃 設計等領域常用的技術手段,甚至開始與電影、電腦遊戲等結合產生立體電 影和真三維遊戲融入人們的日常生活。三維GIS作為一種重要的GIS形式是 一種重要的三維應用系統,ESRI公司是世界上最大的GIS軟體供應商,其推 出的三維GIS模塊包括ArcScene、 ArcView下的3D Analysis擴展模塊和三 維虛擬地球軟體ArcExpl orcr。
在三維應用中實現立體視覺是一種潮流,在單一顯示設備上觀察到立體景 物,需要將左、右眼所看到的影像各自獨立分開,然後通過特定的外置設備 使左右眼看到不同的影像而通過大腦的生理作用形成立體視覺。傳統的立體 顯示需要專業的設備進行立體顯示,包括支持左右緩存的顯卡和支持雙通道 顯示的立體顯示設備。基於上述技術,產生了廣為流行的虛擬現實技術,在 機器仿真、戰場模擬等領域得到了廣泛的應用。但是,由於需要專業設備, 成本高昂,也限制了立體顯示技術的應用,所以立體顯示的應用不能得到推 廣,大量的三維程序還是釆用單通道技術進行顯示,缺乏立體感,失去了三 維程序應有的立體顯示特性。同時,由於立體顯示需要專門硬體,特殊的編程技巧,也造成了大量的程序在開發時沒有考慮立體顯示特性,沒有在程序 中實現支持立體顯示的功能,使得這些程序即使在有立體顯示功能的硬體上 也不能顯示立體。這些程序佔據了現在三維顯示程序的絕大部分,ESRI三維
GIS模塊也沒有突破上述限制,其在建模過程中,用戶還是只能看到單通道的
透視三維,不能實現真三維的立體顯示,不能達到最佳的應用效果。

發明內容
本發明所要解決的問題在於克服ESRI三維GIS模塊(下簡稱ESRI三維 GIS模塊)在三維顯示中存在的不足,實現對原軟體不加修改的真三維立體 顯示。本發明的核心是利用三維渲染的基本原理,通過攔截顯卡結果幀圖像 中顏色數據和深度數據,解析生成結果幀圖像的投影變換矩陣,應用三維渲 染的基本原理以及重構柵格化的三維場景,在此場景基礎上,應用立體視覺 原理,生成立體像對,基於不同的立體顯示模式,驅動顯卡進行立體輸出。
本發明依賴的技術基礎是計算機圖形學中關於三維渲染的基本模型,即 ESRI三維GIS模塊使用的3D API (當前在Windows下ESRI三維GIS模塊軟 件在硬體加速驅動下均使用0penGL)的三維渲染的基本模型,包括三維渲染流 水線、頂點的變換流水線、Z緩衝區算法等。實現依據是OpenGLAPI和顯卡, 兩者均是基於該基本模型進行工作的。本發明在不更改ESRI三維GIS模塊源 代碼、二進位代碼或計算機硬體結構的情況下,使該計算機軟體實現雙目視 覺的立體真三維顯示與觀測。
計算機三維顯示的基本原理是將三維場景經過幾何變換和光照處理以及 柵格化之後,生成一幅二維柵格圖像在輸出設備上輸出。三維場景中包含一 系列的三維對象,三維對象是由一系列頂點構成的幾何圖元(包括點,線和三角形)組合而成。頂點是一個包含三維空間位置及其對應的渲染參數的坐 標點。首先對頂點數據進行透視坐標變換和光照處理。在坐標變換階段,描 述物體幾何形狀的頂點被變換到視點為中心的坐標系下,再進行光照計算確 定每個頂點應該具有的顏色和亮度。計算機圖形學的基本顯示單元是像素, 這些幾何對象被柵格化成像素,最後這些像素被送到幀緩存中等待顯示,如 圖2所示。
在三維圖形渲染中存在著一系列的坐標變換,最後將物體本身的坐標變 換成二維屏幕上的像素坐標。這些坐標變換都是將上一步變換結果作為輸出 的,構成一個頂點坐標變換的流水線,如圖3所示。所有三維對象的坐標均被 統一到了同一個坐標系下,經過投影和裁剪形成規格化的坐標,通過柵格化 變換形成圖像像素。
z緩衝區算法又稱深度緩衝算法。由於二維平面坐標在透視投影下可以對
應無限多個三維坐標。所以柵格化的幾何對象包含了每個像素對應的到視點 稱為深度值的參數,如果柵格化幾何對象像素的深度值小於原來像素,就用 這個像素的值代替原來位置的值,這就保證了總是距離視點最近的像素被保 存下來。
針對以上原理,實現本發明目的的技術方案是
面向ESRI三維GIS模塊軟體的植入式真三維立體渲染方法,該方法包括 以下步驟
步驟(1)針對ESRI三維GIS模塊使用的3D API進行監控與渲染數據攔
截;
步驟(2)利用場景變換矩陣和投影變換矩陣重構柵格化的三維數據;步驟(3)自適應屏幕解析度和人的眼基距設定兩個不同的視點位置並生
成立體像對;
步驟(4)針對不同的立體觀察設備進行真三維觀測。
本發明的方法具體可用下列步驟實現,下列步驟不分先後
a. 監控創建三維顯示環境的函數,在該函數中加入調用3D API的系統檢 測函數功能,獲取系統立體顯示特性,根據相應的立體顯示特性,更改原始 設定的顯示環境中的立體顯示模式,在支持立體顯示的硬體上開啟真三維立 體顯示支持,在不支持立體顯示的硬體上,設置標誌以便進行紅綠立體顯示。
b. 監控開始一幀繪製函數,在該函數中加入代碼獲取當前繪圖幀的視口 尺寸,根據渲染的像素格式為立體像對創建臨時的緩衝區。
c. 監控改變當前繪製矩陣函數,在該函數中加入代碼以獲取三維應用軟 件對當前繪製矩陣的更改,通過矩陣參數識別場景渲染的投影類型,當是透 視投影時,記錄該矩陣,作為三維場景重構的關鍵參數;
d. 監控將幀緩存輸出到顯示設備的函數,在監控函數加入代碼以獲取整 個幀中各像素的顏色和深度數據,基於步驟c獲取的投影變換矩陣信息,反 算每個像素在視點坐標系下的三維坐標,重建出基於像素的柵格化的三維場 景;根據人眼睛的立體視覺模型,生成可供立體顯示的立體像對。
所述步驟(1)中3D API的監控與渲染數據攔截進一步包括利用API攔 截技術,獲取三維繪製相關矩陣和三維渲染數據輸出,提取實現三維透視變 換的投影矩陣、視口寬高,作為三維場景重構的關鍵參數;利用3DAPI的特定函數,攔截三維渲染輸出,提取顯卡幀緩存中的顏色和深度數據,作為三 維場景重構的基礎。
3D API攔截是指利用計算機編程技術,對ESRI三維GIS模塊使用的3D API函數調用進行監控,並對3D API產生的渲染數據進行攔截在其中插入自 定義代碼,達到對原有API進行監控或重新實現的目的。API攔截技術成熟且 應用廣泛,如屏幕取詞軟體、反病毒軟體、網絡防火牆等等。本發明所指的 3D API渲染攔截是指攔截特定功能的若干關鍵3D API函數。
所述步驟(1 )中還進一步包括針對其實現3D API函數的攔截的具體步驟 針對ESRI三維GIS模塊使用的3D API (0penGL),通過代碼注入或/和鉤子函 數技術編寫特定的攔截程序,在三維可視化程序的數據加載階段,將3D API 攔截程序加載到三維可視化程序的進程中,從而攔截和監控3D API調用。本 發明所指需要攔截的3D API關鍵函數如下
(21) 3D API創建三維顯示環境的函數;
(22) 3D API開始一幀場景渲染的函數;
(23) 3D API改變當前渲染矩陣的函數;
(24) 3D API結東一幀場景渲染的函數;
(25) 3D API將渲染數據輸出到當前屏幕上的函數。
所述步驟(2)進一步包括利用3D API輸出到顯卡幀緩存中的顏色和深度 數據,結合攔截3D API調用而獲得的投影參數,來解析生成顏色圖像和深度 數據的三維空間信息。即,通過生成三維渲染輸出的投影矩陣和視口寬高, 解算出三維渲染關鍵控制參數(視點位置、近平面、遠平面)以及三維渲染輸出的顏色和深度數據,進而解算出每個像素在視空間中的三維坐標以及對 應的顏色特性,重構視空間下柵格化的三維場景數據。它具體可以包含以下 步驟
I. 透視投影變換矩陣的識別。在一幀場景的渲染過程中,三維應用軟體 可能會多次更改投影變換矩陣,只有透視變換矩陣才可以產生透視三維效果。 不失一般性,假設透視投影變換矩陣在一幀的渲染過程中保持一致,將透視 投影矩陣攔截下來,將矩陣中的特徵值作為判據,判斷當前攔截的矩陣是否 為透視投影矩陣。
II. 建立視點為坐標原點的三維空間坐標系(簡稱視點坐標系)。以步驟
I截獲的透視投影變換矩陣為參數,建立以透視點為坐標原點的視圖坐標系 Z軸穿過近平面的中心,近平面的Y軸和X軸方向和該坐標系的X軸,Y軸方 向一致,近平面位於近平面值對應的Z軸的刻度上。近平面上X的值域是 [-width/2, width/2] ,Y的值域是[-height/2, height/2]。在該坐標系中,任 意坐標點P(X,Y,Z)與近平面的交點的坐標值P' (X', Y', Z')可以由透視 投影矩陣變換求得,其中Z'對應於幀深度緩存中的深度值。可得r等於 width/2*X/Z ; Y'等於 height/2*Y/Z ; Z'等於(z-zNear)/z * zFar/(zFar-zNear),其中Z'對應於深度緩存中的值。
III.柵格化三維場景數據的重構。設視口的寬度為width'、高度為 height:可由0penGL API相關函數獲得。由視口和近平面的比例關係可知 任意三維渲染幀圖像像素點的坐標P〃' (X'〃,Y"0對應於近平面上的三維 坐標 Pn(xn ,yn ,zn),其中xn= (X〃'-width'/2) *width/2 , yn=(F '' -height' /2) *height/2。對應的深度緩存中的值Z',由步驟II可知,對應的視點坐標系下Z值為Z'*(zFar-zNear)/zFar+zNear,可得像素點在視 點坐標系下的坐標P(X,Y,Z),其中X等於xNear/zNear*Z , Y等於 yNear/zNear*Z。
通過調用OpenGL API的讀取顯卡中顏色緩衝區函數和深度緩衝區函數, 利用步驟II中建立的坐標系以及上述關係,可以獲得視點坐標系下所有像素 點的三維坐標。將所有的三維坐標用三角形面片連接起來,就構成了一個可 進行三維渲染的立體表面,該表面通過三維流水線,在任意視角下進行渲染。
所述步驟(3)中"設定兩個不同的視點位置並生成立體像對"是利用步驟 (2)重構的三維場景,生成兩幅影像,形成立體像對。本發明提出基於"立體 像素"的三維場景的立體顯示模型,所謂立體像素是指將步驟(2)重構的三維
場景的每個像素與其對應視點空間的三維坐標 一 起組成序列 [(X,Y,Z), (R,G,B)],構成的一個三維像素空間。針對該空間中的每個像素, 按照透視變換原理,計算出其在新視點的像素位置點。 生成立體像對可釆用下列兩種方法
方法一.調用3D API,渲染步驟(2)中獲得的場景數據,在原始圖像作 為左視點圖像情況下,生成右視點圖像;在原始圖像作為右視點圖像情況下, 生成左視點圖像;在不保存原始圖像情況下,生成左右視點圖像,從而實現 立體像對生成。
方法二.釆用柵格化三維場景數據,構建原始視空間與目標視空間下像素 的映射關係,將原始視空間下的像素直接變換到目標視空間下。在原始圖像 作為左視點圖像情況下,生成右視點圖像;在原始圖像作為右視點圖像情況下,生成左視點圖像;在不保存原始圖像情況下,生成左右視點圖像,從而
實現立體像對快速生成。其中
視點水平偏移,是指新視點距離原始視點在x軸方向上的改變量z^ 。
視點垂直偏移,是指新視點距離原始視點在Z軸方向上的改變量A。 圖像像素偏移,是指生成的圖像像素水平方向的附加偏移Aw。 則在另 一的視點坐標系下,對原始幀圖像中點P (X, Y, Z)的像素標在左視點 下的坐標X是Width'*(X-Dx)/(Z-Dz)+Dpixel, Y是Height"Y/(Z-Dz)。該像素 在對於右視點坐標系下,坐標按照上述方法計算,但Dx,Dz取負號。
將每個像素的顏色複製到目標位置。對兩個視點都應用該方法從而獲得 立體像對。該方法具有不經過圖形流水線,程序編制簡單,優化容易等優點。
所述步驟(4)中"針對不同的立體觀察設備進行真三維觀測"是指將步 驟(3)生成的立體像對,通過顯示設備輸出並進行立體觀察。本發明生成的立 體像對通過如下方式進行真三維顯示
x.顯卡支持的雙目立體顯示。如在支持立體顯示的OpenGL API環境下, 在創建設備句柄階段啟動OpenGL API的立體顯示模式,將生成的立體像對分 別輸送到左右兩個緩衝區中,實現立體顯示。
y.在不支持立體顯示的顯卡上,將立體像對合成為一幅紅綠互補色立體圖
像,從左右立體像對中的一個圖像提取紅色通道,另一個圖像中提取綠色和 藍色通道,將提取的通道融合,形成一個互補色的立體圖像。並送回原始的 圖像緩衝區進行立體顯示與觀測。
z.將立體圖像或像對輸送到其他支持立體顯示設備上。本發明旨在解決ESRI三維GIS模塊程序不能支持立體顯示的問題,依靠
成熟的代碼攔截技術攔截在ESRI三維GIS模塊對於3D API的調用進行重新 編排。通過監控投影矩陣,獲取反算三維場景的關鍵參數,通過繪製的顏色 圖像和深度圖像,逐象素的反求其三維坐標,並將像素值映射到對應的位置 上,形成立體像對。通過各種顯示模式進行立體顯示,本發明也為現有的大 量三維程序的直接立體化提供了一條可行的途徑。本發明具有如下特色
(1) 解決了在ESRI三維GIS模塊不能進行立體顯示的問題,提升了在 ESRI三維GIS模塊的交互和用戶體驗。
(2) 實現的算法新穎,通過幀緩衝區中的顏色圖像數據和深度數據經過 重新分配形成立體像對,算法原理簡單,編程實現方便。
(3) 充分利用了現有的技術資源,由於基於工業標準的OpenGLAPI開發, 具有良好的適應性,對於顯卡沒有特殊要求。支持多種顯示模式,可以在任 意顯示環境下實現立體顯示。


圖1本發明實施例1的方法流程圖
圖2本發明釆用的三維渲染的基本模式
圖3本發明釆用的三維圖形的坐標變換流水線
圖4本發明實施例1的透視投影與透視變換矩陣
圖5本發明實施例1的以視點為中心的坐標系
圖6本發明實施例1的立體像對的快速生成方法圖具體實施方式
下面結合附圖和實施例對本發明做進一步詳細說明。 實施例1如圖2和圖3所示,由於在建模階段ESRI三維GIS模塊均使用OpenGL API 作為三維渲染API,故本實施例基於OpenGL API作為實施對象,作業系統平 臺為Windows XP進行實施。OpenGL API的攔截與監控基於Micorsof t Detours SDK開發。Detours是 Microsof t提供的一套Windows平臺下進行API調用攔截的開發包,支持Win32所有平臺。如圖l所示,面向ESRI三維GIS模塊軟體的植入式真三維立體渲染方法,該方法包括以下步驟步驟(1)針對ESRI三維GIS模塊使用的OpenGL API進行監控與渲染數據攔截;步驟(2)利用場景變換矩陣和投影變換矩陣重構柵格化的三維數據; 步驟(3)自適應屏幕解析度和人的眼基距設定兩個不同的視點位置並生 成立體像對;步驟(4)針對不同的立體觀察設備進行真三維觀測。 步驟(1)中OpenGL API的攔截與獲取場景渲染數據進一步包括利用 3D API攔截技術,獲取三維繪製相關矩陣和三維渲染數據,提取實現三維透 視變換的投影矩陣、視口寬高,作為三維場景重構的關鍵參數;利用3D API 的特定函數,攔截三維渲染輸出,提取顯卡幀緩存中的顏色和深度數據,作 為三維場景重構的基礎。步驟(2)進一步包括利用0penGL API輸出到顯卡幀緩存中的顏色和深度 數據,結合攔截0penGL API調用而獲得的投影參數,來解析生成顏色圖像和 深度數據的三維空間信息。它進一步包含以下步驟I.透視投影變換矩陣的識別。在一幀場景的渲染過程中,三維應用軟體 可能會多次更改投影變換矩陣,只有透視變換矩陣才可以產生透視三維效果。 不失一般性,假設透視投影變換矩陣在一幀的渲染過程中保持一致。透視投 影的各項控制參數與對應的矩陣關係見附圖4所示。將透視投影矩陣攔截下 來,將矩陣中的特徵值作為判據,判斷當前攔截的矩陣是否為透視投影矩陣。II. 建立視點為坐標原點的三維空間坐標系(簡稱視點坐標系)。以a截獲 的透視投影變換矩陣為參數,建立以透視點為坐標原點的視圖坐標系Z軸穿 過近平面的中心,近平面的Y軸和X軸方向和該坐標系的X軸,Y軸方向一致, 近平面位於近平面值對應的Z軸的刻度上。近平面上X的值域是 [-width/2, width/2] ,Y的值域是[-height/2, height/2]。在該坐標系中,任 意坐標點P(X,Y,Z)與近平面的交點的坐標值P' (X', Y', Z')可以由透視 投影矩陣變換求得,其中Z'對應於幀深度緩存中的深度值,如附圖5所示。可 得X'等於width/2*X/Z ; Y'等於height/2*Y/Z; Z'等於(z-zNear)/z * zFar/(zFar-zNear),其中Z'對應於深度緩存中的值。III. 柵格化三維場景數據的重構。設視口的寬度為width'、高度為 height',可由0penGL API相關函數獲得。由視口和近平面的比例關係可知 任意三維渲染幀圖像像素點的坐標P〃' (X'〃,Y'〃)對應於近平面上的三維 坐標 Pn(xn ,yn ,zn),其中 xn= W-width'/2) *width/2 , yn-(Y'"-heightV2)化eight/2。對應的深度緩存中的值Z',由b可知,對應的視點坐標系下Z值為Z"(zFar-zNear)/zFar+zNear,可得像素點在視點坐 標系下的坐標P (X, Y, Z),其中X等於xNear/zNear*Z, Y等於yNear/zNear*Z。通過調用0penGL API的讀取顯卡中顏色緩衝區函數和深度緩衝區函數, 利用步驟II中建立的坐標系以及上述關係,可以獲得視點坐標系下所有像素 點的三維坐標。將所有的三維坐標用三角形面片連接起來,就構成了一個可 進行三維渲染的立體表面,該表面通過三維流水線,在任意視角下進行渲染。步驟(3)利用步驟(2)重構的三維場景,生成兩幅影像,形成立體像對。生成立體像對可釆用下列兩種方法一.調用3DAPI,渲染步驟(2)中獲得的場景數據,在原始圖像作 為左視點圖像情況下,生成右視點圖像;在原始圖像作為右視點圖像情況下, 生成左視點圖像;在不保存原始圖像情況下,生成左右視點圖像,從而實現 立體像對生成。方法二.釆用柵格化三維場景數據,構建原始視空間與目標視空間下像素 的映射關係,將原始視空間下的像素直接變換到目標視空間下。在原始圖像 作為左視點圖像情況下,生成右視點圖像;在原始圖像作為右視點圖像情況 下,生成左視點圖像;在不保存原始圖像情況下,生成左右視點圖像,從而 實現立體像對快速生成。其中視點水平偏移,是指新視點距離原始視點在X軸方向上的改變量Z^ 。 視點垂直偏移,是指新視點距離原始視點在Z軸方向上的改變量A。 圖像像素偏移,是指生成的圖象像素水平方向的附加偏移Aw。 則在另一的視點坐標系下,對原始幀圖像中點P(X,Y, Z)的像素標在左視點 下的坐標X是Width" (X-Dx)/(Z-Dz)+Dpixel, Y是Height'*Y/(Z-Dz)。該像素在對於右視點坐標系下,坐標按照上述方法計算,但Dx,Dz取負號。將每個像素的顏色複製到目標位置。對兩個視點都應用該方法從而獲得 立體像對。該方法具有不經過圖形流水線,程序編制簡單,優化容易等優點。步驟(4 )將步驟(3)生成的立體像對,通過顯示設備輸出並進行立體觀察。本發明生成的立體像對通過如下方式進行真三維顯示x.顯卡支持的雙目立體顯示。如在支持立體顯示的0penGL環境下,在創 建設備句柄階段啟動0penGL的立體顯示模式,將生成的立體像對分別輸送到 左右兩個緩衝區中,實現立體顯示。或y.在不支持立體顯示的顯卡上,將立體像對合成為一幅紅綠互補色立體圖 像,從左右立體像對中的一個圖像提取紅色通道,另一個圖像中提取綠色和 藍色通道,將提取的通道融合,形成一個互補色的立體圖像。並送回原始的 圖像緩衝區進行立體顯示與觀測。或z.將立體圖像或像對輸送到其他支持立體顯示設備上。實施例2一種面向ESRI三維GIS模塊軟體的植入式真三維立體渲染方法,包括對 以下函數的攔截a.創建三維顯示環境的函數,監控該函數,在監控函數中加入調用3D API 的系統檢測函數功能,獲取系統立體顯示特性,根據相應的立體顯示特性, 更改原始設定的顯示環境中的立體顯示模式,在支持立體顯示的硬體上開啟 真三維立體顯示支持,在不支持立體顯示的硬體上,設置標誌以便進行紅綠立體顯示。b.開始一幀繪製函數,監控該函數,在監控函數中加入代碼獲取當前繪圖 幀的視口尺寸,根據渲染的像素格式為立體像對創建臨時的緩衝區。d.將幀緩存輸出到顯示設備的函數,監控該函數,在監控函數加入代碼 以獲取整個幀中各像素的顏色和深度數據,基於C獲取的投影變換矩陣信息, 反算每個像素在視點坐標系下的三維坐標,重建出基於像素的柵格化的三維場景;e.基於c獲取的投影矩陣信息,反算三維繪製中透視投影的各項參數,根據這些參數、重建柵格化的三維場景,根據人眼睛的立體視覺模型,生成 可供立體顯示的立體像對。下面的實施過程是上述方法的具體軟體編碼過程。1. 基於Detours API,在Windows XP平臺下基於Visual Studio 2005建立基 於基於0++語言的Win32 DLL工程StereoDriver_ESRI—OpenGL作為攔截代碼 框架。2. 在StereoDriver_ESRI—OpenGL中定義一個數據結構OpenGL—Stereo,該數 據結構包含如下內容(1) Windows繪圖上下文變量hDC,類型HDC;(2) OpenGL渲染上下文變量hGLRC,類型HGLRC;(3) 記錄當前硬體是否支持立體顯示的變量IsStereoSupport,類型bool;(4) 記錄視口寬高的變量width, height,類型int;(5) 緩存顏色數據的變量ColorBuffer,類型GLbyte*;(6) 緩存深度數據的變量D印thBuffer,類型GLfloat;(7) 記錄當前變換矩陣模式的變量MatrixMode,類型GLMatrixMode(8) 記錄當前透視投影矩陣的變量Matrix,類型GLf loat [4] [4](9) 創建一個全局的鍊表gOpenGL—Stereos保存OpenGL—Stereo結構的指針。(10) 創建一個全局的OpenGL—Stereo指針ActiveOpenGL一Stereo,初始化為 亂L。3.基於Detours API實現對如下函數的監控: 1)wglCreateContextwglCreateContext根據應用程式的設置,創建一個相應的OpenGL的渲染上下 文。創建監控函數My—wglCreateContext,在wglCreateContext中實現如下功 能解析wglCreateContext的參數,判斷用戶程序是否使用PFD—STEREO標記啟 動雙通道立體渲染支持,如果用戶程序啟動立體渲染支持,則說明用戶程序 本身支持立體渲染。如果用戶程序沒有啟動立體渲染支持,則表明用戶程序不支持立體渲染,詢 問用戶是否啟動植入式立體支持。如果用戶選擇啟用植入是立體支持,創建OpenGL-Stereo結構,並保存在一 個包含OpenGLStereo結構指針的全局列表中,並初始化。使用 wglChoosePixelFormat函數和PF—STEREO標記查詢當前顯卡是否支持立體顯 示。如果支持立體顯示則將OpenGLStereo的IsStereoSupport設置為true, 否則設置為false。使用原始的wglCreateContext創建HGLRC,並在OpenGLStereo中記錄對應的HDC和HGLRC,將OpenGLStereo結構加入到gOpenGL—Stereos中。
2) wglMakeCurrent
wglMakeCurrent在若干0penGL渲染上下文中選擇一個做為當前活動的, 一般在wglMakeCurrent之後開始和結東一幀的繪製。創建監控函數 My_wglMakeCurrent,在My—wglMakeCurrent中實現如下功能當HDC參數和 HGLRC參數不為NULL時,從gOpenGL—Stereos中用這兩個參數查找對應hDC 和hGLRC的OpenGL-Stereo結構,並賦值給ActiveOpenGL—Stereo變量。如果 兩個參數均為冊LL,則將ActiveOpenGL—Stereo賦值為NULL。 調用原始的wglMakeCurrent。
3) glViewport
glViewport將當前活動的OpenGL渲染上下文的視口設置到指定位置和尺寸。
創建監控函數My—glViewport,在My—glViewport中實現如下功能
如果ActiveOpenGL-Stere不為空,則判斷新的視口寬高是否和
ActiveOpenGL_Stereo中的width, height相等。如果不相等釋放
OpenGL—Stereo中原有的ColorBuffer和DepthBuf fer內存;根據視口的寬高
創建顏色緩存區ColorBuffer和深度緩存區DepthBuf fer; i己錄新的width和
height。
調用原始的glViewport。 4 ) glMatrixMode
glMatrixMode設置當前活動OpenGL渲染上下文的活動矩陣模型。創建監 控函數My—glMatrixMode,在My-glMatrixMode中實現如下功能 如果ActiveOpenGL—Stereo不為空,貝!j將ActiveOpenGL—Stere的MatrixMode
21設置為glMatrixMode的參數。 調用原始的glMatrixMode。
5) glLoadMatrixd, glLoadMatrixf
glLoadMatrix為活動的OpenGL渲染上下的當前矩陣模式設置矩陣。創建監控 函數My—glMLoadMatrix,在My—glLoadMatrix中實現如下功能 如果ActiveOpenGL-Stereo不為空,且其變量MatrixMode等於GL-PR0JECTI0N 則記錄該函數的m變量到ActiveOpenGL—Stere的Matrix中。 調用原始的glLoadMatrix函數。
6) SwapBuff ers
該函數將OpenGL渲染的一幀從顯存輸出到顯示設備上。創建監控函數 My_SwapBuffers,在該函數中實現如下功能
如果ActiveOpenGL—Stereo不為空,調用glReadPixels函數,以GL—RGB 從顏色緩衝區中讀取顏色到ActiveOpenGL-Stereo的ColorBuffer變量;調 用glReadPixels函數以GL—DEPTH-COMPONENT參數,讀取深度值到 ActiveOpenGUtereo的DepthBuffer中。
從ActiveOpenGL—Stereo的Matrix變量中獲得透視投影的近平面的寬度
width,高度height,以及近平面的zNear和遠平面zFar。
根據ActiveOpenGL—Stereo中記錄的視口的寬度ViewPortWidth和
ViewPortHeight,創建臨時的顏色緩衝區,ColorBufferLef t和
ColorBufferRight。
從用戶設置中獲得視點偏移Dx,深度偏移Dz和像素偏移Dpw。 建立一個 循環,對每個ColorBuffer像素,取出對應的像素坐標iX, iY以及顏色RGB以及對應的D印thBuffer中的深度值。利用本發明設計的方法,像素對應的 視點坐標系中的坐標P (X,Y,Z)。對左眼以Dx, Dz, Dp^為參數。使用本發明設 計的快速立體像對生成算法,計算P對應的像素坐標P^。對右眼以-Dx,-Dz,-DpiMl
為參數,使用本發明設計的快速立體像對生成算法,計算P對應的右像素坐標 P一u。將當前像素的顏色分別賦值給ColorBuffei"Left的Pu"立置,和 ColorBufferRight的P一t位置。
判斷ActiveOpenGL—Stere的IsStereoSupport是否為真。如果為真,調用 glDrawPixels分別將ColorBufferLef t和ColorBufferRight中的內容拷貝到 GL—BACK—LEFT和GL-BACK-RIGT中。否則,將ColorBuf f erRight中的G, B通 道賦值到ColorBufferLef t對應像素的G, B通道上去,形成一幅紅綠立體,將 ColorBufferLeft的內容拷貝到GL—BACK中。 調用原始的SwapBuffer。
4. 編譯StereoDriver—ESRI_0penGL工程,生成 StereoDriver—ESRI-OpenGL. DLL文件
5. 將StereoDriver—ESRI—OpenGL. DLL文件通過detours SDK的withdll. Exe
命令行啟動相應程序。
權利要求
1、面向ESRI三維GIS模塊的植入式真三維立體渲染方法,其特徵是,該方法包括以下步驟步驟(1)針對ESRI三維GIS模塊使用的3D API進行監控與渲染數據攔截;步驟(2)利用場景變換矩陣和投影變換矩陣重構柵格化的三維數據;步驟(3)自適應屏幕解析度和人的眼基距設定兩個不同的視點位置並生成立體像對;步驟(4)針對不同的立體觀察設備進行真三維觀測。
2、 根據權利要求1所述的真三維立體渲染方法,其特徵是,所述真三維立體渲染方法進一步包括下列步驟,下列步驟不分先後a. 監控創建三維顯示環境的函數,在該函數中加入調用3D API的系統檢測函數功能,獲取系統立體顯示特性,根據相應的立體顯示特性,更改原始設定的顯示環境中的立體顯示模式,在支持立體顯示的硬體上開啟真三維立體顯示支持,在不支持立體顯示的硬體上,設置標誌以便進行紅綠立體顯示;b. 監控開始一幀繪製的函數,在該函數中加入代碼獲取當前繪圖幀的視口尺寸,根據渲染的像素格式為立體像對創建臨時的緩衝區;c. 監控改變當前繪製矩陣的函數,在該函數中加入代碼以獲取三維應用軟體對當前繪製矩陣的更改,通過矩陣參數識別場景渲染的投影類型,當是透視投影時,記錄該矩陣,作為三維場景重構的關鍵參數;d. 監控將幀緩存輸出到顯示設備的函數,在監控函數加入代碼以獲取整個幀中各像素的顏色和深度數據,基於步驟C獲取的投影變換矩陣信息,反 算每個像素在視點坐標系下的三維坐標,重建出基於像素的柵格化的三維場景;根據人眼睛的立體視覺模型,生成可供立體顯示的立體像對。
3、根據權利要求1所述的真三維立體渲染方法,其特徵是,所述步驟 (1)中3D API的監控與渲染數據攔截進一步包括利用API攔截技術,獲 取三維繪製相關矩陣和三維渲染數據輸出,提取實現三維透視變換的投影矩 陣、視口寬高,作為三維場景重構的關鍵參數;利用3DAPI的特定函數,攔 截三維渲染輸出,提取顯卡幀緩存中的顏色和深度數據,作為三維場景重構 的基礎。
4、 根據權利要求l所述的真三維立體渲染方法,其特徵是,所述步驟(l) 中還進一步包括針對其實現3D API函數的攔截的具體步驟通過代碼注入或 /和鉤子函數技術編寫特定的攔截程序,在三維可視化程序的數據加載階段, 將3D API攔截程序加載到三維可視化程序的進程中,從而攔截和監控3D API 調用。
5、 根據權利要求1所述的真三維立體渲染方法,其特徵是,所述步驟(2) 進一步包括下列步驟通過生成三維渲染輸出的投影矩陣和視口寬高,解算 出三維渲染關鍵控制參數以及三維渲染輸出的顏色和深度數據,進而解算出 每個像素在視空間中的三維坐標以及對應的顏色特性,重構視空間下柵格化 的三維場景數據。
6、根據權利要求l所述的真三維立體渲染方法,其特徵是,所述步驟(2) 進一步包含以下步驟I.透視投影變換矩陣的識別假設透視投影變換矩陣在一幀的渲染過程中保持一致,將透視投影矩陣攔截下來,將矩陣中的特徵值作為判據,判斷當前攔截的矩陣是否為透視投影矩陣;II. 建立視點為坐標原點的三維空間坐標系以步驟I截獲的透視投影變換矩陣為參數,建立以透視點為坐標原點的視圖坐標系Z軸穿過近平面的中心,近平面的Y軸和X軸方向和該坐標系的X軸,Y軸方向一致,近平面位於近平面值對應的Z軸的刻度上;近平面上X的值域是[-width/2, width/2] ,Y的值域是[-height/2, height/2];在該坐標系中,任意坐標點P (X, Y, Z)與近平面的交點的坐標值P' (X', Y', Z')由透視投影矩陣變換求得,其中Z'對應於幀深度緩存中的深度值,X:width/2*X/Z ; Y'=height/2*Y/Z;Z' = (z-zNear)/z * zFar/(zFar-zNear),其中Z'對應於深度緩存中的值;III. 柵格化三維場景數據的重構設視口的寬度為width'、高度為height',任意三維渲染幀圖像像素點的坐標(X'〃,Y〃')對應於近平面上的三維坐標Pn(xn, yn, zn), 其中xn= (X'''-width'/2) *width/2 ,yn=(Y〃'-height'/2)*height/2;對應的深度緩存中的值Z',對應的視點坐標系下Z=Z'* (zFar-zNear)/zFar+zNear ,像素點在視點坐標系下的坐標為P(X,Y, Z),其中X=xNear/zNear*Z, Y=yNear/zNear*Z;將所有的三維坐標用三角形面片連接起來,就構成了 一個可進行三維渲染的立體表面。
7、根據權利要求1所述的真三維立體渲染方法,其特徵是,所述步驟(3)中生成立體像的方法是調用3DAPI,渲染所述步驟(2)中獲得的場景數據,在原始圖像作為左視點圖像情況下,生成右視點圖像;在原始圖像作為右視點圖像情況下,生成左視點圖像;在不保存原始圖像情況下,生成左右視點圖像,從而實現立體像對生成。
8、根據權利要求1所述的真三維立體渲染方法,其特徵是,所述步驟(3)中生成立體像的方法是採用柵格化三維場景數據,構建原始視空間與目 標視空間下像素的映射關係,將原始視空間下的像素直接變換到目標視空間 下;在原始圖像作為左視點圖像情況下,生成右視點圖像;在原始圖像作為 右視點圖像情況下,生成左視點圖像;在不保存原始圖像情況下,生成左右 視點圖像,從而實現立體像對快速生成。
9、 根據權利要求1所述的真三維立體渲染方法,其特徵是,所述步驟(4) 中針對不同的顯示與觀測設備,進行立體顯示與觀測,包括x.在支持立體顯示的設備上,將立體像對分別輸出到顯卡左右兩個通道, 進行立體顯示;或y.在不支持立體顯示的設備上,將立體像對中, 一個圖像提取紅色通道, 另一個圖像提取綠色和藍色通道,將提取的通道融合,形成一個互補色的立 體圖像,並支持紅綠眼鏡觀察;或z.將立體圖像或像對輸送到其他支持立體顯示設備上。
10、 根據權利要求l所述的真三維立體渲染方法,其特徵是,所述攔截 的3D API函數包括(21) 3D API創建三維顯示環境的函數;(22) 3D API開始一幀場景渲染的函數;(23) 3D API改變當前渲染矩陣的函數;(24) 3D API結東一幀場景渲染的函數;(25) 3D API將渲染數據輸出到當前屏幕上的函數。
全文摘要
本發明公開了一種面向ESRI三維GIS模塊的植入式真三維立體渲染方法在所述ESRI三維GIS模塊軟體採用的3D API調用和顯卡顯示之間採用植入式的渲染數據攔截技術,對原始的單通道顏色信號和深度信號、三維場景變換矩陣和投影變換矩陣進行捕獲;對這些信息進行解析,重構柵格化的三維數據;基於立體視覺原理,自適應地將該場景重新變換到兩個不同的視點位置,形成可供立體顯示的雙目視覺立體像對,驅動顯卡對雙目立體像對進行立體輸出;利用偏振、紅綠和閃閉式眼鏡等進行真三維立體顯示與觀測。本發明可以對現有ESRI三維GIS模塊軟體在不改變其程序和操作模式的情況下實現真三維立體化的場景展示。
文檔編號H04N13/04GK101521828SQ200910028999
公開日2009年9月2日 申請日期2009年2月20日 優先權日2009年2月20日
發明者吳明光, 溫永寧, 盛業華, 閭國年 申請人:南京師範大學

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀