面向GeoGlobe的真三維立體顯示方法
2023-10-11 11:38:24 3
專利名稱:面向GeoGlobe的真三維立體顯示方法
技術領域:
本發明涉及三維可視化技術領域,具體涉及一種面向GeoGlobe的真三維 立體顯示方法。
背景技術:
隨著計算機技術的發展,立體顯示已經成為環境仿真、模擬訓練以及規劃 設計等領域常用的技術手段,甚至開始與電影、電腦遊戲等結合產生立體電 影和真三維遊戲融入人們的日常生活。虛擬地球軟體作為一種重要的三位應 用系統,以期豐富的數據,友好的用戶體驗受到了廣泛的關注,GeoGlobe軟 件就是其中之一。
在三維應用中實現立體視覺是一種潮流,在單一顯示設備上觀察到立體 景物,需要將左、右眼所看到的影像各自獨立分開,然後通過特定的外置設 備使左右眼看到不同的影像而通過大腦的生理作用形成立體視覺。傳統的立 體顯示需要專業的設備進行立體顯示,包括支持左右緩存的顯卡和支持雙通 道顯示的立體顯示設備。基於上述技術,產生了廣為流行的虛擬現實技術, 在機器仿真、戰場模擬等領域得到了廣泛的應用。但是,由於需要專業設備, 成本高昂,也限制了立體顯示技術的應用,所以立體顯示的應用不能得到推 廣,大量的三維程序還是釆用單通道技術進行顯示,缺乏立體感,失去了三 維程序應有的立體顯示特性。同時,由於立體顯示需要專門硬體,特殊的編 程技巧,也造成了大量的程序在開發時沒有考慮立體顯示特性,沒有在程序中實現支持立體顯示的功能,使得這些程序即使在有立體顯示功能的硬體上
也不能顯示立體。這些程序佔據了現在三維顯示程序的絕大部分,GeoGlobe 也沒有突破上述限制,其在建模過程中,用戶還是只能看到單通道的透視三 維,不能實現真三維的立體顯示,不能達到最佳的應用效果。
發明內容
本發明所要解決的問題在於克服GeoGlobe軟體在三維顯示中存在的不足, 實現對原軟體不加修改的真三維立體顯示。本發明的核心是利用三維渲染的 基本原理,通過攔截顯卡結果幀圖像中顏色數據和深度數據,解析生成結果 幀圖像的投影變換矩陣,應用三維渲染的基本原理以及重構柵格化的三維場 景,在此場景基礎上,應用立體視覺原理,生成立體像對,基於不同的立體 顯示模式,驅動顯卡進行立體輸出。
本發明依賴的技術基礎是計算機圖形學中關於三維渲染的基本模型,即 GeoGlobe使用的3D API (Direct3D)(當前在Windows下GeoGlobe使用 Direct3D)的三維渲染的基本模型,包括三維渲染流水線、頂點的變換流水線、 Z緩衝區算法等。實現依據是Direct3D API和顯卡,兩者均是基於該基本模 型進行工作的。本發明在不更改GeoGlobe原始碼、二進位代碼或計算機硬體 結構的情況下,使該計算機軟體實現雙目視覺的立體真三維顯示與觀測。
計算機三維顯示的基本原理是將三維場景經過幾何變換和光照處理以及 柵格化之後,生成一幅二維柵格圖像在輸出設備上輸出。三維場景中包含一 系列的三維對象,三維對象是由一系列頂點構成的幾何圖元(包括點,線和 三角形)組合而成。頂點是一個包含三維空間位置及其對應的渲染參數的坐 標點。首先對頂點數據進行透視坐標變換和光照處理。在坐標變換階段,描述物體幾何形狀的頂點被變換到視點為中心的坐標系下,再進行光照計算確 定每個頂點應該具有的顏色和亮度。計算機圖形學的基本顯示單元是像素, 這些幾何對象被柵格化成像素,最後這些像素被送到幀緩存中等待顯示,如 圖2所示。
在三維圖形渲染中存在著一系列的坐標變換,最後將物體本身的坐標變 換成二維屏幕上的像素坐標。這些坐標變換都是將上一步變換結果作為輸出 的,構成一個頂點坐標變換的流水線,如圖3所示。所有三維對象的坐標均被 統一到了同一個坐標系下,經過投影和裁剪形成規格化的坐標,通過柵格化 變換形成圖像像素。
Z緩衝區算法又稱深度緩衝算法。由於二維平面坐標在透視投影下可以對 應無限多個三維坐標。所以柵格化的幾何對象包含了每個像素對應的到視點 稱為深度值的參數,如果柵格化幾何對象像素的深度值小於原來像素,就用 這個像素的值代替原來位置的值,這就保證了總是距離視點最近的像素被保 存下來。
針對以上原理,實現本發明目的的技術方案是 ' 面向GeoGlobe的真三維立體顯示方法,該方法包括以下步驟 步驟(1)針對GeoGlobe使用的3D API進行監控與渲染數據攔截; 步驟(2)利用場景變換矩陣和投影變換矩陣重構柵格化的三維數據; 步驟(3)自適應屏幕解析度和人的眼基距設定兩個不同的視點位置並生 成立體像對;
步驟(4)針對不同的立體觀察設備進行真三維觀測。本發明的方法具體可用下列步驟實現,下列步驟不分先後
a. 監控創建三維顯示環境的函數,在該函數中加入調用3D API的系統檢 測函數功能,獲取系統立體顯示特性,根據相應的立體顯示特性,更改原始 設定的顯示環境中的立體顯示模式,在支持立體顯示的硬體上開啟真三維立 體顯示支持,在不支持立體顯示的硬體上,設置標誌以便進行紅綠立體顯示。
b. 監控開始一幀繪製函數,在該函數中加入代碼獲取當前繪圖幀的視口 尺寸,根據渲染的像素格式為立體像對創建臨時的緩衝區。
c. 監控改變當前繪製矩陣函數,在該函數中加入代碼以獲取三維應用軟 件對當前繪製矩陣的更改,通過矩陣參數識別場景渲染的投影類型,當是透 視投影時,記錄該矩陣,作為三維場景重構的關鍵參數;
d. 監控將幀緩存輸出到顯示設備的函數,在監控函數加入代碼以獲取整 個幀中各像素的顏色和深度數據,基於步驟c獲取的投影變換矩陣信息,反 算每個像素在視點坐標系下的三維坐標,重建出基於像素的柵格化的三維場 景;根據人眼睛的立體視覺模型,生成可供立體顯示的立體像對。
所述步驟(1)中3D API的監控與渲染數據攔截進一步包括利用API攔 截技術,獲取三維繪製相關矩陣和三維渲染數據輸出,提取實現三維透視變 換的投影矩陣、視口寬高,作為三維場景重構的關鍵參數;利用3DAPI的特 定函數,攔截三維渲染輸出,提取顯卡幀緩存中的顏色和深度數據,作為三 維場景重構的基礎。
3D API攔截是指利用計算機編程技術,對GeoGlobe使用的3D API函數 調用進行監控,並對3D API產生的渲染數據進行攔截在其中插入自定義代碼,達到對原有API進行監控或重新實現的目的。API攔截技術成熟且應用廣泛,
如屏幕取詞軟體、反病毒軟體、網絡防火牆等等。本發明所指的3D API渲染 攔截是指攔截特定功能的若干關鍵3D API函數。
所述步驟(1)中還進一步包括針對其實現3D API函數的攔截的具體步驟: 針對GeoGlobe使用的3D API (Direct3D),通過代碼注入或/和鉤子函數技術 編寫特定的攔截程序,在三維可視化程序的數據加載階段,將3DAPI攔截程 序加載到三維可視化程序的進程中,從而攔截和監控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.透視投影變換矩陣的識別。在一幀場景的渲染過程中,三維應用軟體可能會多次更改投影變換矩陣,只有透視變換矩陣才可以產生透視三維效果。 不失一般性,假設透視投影變換矩陣在一幀的渲染過程中保持一致,將透視 投影矩陣攔截下來,將矩陣中的特徵值作為判據,判斷當前攔截的矩陣是否 為透視投影矩陣。
IL建立視點為坐標原點的三維空間坐標系(簡稱視點坐標系)。以步驟 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',可由Direct3D API相關函數獲得。由視口和近平面的比例關係可 知任意三維渲染幀圖像像素點的坐標P〃' (X'〃,Y'〃)對應於近平面上的三 維坐標 Pn(xn , yn , zn), 其中 xn= (X〃 '-width'/2) *width/2 , yn-(Y' height' /2) *height/2。對應的深度緩存中的值Z',由步驟II可知, 對應的視點坐標系下Z值為Z"(zFar-zNear)/zFar+zNear,可得像素點在視 點坐標系下的坐標P(X,Y,Z),其中X等於xNear/zNear*Z , Y等於 yNear/zNear*Z。
通過調用Direct3D API的讀取顯卡中顏色緩衝區函數和深度緩衝區函數,利用步驟II中建立的坐標系以及上述關係,可以獲得視點坐標系下所有 像素點的三維坐標。將所有的三維坐標用三角形面片連接起來,就構成了一 個可進行三維渲染的立體表面,該表面通過三維流水線,在任意視角下進行 渲染。
所述步驟(3)中"設定兩個不同的視點位置並生成立體像對"是利用步驟 (2)重構的三維場景,生成兩幅影像,形成立體像對。本發明提出基於"立體 像素"的三維場景的立體顯示模型,所謂立體像素是指將步驟(2)重構的三維
場景的每個像素與其對應視點空間的三維坐標 一 起組成序列 [(X,Y,Z), (R,G,B)],構成的一個三維像素空間。針對該空間中的每個像素,
按照透視變換原理,計算出其在新視點的像素位置點。 生成立體像對可釆用下列兩種方法
方法一.調用3D API,渲染步驟(2)中獲得的場景數據,在原始圖像作 為左視點圖像情況下,生成右視點圖像;在原始圖像作為右視點圖像情況下, 生成左視點圖像;在不保存原始圖像情況下,生成左右視點圖像,從而實現 立體像對生成。
方法二.釆用柵格化三維場景數據,構建原始視空間與目標視空間下像素 的映射關係,將原始視空間下的像素直接變換到目標視空間下。在原始圖像 作為左視點圖像情況下,生成右視點圖像;在原始圖像作為右視點圖像情況 下,生成左視點圖像;在不保存原始圖像情況下,生成左右視點圖像,從而 實現立體像對快速生成。其中
視點水平偏移,是指新視點距離原始視點在X軸方向上的改變量z^ 。視點垂直偏移,是指新視點距離原始視點在z軸方向上的改變量A。
圖像像素偏移,是指生成的圖像像素水平方向的附加偏移A^。 則在另一的視點坐標系下,對原始幀圖像中點P(X, Y, Z)的像素標在左視點
下的坐標X是Width'*(X-Dx)/(Z-Dz)+Dpixel, Y是Height *Y/(Z-Dz)。該像素 在對於右視點坐標系下,坐標按照上述方法計算,但Dx,Dz取負號。
將每個像素的顏色複製到目標位置。對兩個視點都應用該方法從而獲得 立體像對。該方法具有不經過圖形流水線,程序編制簡單,優化容易等優點。
所述步驟(4)中"針對不同的立體觀察設備進行真三維觀測"是指將步 驟(3)生成的立體像對,通過顯示設備輸出並進行立體觀察。本發明生成的立 體像對通過如下方式進行真三維顯示
x.顯卡支持的雙目立體顯示。如在支持立體顯示的Direct3D API環境下, 在創建設備句柄階段啟動Directs API的立體顯示模式,將生成的立體像對 分別輸送到左右兩個緩衝區中,實現立體顯示。
y.在不支持立體顯示的顯卡上,將立體像對合成為一幅紅綠互補色立體圖 像,從左右立體像對中的一個圖像提取紅色通道,另一個圖像中提取綠色和 藍色通道,將提取的通道融合,形成一個互補色的立體圖像。並送回原始的 圖像緩衝區進行立體顯示與觀測。
z.將立體圖像或像對輸送到其他支持立體顯示設備上。.
本發明旨在解決GeoGlobe程序不能支持立體顯示的問題,依靠成熟的代 碼攔截技術攔截在GeoGlobe對於3D API的調用進行重新編排。通過監控投 影矩陣,獲取反算三維場景的關鍵參數,通過繪製的顏色圖像和深度圖像,逐象素的反求其三維坐標,並將像素值映射到對應的位置上,形成立體像對。 通過各種顯示模式進行立體顯示,本發明也為現有的大量三維程序的直接立
體化提供了一條可行的途徑。本發明具有如下特色
(1) 解決了在GeoGlobe不能進行立體顯示的問題,提升了在GeoGlobe 的交互和用戶體驗。
(2) 實現的算法新穎,通過幀緩衝區中的顏色圖像數據和深度數據經過 重新分配形成立體像對,算法原理簡單,編程實現方便。
(3) 充分利用了現有的技術資源,由於基於工業標準的Direct3D API開 發,具有良好的適應性,對於顯卡沒有特殊要求。支持多種顯示模式,可以 在任意顯示環境下實現立體顯示。
圖1本發明實施例1的方法流程圖
圖2本發明釆用的三維渲染的基本模式
圖3本發明釆用的三維圖形的坐標變換流水線
圖4本發明實施例1的透視投影與透視變換矩陣
圖5本發明實施例1的以視點為中心的坐標系
圖6本發明實施例1的立體像對的快速生成方法圖
具體實施例方式
下面結合附圖和實施例對本發明做進一步詳細說明。 實施例1如圖2和圖3所示,由於在建模階段GeoGlobe均使用Direct3D API作為 三維渲染API,故本實施例基於Direct3D API作為實施對象,作業系統平臺 為Windows XP進行實施。
Direct3D 9的攔截與監控基於Micorsoft Detours SDK開發。Detours是 Microsoft提供的一套Windows平臺下進行API調用攔截的開發包,支持Win32 所有平臺。
如圖1所示,面向GeoGlobe的真三維立體顯示方法,該方法包括以下步
驟
步驟(1)針對GeoGlobe使用的Direct3D API進行監控與渲染數據攔截; 步驟(2)利用場景變換矩陣和投影變換矩陣重構柵格化的三維數據; 步驟(3)自適應屏幕解析度和人的眼基距設定兩個不同的視點位置並生 成立體像對;
步驟(4)針對不同的立體觀察設備進行真三維觀測。 步驟(1)中Direct3D API的攔截與獲取場景渲染數據進一步包括利 用3DAPI攔截技術,獲取三維繪製相關矩陣和三維渲染數據,提取實現三維 透視變換的投影矩陣、視口寬高,作為三維場景重構的關鍵參數;利用3D API 的特定函數,攔截三維渲染輸出,提取顯卡幀緩存中的顏色和深度數據,作 為三維場景重構的基礎。
步驟(2)進一步包括利用Direct3D API輸出到顯卡幀緩存中的顏色和深 度數據,結合攔截Direct3D 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'對應於深度緩存中的值。
ni.柵格化三維場景數據的重構。設視口的寬度為width'、高度為 height',可由Direct3D API相關函數獲得。由視口和近平面的比例關係可 知任意三維渲染幀圖像像素點的坐標P〃' (X'〃,Y'〃)對應於近平面上的三 維坐標 Pn(xn , yn , zn), 其中 xn= (X,,,-width,/2) *width/2 , yn-(Y'"-height'/2)*height/2。對應的深度緩存中的值Z',由b可知,對應 的視點坐標系下Z值為Z"(zFar-zNear)/zFar+zNear,可得像素點在視點坐 標系下的坐標P (X, Y, Z),其中X等於xNear/zNear*Z, Y等於yNear/zNear*Z。 通過調用Direct3D API的讀取顯卡中顏色緩衝區函數和深度緩衝區函 數,利用步驟II中建立的坐標系以及上述關係,可以獲得視點坐標系下所有像素點的三維坐標。將所有的三維坐標用三角形面片連接起來,就構成了一個可進行三維渲染的立體表面,該表面通過三維流水線,在任意視角下進行渲染。
步驟(3)利用步驟(2)重構的三維場景,生成兩幅影像,形成立體像對。生成立體像對可釆用下列兩種方法
方法一.調用3DAPI,渲染步驟(2)中獲得的場景數據,在原始圖像作為左視點圖像情況下,生成右視點圖像;在原始圖像作為右視點圖像情況下,生成左視點圖像;在不保存原始圖像情況下,生成左右視點圖像,從而實現立體像對生成。
方法二.釆用柵格化三維場景數據,構建原始視空間與目標視空間下像素的映射關係,將原始視空間下的像素直接變換到目標視空間下。在原始圖像作為左視點圖像情況下,生成右視點圖像;在原始圖像作為右視點圖像情況下,生成左視點圖像;在不保存原始圖像情況下,生成左右視點圖像,從而實現立體像對快速生成。其中
視點水平偏移,是指新視點距離原始視點在X軸方向上的改變量Z^ 。視點垂直偏移,是指新視點距離原始視點在Z軸方向上的改變量A。圖像像素偏移,是指生成的圖象像素水平方向的附加偏移A,w。則在另 一的視點坐標系下,對原始幀圖像中點P (X, Y, Z)的像素標在左視點下的坐標X是Width"(X-Dx)/(Z-Dz)+Dpixel, Y是Height"Y/(Z-Dz)。該像素在對於右視點坐標系下,坐標按照上述方法計算,但Dx,Dz取負號。
將每個像素的顏色複製到目標位置。對兩個視點都應用該方法從而獲得立體像對。該方法具有不經過圖形流水線,程序編制簡單,優化容易等優點。步驟(4 )將步驟(3)生成的立體像對,通過顯示設備輸出並進行立體觀察。
本發明生成的立體像對通過如下方式進行真三維顯示
x.顯卡支持的雙目立體顯示。如在支持立體顯示的Direct3D環境下,在創建設備句柄階段啟動Direct3D的立體顯示模式,將生成的立體像對分別輸送到左右兩個緩衝區中,實現立體顯示。或
y.在不支持立體顯示的顯卡上,將立體像對合成為一幅紅綠互補色立體圖像,從左右立體像對中的一個圖像提取紅色通道,另一個圖像中提取綠色和藍色通道,將提取的通道融合,形成一個互補色的立體圖像。並送回原始的圖像緩衝區進行立體顯示與觀測。或
z.將立體圖像或像對輸送到其他支持立體顯示設備上。
實施例2
一種面向GeoGlobe的真三維立體顯示方法,包括對以下函數的攔截
a. 創建三維顯示環境的函數,監控該函數,在監控函數中加入調用Direct3D API的系統檢測函數功能,獲取系統立體顯示特性,根據相應的立體顯示特性,更改原始設定的顯示環境中的立體顯示模式,在支持立體顯示的硬體上開啟真三維立體顯示支持,在不支持立體顯示的硬體上,設置標誌以便進行紅綠立體顯示。
b. 開始一幀繪製函數,監控該函數,在監控函數中加入代碼獲取當前繪圖幀的視口尺寸,根據渲染的像素格式為立體像對創建臨時的緩衝區。
d.將幀緩存輸出到顯示設備的函數,監控該函數,在監控函數加入代碼以獲取整個幀中各像素的顏色和深度數據,基於C獲取的投影變換矩陣信息,反算每個像素在視點坐標系下的三維坐標,重建出基於像素的柵格化的三維
場景;
e.基於C獲取的投影矩陣信息,反算三維繪製中透視投影的各項參數,根據這些參數、重建柵格化的三維場景,根據人眼晴的立體視覺模型,生成可供立體顯示的立體像對。
下面的實施過程是上述方法的具體軟體編碼過程。
1. 基於Detours API,在Windows XP平臺下基於Visual Studio 2005建立基於基於C+十語言的Win32 DLL工程StereoDr iver—GeoGlobe—D3D作為攔截代碼框架。
2. 在StereoDriver—GeoGlobe一D3D中定義一個數據結構D3D—Stereo,該
數據結構包含如下內容
1) Windows的窗口變量hWnd,類型H麗D;
2) Direct3D的設備接口指針,pDevice,類型IDirect3DDevice9;
3) 記錄視口寬高的變量width, height,類型int;
4) 緩存顏色數據的變量ColorBuffer,類型BYTE*;
5) 緩存深度數據的變量DepthBuffer,類型float;
6) 記錄當前矩陣模式的變量MatrixMode,類型D3DTRANSF0RMSTATETYPE;
7) 記錄當前透視投影矩陣的變量Matrix,類型D3DMATRIX;
8) 創建一個全局的鍊表gD3D_Stereos保存D3D-Stereo結構的指針。
9) 創建一個全局的D3D—Stereo指針,ActiveD3D—Stereo,初始化為NULL。3.基於Detours API實現對如下函數的監控1)Direct3DCreate9
Direct3DCreate9是Direct3D9的主入口,創建一個IDirect3D9的指針。創建監控函數My_Direct3DCreate9,實現如下功能
當用戶第 一次調用該函數時,利用Detours監控IDirect3D9的CreateDevice函數。
調用原始的Direct3DCreate9函數。
2) Direct3DDevice9的CreateDevice函數
CreateDevice用以創建 一 個Direct3D設備。創建監控函數My—IDirect3DDevice9—CreateDevice,實現如下功能
詢問用戶是否啟用立體支持,如果選擇是,判斷用戶使用的深度格式,確保其為可鎖定讀取的模式;
執行原始的CreateDevice,得到一個IDirect3DDevice9指針。
如果用戶選擇啟動立體,創建一個D3D-Stereo,將參數中的pDevice用IDirect3DDevice9指針賦值,將D3D—Stereo加入gD3D—Stereos。
監控IDirect3DDevice9如下函數。
3) IDirect3DDevice9的BeginScene函數
BeginScene 開始 一 幀的繪製。創建監控函數My—IDirect3DDevice9-BeginScene在其中實現如下功能
根據傳入的IDirect3DDevice9指針,在gD3D-Stereos中找到與當前設備相同的,將其賦值給ActiveD3D-Stereo。如果沒有相同的則設置為NULL。
調用原始的BeginScene。4) IDirect3DDevice9的SetViewport
SetViewport將當前活動的IDirect3DDevice9渲染上下文的視口設置到指 定位置和尺寸。創建監控函數My一IDirect3DDevice9—SetViewport,在 My—glViewport中實現如下功能
如果ActiveD3DL—Stereo不為空,則判斷新的視'口寬高是否和 ActiveD3D—Stereo 中的 width, height 相等。如果不相等釋放 ActiveD3D一Stereo中原有的ColorBuffer和DepthBuffer內存。根據視口的 寬高創建顏色緩衝區ColorBuffer和深度緩存數據DepthBuffer。
調用原始的SetViewport。
5) 皿rect3DDevice9的SetTransform
SetTransform 設置指定的矩陣。創建監控函數 My—IDirect3DDevice9—SetTransform,實現如下功能
如果ActiveD3D—Stereo不為空,判斷矩陣類型參數是否是D3DTS—PROJECTION, 如果是根據本發明所指判定條件,如果為透視投影矩陣,則記錄到 ActiveD3D一Stereo的變量中。 調用原始的SetTransform。
6) IDirect3DDevice9的Present函數
該函數將Direct3D渲染的 一幀圖像輸出到屏幕上。創建監控函數 My—IDirect3DDevice9—Present,在該函數中實現如下功能'
如果 ActiveD3D—Stereo 不為空,調用 IDirect3DDevice9 的 GetBackSurfaceData 函數,從顏色緩衝區中讀取顏色圖像到 Active謂一Stereo的ColorBuffer變量;調用GetD印thData函數以讀取深度值至U ActiveD3D—Stereo的DepthBuffer中。
從ActiveD3D—Stereo的Matrix變量中獲得透視投影的近平面的寬度width,高度height,以及近平面的zNear和遠平面zFar。
根據ActiveD3D—Stereo視口的寬度ViewPortWidth和ViewPortHeight,創建臨時的顏色緩衝區,ColorBufferLeft和ColorBufferRight。
從用戶設置中獲得視點偏移Dx,深度偏移Dz和像素偏移Dpixsl.
建立一個循環,對每個ColorBuffer像素,取出對應的像素坐標iX, iY以及顏色RGB以及對應的DepthBuffer中的深度值。利用本發明設計的方法,像素對應的視點坐標系中的坐標P (X,Y,Z)。對左眼使用Dx,Dz,Dp^為參數。使用本發明設計的快速立體像對生成算法,計算P對應的像素坐標Pt6ft。對右眼使用-Dx, -Dz, -D一,為參數,使用本發明設計的快速立體像對生成算法,計算P對應的像素坐標P一t。 將當前像素的顏色分別賦值給ColorBufferLeft的PLeft位置,和ColorBufferRight的Pr她位置。
由於Direct3D9默認不支持立體顯示模式,從ColorBufferLeft中抽取紅色通道,ColorBufferRight中抽取藍色和綠色通道,組成紅綠立體圖片,輸出到屏幕。
4. 編 譯 StereoDriver_GeoGlobe-D3D 工 程 , 生 成StereoDriver-GeoGlobe_D3D. DIX文件
5. 將StereoDriver_GeoGlobe_D3D.DLL文件通過 detours SDK 的withdll.Exe命令行啟動GeoGlobe程序。
權利要求
1、面向GeoGlobe的真三維立體顯示方法,其特徵是,該方法包括以下步驟步驟(1)針對GeoGlobe使用的3D API進行監控與渲染數據攔截;步驟(2)利用場景變換矩陣和投影變換矩陣重構柵格化的三維數據;步驟(3)自適應屏幕解析度和人的眼基距設定兩個不同的視點位置並生成立體像對;步驟(4)針對不同的立體觀察設備進行真三維觀測。
2、 根據權利要求1所述的真三維立體顯示方法,其特徵是,所述真三維 立體顯示方法進一步包括下列步驟,下列步驟不分先後a. 監控創建三維顯示環境的函數,在該函數中加入調用3D API的系統檢 測函數功能,獲取系統立體顯示特性,根據相應的立體顯示特性,更改原始 設定的顯示環境中的立體顯示模式,在支持立體顯示的硬體上開啟真三維立 體顯示支持,在不支持立體顯示的硬體上,設置標誌以便進行紅綠立體顯示;b. 監控開始一幀繪製的函數,在該函數中加入代碼獲取當前繪圖幀的視 口尺寸,根據渲染的像素格式為立體像對創建臨時的緩衝區;c. 監控改變當前繪製矩陣的函數,在該函數中加入代碼以獲取三維應用 軟體對當前繪製矩陣的更改,通過矩陣參數識別場景渲染的投影類型,當是 透視投影時,記錄該矩陣,作為三維場景重構的關鍵參數;d. 監控將幀緩存輸出到顯示設備的函數,在監控函數加入代碼以獲取整個幀中各像素的顏色和深度數據,基於步驟C獲取的投影變換矩陣信息,反 算每個像素在視點坐標系下的三維坐標,重建出基於像素的柵格化的三維場景;根據人眼睛的立體視覺模型,生成可供立體顯示的立體像對。
3、根據權利要求1所述的真三維立體顯示方法,其特徵是,所述步驟 (1)中3D API的監控與渲染數據攔截進一步包括利用API攔截技術,獲 取三維繪製相關矩陣和三維渲染數據輸出,提取實現三維透視變換的投影矩 陣、視口寬高,作為三維場景重構的關鍵參數;利用3D API的特定函數,攔 截三維渲染輸出,提取顯卡幀緩存中的顏色和深度數據,作為三維場景重構 的基礎。
4、 根據權利要求1所述的真三維立體顯示方法,其特徵是,所述步驟(1) 中還進一步包括針對其實現3D API函數的攔截的具體步驟:'通過代碼注入或 /和鉤子函數技術編寫特定的攔截程序,在三維可視化程序的數據加載階段, 將3D API攔截程序加載到三維可視化程序的進程中,從而攔截和監控3D API 調用。
5、 根據權利要求1所述的真三維立體顯示方法,其特徵是,所述步驟(2) 進一步包括下列步驟通過生成三維渲染輸出的投影矩陣和視口寬高,解算 出三維渲染關鍵控制參數以及三維渲染輸出的顏色和深度數據,進而解算出 每個像素在視空間中的三維坐標以及對應的顏色特性,重構視空間下柵格化 的三維場景數據。
6、根據權利要求l所述的真三維立體顯示方法,其特徵是,所述步驟(2) 進一步包含以下步驟I.透視投影變換矩陣的識別假設透視投影變換矩陣在一幀的渲染過程中保持一致,將透視投影矩陣攔截下來,將矩陣中的特徵值作為判據,判斷 當前攔截的矩陣是否為透視投影矩陣;6.建立視點為坐標原點的三維空間坐標系以步驟I截獲的透視投影變換矩陣為參數,建立以透視點為坐標原點的視圖坐標系Z軸穿過近平面的中 心,近平面的Y軸和X軸方向和該坐標系的X軸,Y軸方向一致,近平面位於 近平面值對應的Z軸的刻度上;近平面上X的值域是[-width/2, width/2] ,Y 的值域是[-height/2, height/2];在該坐標系中,任意坐標點P (X, Y, Z)與近 平面的交點的坐標值^ (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',任意三維渲染幀圖像像素點的坐標P〃' (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、根據權利要求l所述的真三維立體顯示方法,其特徵是,所述步驟(3) 中生成立體像的方法是調用3D API,渲染所述步驟(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將渲染數據輸出到當前屏幕上的函數。
全文摘要
本發明公開了一種面向GeoGlobe的真三維立體顯示方法在所述軟體採用的3D API調用和顯卡顯示之間採用植入式的渲染數據攔截技術,對原始的單通道顏色信號和深度信號、三維場景變換矩陣和投影變換矩陣進行捕獲;對這些信息進行解析,重構柵格化的三維數據;基於立體視覺原理,自適應地將該場景重新變換到兩個不同的視點位置,形成可供立體顯示的雙目視覺立體像對,驅動顯卡對雙目立體像對進行立體輸出;利用偏振、紅綠和閃閉式眼鏡等進行真三維立體顯示與觀測。本發明可以對現有GeoGlobe軟體在不改變其程序和操作模式的情況下實現真三維立體化的場景展示。
文檔編號G09G5/00GK101561936SQ200910027128
公開日2009年10月21日 申請日期2009年5月22日 優先權日2009年5月22日
發明者吳明光, 周良辰, 溫永寧, 盛業華, 閭國年 申請人:南京師範大學