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