亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種多通道的分布式繪制系統(tǒng)與方法

文檔序號(hào):6464659閱讀:383來源:國知局
專利名稱:一種多通道的分布式繪制系統(tǒng)與方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)圖形虛擬仿真應(yīng)用領(lǐng)域,尤其涉及一種多通道的分布式 繪制系統(tǒng)與方法。
背景技術(shù)
基于三維場(chǎng)景實(shí)時(shí)渲染的多通道系統(tǒng)能夠提供一種沉浸式虛擬現(xiàn)實(shí)與仿真 顯示環(huán)境?;谌S場(chǎng)景實(shí)時(shí)渲染的多通道系統(tǒng)是由一組單通道的顯示系統(tǒng)拼 接或組合而成的多通道超寬比例的特殊顯示系統(tǒng)。根據(jù)需要顯示的場(chǎng)景以及所涉及的領(lǐng)域和應(yīng)用的不同,通常將多通道系統(tǒng)的多投影面間的弧度劃分為120、 135、 180、 240、 270、 360度不等。由于多通道系統(tǒng)的屏幕顯示面積巨大,通常 將多通道系統(tǒng)用于一些大型的虛擬仿真應(yīng)用領(lǐng)域,近年來開始向展覽展示、工 業(yè)設(shè)計(jì)、教育培訓(xùn)、會(huì)議中心等專業(yè)領(lǐng)域發(fā)展。按照三維場(chǎng)景實(shí)時(shí)渲染多通道系統(tǒng)的應(yīng)用,可以將其分為兩個(gè)方面 一方 面是使用單通道小幅場(chǎng)景,產(chǎn)生大尺寸、高分辨率的視覺效果;另一方面用于 同時(shí)從不同角度的多個(gè)視點(diǎn)觀測(cè)整個(gè)場(chǎng)景。這種特殊的多通道視覺系統(tǒng)不僅具 有單通道顯示系統(tǒng)所不具備的極強(qiáng)的視覺沖擊力和震撼力,而且可以讓用戶同 時(shí)獲得視景的全方位信息,將信息傳遞能力提高到一個(gè)嶄新的水平。它的應(yīng)用 領(lǐng)域相當(dāng)廣泛,同時(shí)造價(jià)也很昂貴。基于PC集群的三維并行繪制技術(shù)讓以上兩 種應(yīng)用的低成本實(shí)現(xiàn)成為可能,它可以通過多個(gè)聯(lián)網(wǎng)PC并行繪制三維場(chǎng)景,并 從多個(gè)通道輸出場(chǎng)景,實(shí)現(xiàn)了三維場(chǎng)景多通道實(shí)時(shí)渲染。此外,隨著應(yīng)用領(lǐng)域的不斷拓寬,三維場(chǎng)景的復(fù)雜程度越來越高,三維繪 制的實(shí)時(shí)性,流暢性要求也越來越高,場(chǎng)景優(yōu)化就逐漸成為系統(tǒng)性能提高的手 段和人們研究的熱點(diǎn)。只有采用得當(dāng)、高效的優(yōu)化方法才能讓三維場(chǎng)景的繪制 更迅速,畫面更流暢,才有可能將大型的復(fù)雜的三維場(chǎng)景應(yīng)用到多通道實(shí)時(shí)渲 染上。場(chǎng)景優(yōu)化對(duì)系統(tǒng)性能的影響體現(xiàn)在繪制幀率、系統(tǒng)的擴(kuò)展性以及系統(tǒng) 應(yīng)用的廣泛性上?;赑C集群的三維并行繪制系統(tǒng)類型有很多,不同類型的并行圖形繪制系 統(tǒng)的運(yùn)行機(jī)制和功能側(cè)重點(diǎn)各不相同,在不同的應(yīng)用環(huán)境下系統(tǒng)性能差異很大, 并具有明顯的個(gè)體特征。目前,較好地實(shí)現(xiàn)了大尺寸、高分辨率三維場(chǎng)景顯示的并行繪制系統(tǒng)有WireGL、 AnyGL等。它們的系統(tǒng)架構(gòu)為客戶機(jī)/服務(wù)器(Client/Server),擁 有一個(gè)客戶機(jī)和多個(gè)服務(wù)器??蛻魴C(jī)安裝有應(yīng)用程序模塊(包括經(jīng)修改的OpenGL 庫和應(yīng)用程序),不負(fù)責(zé)繪制和顯示。修改的OpenGL庫截獲OpenGL流并打包, 然后發(fā)送到根據(jù)計(jì)算分配的服務(wù)器上。服務(wù)器只負(fù)責(zé)接收OpenGL流包并進(jìn)行繪 制和顯示。這種方法的局限性在于攝像機(jī)的拍攝角度始終不能改變,不能實(shí)現(xiàn)場(chǎng)景的多角度、全方位觀測(cè)。另一種可以同時(shí)實(shí)現(xiàn)多角度觀測(cè)三維場(chǎng)景的并行繪制系統(tǒng)為Display Wall, 它采用保留模式,系統(tǒng)架構(gòu)為主機(jī)/從機(jī)(Master/Slave),擁有一個(gè)Master 和多個(gè)Slave。 Master和Slave都部署有幾乎相同的應(yīng)用程序模塊,Master需 要設(shè)置通道參數(shù)并將此參數(shù)的相關(guān)信息和人機(jī)交互中場(chǎng)景的變化信息發(fā)送至多 個(gè)Slave; Slave根據(jù)接收到的信息,改變攝像機(jī)位置以及虛擬運(yùn)動(dòng)對(duì)象的位置 及屬性。Master和Slave通過同步執(zhí)行應(yīng)用程序繪制顯示場(chǎng)景實(shí)現(xiàn)并行繪制。 這種方法的局限性在于繪制數(shù)據(jù)來自本地,導(dǎo)致應(yīng)用程序、數(shù)據(jù)信息的更新及 移植等難以實(shí)現(xiàn)。發(fā)明內(nèi)容本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)的局限性,采用客戶機(jī)/服務(wù)器架構(gòu)的系統(tǒng)設(shè) 計(jì),其中,客戶機(jī)釆用多進(jìn)程共享虛擬三維場(chǎng)景數(shù)據(jù)方式,通過提取并打包各 進(jìn)程的OpenGL繪制命令并分別發(fā)送給對(duì)應(yīng)的服務(wù)器的方法實(shí)現(xiàn)分布式并行繪 制。為了實(shí)現(xiàn)上述目的,本發(fā)明提出一種多通道的分布式繪制系統(tǒng)。該系統(tǒng)包 括一臺(tái)客戶機(jī)、 一臺(tái)或多臺(tái)服務(wù)器、 一臺(tái)或多臺(tái)顯示設(shè)備以及將它們連接起來 的網(wǎng)絡(luò)??蛻魴C(jī)和每臺(tái)服務(wù)器都安裝有支持OpenGL庫的圖形適配器,客戶機(jī)和 每臺(tái)服務(wù)器各自運(yùn)行相應(yīng)的軟件,每臺(tái)服務(wù)器連接顯示器或投影等顯示設(shè)備??蛻魴C(jī)中包含兩類模塊 一個(gè)客戶機(jī)端控制程序模塊和若干個(gè)客戶機(jī)端應(yīng)用程序模塊。其中,客戶機(jī)端控制程序模塊中包含控制程序、共享內(nèi)存區(qū)域和虛擬三維場(chǎng)景數(shù)據(jù);客戶機(jī)端的每個(gè)應(yīng)用程序模塊中都包含一個(gè)修改的0penGL 庫和一個(gè)應(yīng)用程序,該應(yīng)用程序能夠調(diào)用這個(gè)修改的0penGL庫。每個(gè)服務(wù)器中都包含一個(gè)服務(wù)器端應(yīng)用程序模塊,每個(gè)服務(wù)器端應(yīng)用程序模塊又包含四個(gè)子模塊通訊子模塊、控制子模塊、輸入子模塊和顯示子模塊。 系統(tǒng)各部分關(guān)系如下用戶從客戶機(jī)端輸入通道設(shè)置指令,系統(tǒng)將該指令傳送給客戶機(jī)端控制程 序模塊??蛻魴C(jī)控制程序模塊中的控制程序負(fù)責(zé)接收該指令,根據(jù)該指令完成 通道的設(shè)置;客戶機(jī)控制程序模塊將設(shè)置完成后的信息傳輸給客戶機(jī)中的每一 個(gè)客戶機(jī)端應(yīng)用程序模塊。客戶機(jī)端控制程序?qū)⑻摂M三維場(chǎng)景數(shù)據(jù)讀入到客戶機(jī)的緩存中,然后創(chuàng)建 并映射共享內(nèi)存區(qū)域,再將虛擬三維場(chǎng)景數(shù)據(jù)寫入共享內(nèi)存區(qū)域中,接下來通 知客戶機(jī)中的各個(gè)應(yīng)用程序模塊來讀取這些虛擬三維場(chǎng)景數(shù)據(jù)。各個(gè)客戶機(jī)端應(yīng)用程序模塊先接收從客戶機(jī)控制程序模塊傳輸過來的通道 參數(shù)來設(shè)置各個(gè)攝像機(jī)的參數(shù)。此外,用戶也可以通過服務(wù)器端的輸入子模塊 輸入控制指令,系統(tǒng)將接收到的控制指令通過網(wǎng)絡(luò)發(fā)送給客戶機(jī)端,客戶機(jī)端 控制程序模塊中的控制程序根據(jù)這些指令信息更新其相應(yīng)的攝像機(jī)的參數(shù)??蛻魴C(jī)端控制程序模塊中的控制程序?qū)⒏鲾z像機(jī)的參數(shù)傳送給相應(yīng)的應(yīng)用 程序,應(yīng)用程序從共享內(nèi)存區(qū)域中揀選出視域范圍內(nèi)的虛擬三維場(chǎng)景數(shù)據(jù),然 后通過視錐體裁剪、背面裁剪及遮擋裁剪等方法確定虛擬三維場(chǎng)景的可見部分, 剔除不可見部分,最后針對(duì)可見部分從修改過的0penGL庫中調(diào)用相應(yīng)的0penGL 繪制指令。每個(gè)客戶機(jī)端應(yīng)用程序模塊中修改的0penGL庫接收到各自所屬客戶 機(jī)端應(yīng)用程序發(fā)出的OpenGL繪制指令后,截取這些指令,將其打包并通過網(wǎng)絡(luò) 發(fā)送至由用戶通過通道參數(shù)設(shè)置指定的服務(wù)器。每個(gè)服務(wù)器通過各自服務(wù)器端應(yīng)用程序模塊中的通信子模塊接收客戶機(jī)發(fā) 送過來的對(duì)應(yīng)的應(yīng)用程序的OpenGL流包,再將其發(fā)送給控制子模塊,控制子模 塊對(duì)0penGL流包進(jìn)行解壓,再將解壓后得到的數(shù)據(jù)送入顯示子模塊??蛻魴C(jī)端控制程序模塊負(fù)責(zé)實(shí)現(xiàn)所有的服務(wù)器繪制的同步。由客戶機(jī)端控 制程序模塊中的控制程序?qū)⑼街噶钚畔⑼ㄟ^網(wǎng)絡(luò)發(fā)送給每個(gè)服務(wù)器中的通訊 子模塊。通信子模塊接收客戶機(jī)發(fā)送過來同步指令信息,再將其發(fā)送給控制子模塊。各個(gè)控制子模塊根據(jù)同步指令完成同步操作,等待客戶機(jī)端控制程序模 塊中的控制程序發(fā)出繪制命令。當(dāng)各個(gè)服務(wù)器接收到客戶機(jī)端控制程序模塊中 的控制程序發(fā)出的繪制命令后,開始進(jìn)行圖像繪制并顯示。 系統(tǒng)實(shí)現(xiàn)方法的具體步驟包括a在客戶機(jī)中進(jìn)行通道設(shè)置將客戶機(jī)和服務(wù)器聯(lián)成局域網(wǎng),并在同一個(gè)網(wǎng)段內(nèi)為每臺(tái)計(jì)算機(jī)設(shè)置不同 的IP地址。用戶在客戶機(jī)中通過控制程序模塊輸入欲設(shè)定的通道數(shù)量,并選擇拼接模式或多視點(diǎn)模式。系統(tǒng)根據(jù)通道的數(shù)量將應(yīng)用程序和修改的0penGL庫復(fù) 制到和通道一一對(duì)應(yīng)的文件夾下。然后,在客戶機(jī)中設(shè)置各通道對(duì)應(yīng)的服務(wù)器 IP地址,并以配置文件的形式保存在各通道對(duì)應(yīng)的文件夾下。 b在客戶機(jī)控制程序模塊中進(jìn)行攝像機(jī)設(shè)置根據(jù)步驟a所設(shè)置的通道參數(shù),系統(tǒng)在客戶機(jī)端根據(jù)模式的選擇按照透視 投影的原理自動(dòng)或手動(dòng)來確定攝像機(jī)參數(shù)。然后,控制程序模塊將設(shè)置完成后 的參數(shù)信息傳輸給客戶機(jī)中的每一個(gè)客戶機(jī)端應(yīng)用程序模塊。用戶也可以根據(jù)步驟a所設(shè)置的通道參數(shù),在服務(wù)器端手動(dòng)設(shè)置或修改攝 像機(jī)的參數(shù)。具體步驟如下用戶通過人機(jī)交互設(shè)備輸入控制指令,系統(tǒng)將接 收到的控制指令通過網(wǎng)絡(luò)發(fā)送給客戶機(jī)端,客戶機(jī)端控制程序模塊中的控制程 序根據(jù)這些指令信息更新其相應(yīng)的攝像機(jī)的參數(shù),并進(jìn)一步將攝像機(jī)的參數(shù)傳 送給相應(yīng)的應(yīng)用程序。c在客戶機(jī)控制程序模塊中創(chuàng)建共享內(nèi)存區(qū)客戶機(jī)端控制程序模塊中的控制程序先將虛擬三維場(chǎng)景數(shù)據(jù)讀入到客戶 機(jī)的內(nèi)存中,創(chuàng)建并映射共享內(nèi)存區(qū)域,再將虛擬三維場(chǎng)景數(shù)據(jù)寫入共享內(nèi)存 區(qū)域中,接下來通知客戶機(jī)中的各個(gè)應(yīng)用程序模塊來讀取這些虛擬三維場(chǎng)景數(shù) 據(jù)。d客戶機(jī)各應(yīng)用程序模塊形成OpenGL繪制流各個(gè)客戶機(jī)端應(yīng)用程序模塊先根據(jù)經(jīng)步驟a設(shè)置的通道及經(jīng)步驟b設(shè)置的 攝像機(jī)參數(shù)來設(shè)置各自對(duì)應(yīng)的服務(wù)器及攝像機(jī),再根據(jù)攝像機(jī)的參數(shù)從經(jīng)步驟c 創(chuàng)建的共享內(nèi)存區(qū)域中讀取虛擬三維場(chǎng)景數(shù)據(jù),然后通過視錐體裁剪、背面裁 剪及遮擋裁剪等方法確定虛擬三維場(chǎng)景的可見部分,剔除不可見部分,最后針 對(duì)可見部分調(diào)用修改的0penGL繪制指令,形成0penGL繪制流。隨后進(jìn)行步驟e。e OpenGL繪制流的截取與發(fā)送與一般的OpenGL庫不同,這里采用的是現(xiàn)有的經(jīng)過修改的OpenGL庫。經(jīng) 修改的OpenGL庫接收到客戶機(jī)端應(yīng)用程序模塊發(fā)出的OpenGL繪制指令后不是 立即繪制顯示,而是截取這些指令,打包并通過網(wǎng)絡(luò)發(fā)送至由用戶通過通道參 數(shù)設(shè)置指定的服務(wù)器。f服務(wù)器進(jìn)行繪制準(zhǔn)備各個(gè)服務(wù)器首先通過各自服務(wù)器端應(yīng)用程序模塊中的通信子模塊接收經(jīng)步 驟e發(fā)送過來的對(duì)應(yīng)的應(yīng)用程序的OpenGL繪制流包,然后通過控制子模塊對(duì) OpenGL繪制流包進(jìn)行解壓,再將解壓后得到的數(shù)據(jù)送入顯示子模塊。隨后進(jìn)行 步驟g。g客戶機(jī)控制程序模塊的控制程序向所有的服務(wù)器發(fā)送同步信號(hào) 客戶機(jī)端控制程序模塊負(fù)責(zé)實(shí)現(xiàn)所有的服務(wù)器繪制的同步。因?yàn)橛煽蛻魴C(jī) 中的各應(yīng)用程序模塊發(fā)送過來的OpenGL繪制流包經(jīng)過網(wǎng)絡(luò)傳輸后很難實(shí)現(xiàn)同步 到達(dá),這種傳輸?shù)牟淮_定性會(huì)造成多個(gè)服務(wù)器繪制出的場(chǎng)景不一致。因此,系 統(tǒng)采用由客戶機(jī)端控制程序模塊的控制程序向所有的服務(wù)器發(fā)送同步指令的方 式來達(dá)到繪制圖像的同步。隨后進(jìn)行步驟h。 h繪制顯示各個(gè)服務(wù)器接受客戶機(jī)端控制程序模塊的同步控制,隨后開始進(jìn)行圖像繪制。與現(xiàn)有的技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于A. 能夠?qū)崿F(xiàn)多種通道模式,對(duì)虛擬三維場(chǎng)景既可以實(shí)現(xiàn)超高分辨率拼接顯 示,又可以實(shí)現(xiàn)整個(gè)場(chǎng)景的多視角繪制。B. 能夠?qū)崿F(xiàn)并行繪制,提高了繪制效率,擴(kuò)大了虛擬三維場(chǎng)景的適應(yīng)性。C. 應(yīng)用程序集中在客戶機(jī)上,系統(tǒng)部署方便。D. 虛擬三維場(chǎng)景數(shù)據(jù)集中存儲(chǔ)在客戶端,系統(tǒng)數(shù)據(jù)信息更新比較容易。


圖l為系統(tǒng)組成圖;圖2為本發(fā)明的系統(tǒng)組織結(jié)構(gòu)示意圖;圖3為本發(fā)明實(shí)施例1的四個(gè)服務(wù)器拼接顯示攝像機(jī)視錐的排列示意圖; 圖4為本發(fā)明實(shí)施例2的四個(gè)服務(wù)器多視點(diǎn)繪制攝像機(jī)視錐的排列示意圖; 其中l(wèi)-客戶機(jī)、2-服務(wù)器、3-網(wǎng)絡(luò)、4-客戶機(jī)端控制程序模塊,5-客戶機(jī) 端應(yīng)用程序模塊、6-共享內(nèi)存區(qū)域、7-控制程序、8-虛擬三維場(chǎng)景數(shù)據(jù)、9-應(yīng) 用程序、10-修改的0penGL動(dòng)態(tài)鏈接庫、11-服務(wù)器端應(yīng)用程序模塊、12-通訊 子模塊、13-控制子模塊、14-輸入子模塊、15-顯示子模塊。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說明。本發(fā)明以實(shí)現(xiàn)4畫面拼接模式顯示和實(shí)現(xiàn)4畫面多視點(diǎn)模式顯示為例。如圖1所示,為了實(shí)現(xiàn)4畫面拼接模式顯示或4畫面多視點(diǎn)模式顯示,系 統(tǒng)需要部署1臺(tái)客戶機(jī)(1)和4臺(tái)服務(wù)器(2),這5臺(tái)計(jì)算機(jī)連接在同一個(gè)局 域網(wǎng)(3)內(nèi)。該局域網(wǎng)的通訊方式采用TCP/IP協(xié)議,在同一個(gè)網(wǎng)段內(nèi)為每臺(tái) 計(jì)算機(jī)設(shè)置不同的IP地址。在客戶機(jī)端部署兩類模塊客戶機(jī)端控制程序模塊 (4)和客戶機(jī)端應(yīng)用程序模塊(5)??蛻魴C(jī)端控制程序模塊(4)包括共享內(nèi)存區(qū)域(6)、控制程序(7)和 虛擬三維場(chǎng)景數(shù)據(jù)(8)??蛻魴C(jī)端控制程序模塊通過將虛擬三維場(chǎng)景數(shù)據(jù)放入共享內(nèi)存區(qū)域的方式 將客戶機(jī)端的虛擬三維場(chǎng)景數(shù)據(jù)共享給多個(gè)客戶機(jī)端應(yīng)用程序訪問;客戶機(jī)端 控制程序模塊還負(fù)責(zé)根據(jù)用戶的指令來完成通道的設(shè)置,改變攝像機(jī)參數(shù);客 戶機(jī)端控制程序模塊還負(fù)責(zé)各個(gè)服務(wù)器節(jié)點(diǎn)繪制的同步??蛻魴C(jī)存放虛擬三維場(chǎng)景數(shù)據(jù)(8)供客戶機(jī)端控制程序(7)打開,系統(tǒng) 根據(jù)通道的數(shù)量將應(yīng)用程序和修改的0penGL庫復(fù)制到和通道一一對(duì)應(yīng)的文件夾 下,然后,在客戶機(jī)中設(shè)置各通道對(duì)應(yīng)的服務(wù)器IP地址,并以配置文件的形式 保存在各通道對(duì)應(yīng)的文件夾下??蛻魴C(jī)應(yīng)用程序(9)存放在不同的路徑下以便 讀取不同的配置文件,進(jìn)而實(shí)現(xiàn)客戶機(jī)應(yīng)用程序(9)與服務(wù)器(2)的一一對(duì) 應(yīng)。客戶機(jī)與服務(wù)器間的網(wǎng)絡(luò)進(jìn)程通信,主要是OpenGL指令流的發(fā)送與接收。每個(gè)服務(wù)器部署一個(gè)服務(wù)器應(yīng)用程序模塊(11),該應(yīng)用程序模塊(11)分 成4個(gè)子模塊通訊子模塊(12)、控制子模塊(13)、輸入子模塊(14)和顯示子模塊(15)。通訊子模塊(12)負(fù)責(zé)接收客戶機(jī)應(yīng)用程序模塊(5)從修改 的OpenGL庫(10)中調(diào)用的OpenGL指令以及客戶機(jī)端控制程序(7)發(fā)送的同步指 令,并將用戶通過輸入子模塊(14)輸入的控制命令發(fā)送給客戶機(jī)對(duì)應(yīng)的應(yīng)用 程序(9)。 實(shí)施例1配置好客戶機(jī)和服務(wù)器的網(wǎng)絡(luò)環(huán)境,客戶機(jī)的IP地址設(shè)置為10.0.0. 1,四 個(gè)服務(wù)器的IP地址分別為10. 0. 0. 2 10. 0. 0. 5。在客戶機(jī)中通過控制程序模塊 輸入通道數(shù)量為4,并選擇拼接模式。在客戶機(jī)中建立4個(gè)文件夾分別為1、 2、 3、 4,并將客戶機(jī)應(yīng)用程序和修改的OpenGL庫分別復(fù)制到文件夾1、 2、 3、 4 中。上述修改的OpenGL庫采用的是WireGL庫,WireGL對(duì)OpenGL命令進(jìn)行了擴(kuò) 展,允許OpenGL命令在網(wǎng)絡(luò)上運(yùn)行,使用caching策略和嚴(yán)格的優(yōu)化來降低網(wǎng) 絡(luò)帶寬需求和消除網(wǎng)絡(luò)帶寬造成的瓶頸。在4個(gè)文件夾中建立4個(gè)文本配置文 件,文件夾1 4中的配置文件記錄IP地址分別為10. 0. 0, 2 10. 0. 0. 5。啟動(dòng) 各個(gè)服務(wù)器的應(yīng)用程序,然后分別啟動(dòng)每個(gè)文件夾下的應(yīng)用程序。4個(gè)攝像機(jī)的布置如圖3所示,為了實(shí)現(xiàn)無縫拼接,視錐采用透視斜投影矩 陣,視錐分別設(shè)置為OABDE、 0BCEF、 0DEGH、 OEFHI,其中A、 B、 C、 D、 E、 F、 G、 H和I在同一個(gè)平面上,4個(gè)視錐的遠(yuǎn)平面在這個(gè)平面上;A' 、 B' 、 C'、d' 、 e' 、 f' 、 g' 、 h'禾n r也在同一個(gè)平面上,4個(gè)視錐的近平面在這個(gè)平面上??刂瞥绦蚰K將設(shè)置完成后的參數(shù)信息傳輸給客戶機(jī)中的每一個(gè)客戶 機(jī)端應(yīng)用程序模塊??蛻魴C(jī)端控制程序模塊中的控制程序先將虛擬三維場(chǎng)景數(shù)據(jù)scene. 3ds讀 入到客戶機(jī)的內(nèi)存中,創(chuàng)建并映射100M的共享內(nèi)存區(qū)域,再將scene. 3ds寫入 共享內(nèi)存區(qū)域中,接下來通知客戶機(jī)中的各個(gè)應(yīng)用程序模塊來讀取共享內(nèi)存中 的scene. 3ds數(shù)裙。客戶機(jī)端的4個(gè)應(yīng)用程序模塊1 4先通過Socket和服務(wù)器10. 0. 0. 2 10.0.0. 5建立鏈接。然后,分別按視錐0ABDE、 0BCEF、 ODEGH、 OEFHI讀取共享 內(nèi)存中的scene. 3ds數(shù)據(jù),然后通過視錐體裁剪、背面裁剪及遮擋裁剪方法確 定虛擬三維場(chǎng)景的可見部分,剔除不可見部分,最后針對(duì)可見部分調(diào)用WireGL 繪制指令,WireGL庫接收到客戶機(jī)端應(yīng)用程序模塊發(fā)出的OpenGL繪制指令后不 是立即繪制顯示,而是截取這些指令并打包,應(yīng)用程序模塊1 4分別將繪制指令包發(fā)送到服務(wù)器10. 0. 0. 2 10. 0. 0. 5。服務(wù)器10. 0. 0. 2 10. 0. 0. 5通過各自應(yīng)用程序模塊中的通信子模塊接收發(fā) 送過來的應(yīng)用程序1 4的0penGL繪制流包,然后通過控制子模塊對(duì)0penGL繪 制流包進(jìn)行解壓,再將解壓后得到的數(shù)據(jù)送入顯示子模塊??蛻魴C(jī)端控制程序模塊向服務(wù)器10. 0. 0. 2 10. 0.0. 5發(fā)送同步信號(hào) BeginRender。服務(wù)器10. 0. 0. 2 10. 0. 0. 5接收到同步控制信號(hào)BeginRender,開始圖像 繪制。實(shí)施例2配置好客戶機(jī)和服務(wù)器的網(wǎng)絡(luò)環(huán)境,客戶機(jī)的IP地址設(shè)置為10. 0. 0. 1,四 個(gè)服務(wù)器的IP地址分別為10. 0. 0. 2 10. 0. 0. 5。在客戶機(jī)中通過控制程序模塊 輸入通道數(shù)量為4,并選擇多視點(diǎn)模式。在客戶機(jī)中建立4個(gè)文件夾分別為1、 2、 3、 4,并將客戶機(jī)應(yīng)用程序和修改的OpenGL庫分別復(fù)制到文件夾l、 2、 3、 4中。上述修改的OpenGL庫采用的是WireGL庫,WireGL對(duì)OpenGL命令進(jìn)行了 擴(kuò)展,允許OpenGL命令在網(wǎng)絡(luò)上運(yùn)行,使用caching策略和嚴(yán)格的優(yōu)化來降低 網(wǎng)絡(luò)帶寬需求和消除網(wǎng)絡(luò)帶寬造成的瓶頸。在4個(gè)文件夾中建立4個(gè)文本配置 文件,文件夾1 4中的配置文件記錄IP地址分別為10.0.0.2 10.0.0.5。啟 動(dòng)各個(gè)服務(wù)器的應(yīng)用程序,然后分別啟動(dòng)每個(gè)文件夾下的應(yīng)用程序。系統(tǒng)進(jìn)行多視點(diǎn)模式顯示時(shí)4個(gè)攝像機(jī)的布置如圖4所示,4個(gè)視錐分別設(shè) 置為0ABDE、 OBCEF、 0DEGH、 0EFHI, ABDE、 BCEF、 DEGH、 EFHI分別為視錐的遠(yuǎn) 截面,A' B' D' E' 、 B' C' E' F' 、 D' E' G' H' 、 E' F' H' I'分別為視 錐的近截面,每個(gè)攝像機(jī)的參數(shù)就根據(jù)觀察點(diǎn)0和各個(gè)近截面的4個(gè)點(diǎn)及遠(yuǎn)截 面的距離來進(jìn)行設(shè)定。客戶機(jī)端控制程序模塊中的控制程序先將虛擬三維場(chǎng)景數(shù)據(jù)scene. 3ds讀 入到客戶機(jī)的內(nèi)存中,創(chuàng)建并映射100M的共享內(nèi)存區(qū)域,再將scene. 3ds寫入 共享內(nèi)存區(qū)域中,接下來通知客戶機(jī)中的各個(gè)應(yīng)用程序模塊來讀取共享內(nèi)存中 的scene. 3ds數(shù)據(jù)。客戶機(jī)端的4個(gè)應(yīng)用程序模塊1 4先通過Socket和服務(wù)器10. 0. 0. 2 10.0.0. 5建立鏈接。然后,分別按視錐OABDE、 0BCEF、 0DEGH、 OEFHI讀取共享 內(nèi)存中的scene. 3ds數(shù)據(jù),然后通過視錐體裁剪、背面裁剪及遮擋裁剪方法確定虛擬三維場(chǎng)景的可見部分,剔除不可見部分,最后針對(duì)可見部分調(diào)用WireGL 繪制指令,WireGL庫接收到客戶機(jī)端應(yīng)用程序模塊發(fā)出的OpenGL繪制指令后不 是立即繪制顯示,而是被WireGL庫的0penGL32. dll攔截,并將被攔截的指令 打包,應(yīng)用程序模塊1 4分別將繪制指令包發(fā)送到服務(wù)器10. 0. 0. 2 10. 0. 0. 5。服務(wù)器10. 0. 0. 2 10. 0. 0. 5通過各自應(yīng)用程序模塊中的通信子模塊接收發(fā) 送過來的應(yīng)用程序1 4的OpenGL繪制流包,然后通過控制子模塊對(duì)OpenGL繪 制流包進(jìn)行解壓,再將解壓后得到的數(shù)據(jù)送入顯示子模塊??蛻魴C(jī)端控制程序模塊向服務(wù)器10. 0. 0. 2 10. 0.0. 5發(fā)送同步信號(hào) BeginRender。服務(wù)器10. 0. 0. 2 10. 0. 0. 5接收到同步控制信號(hào)BeginRender,開始圖像 繪制。
權(quán)利要求
1、一種多通道的分布式繪制系統(tǒng),包括一臺(tái)客戶機(jī)、一臺(tái)或多臺(tái)服務(wù)器、一臺(tái)或多臺(tái)顯示設(shè)備以及將它們連接起來的網(wǎng)絡(luò),其特征在于客戶機(jī)中包含兩類模塊一個(gè)客戶機(jī)端控制程序模塊和若干個(gè)客戶機(jī)端應(yīng)用程序模塊,其中,客戶機(jī)端控制程序模塊中包含控制程序、共享內(nèi)存區(qū)域和虛擬三維場(chǎng)景數(shù)據(jù);客戶機(jī)端的每個(gè)應(yīng)用程序模塊中都包含一個(gè)修改的OpenGL庫和一個(gè)應(yīng)用程序,該應(yīng)用程序能夠調(diào)用這個(gè)修改的OpenGL庫;每個(gè)服務(wù)器中都包含一個(gè)服務(wù)器端應(yīng)用程序模塊,每個(gè)服務(wù)器端應(yīng)用程序模塊又包含四個(gè)子模塊通訊子模塊、控制子模塊、輸入子模塊和顯示子模塊;系統(tǒng)各部分關(guān)系如下用戶從客戶機(jī)端輸入通道設(shè)置指令,系統(tǒng)將該指令傳送給客戶機(jī)端控制程序模塊,客戶機(jī)控制程序模塊中的控制程序負(fù)責(zé)接收該指令,根據(jù)該指令完成通道的設(shè)置;用戶還可以通過服務(wù)器端的輸入子模塊輸入控制指令,系統(tǒng)將接收到的控制指令通過網(wǎng)絡(luò)發(fā)送給客戶機(jī)端,客戶機(jī)端控制程序模塊中的控制程序根據(jù)這些指令信息更新其相應(yīng)的攝像機(jī)的參數(shù);客戶機(jī)控制程序模塊將設(shè)置完成后的信息傳輸給客戶機(jī)中的每一個(gè)客戶機(jī)端應(yīng)用程序模塊;客戶機(jī)端控制程序?qū)⑻摂M三維場(chǎng)景數(shù)據(jù)讀入到客戶機(jī)的緩存中,然后創(chuàng)建并映射共享內(nèi)存區(qū)域,再將虛擬三維場(chǎng)景數(shù)據(jù)寫入共享內(nèi)存區(qū)域中,接下來通知客戶機(jī)中的各個(gè)應(yīng)用程序模塊來讀取這些虛擬三維場(chǎng)景數(shù)據(jù);各個(gè)客戶機(jī)端應(yīng)用程序模塊先接收從客戶機(jī)控制程序模塊傳輸過來的通道參數(shù)來設(shè)置各個(gè)攝像機(jī)的參數(shù);客戶機(jī)端控制程序模塊中的控制程序?qū)⒏鲾z像機(jī)的參數(shù)傳送給相應(yīng)的應(yīng)用程序,應(yīng)用程序從共享內(nèi)存區(qū)域中揀選出視域范圍內(nèi)的虛擬三維場(chǎng)景數(shù)據(jù),然后通過視錐體裁剪、背面裁剪及遮擋裁剪等方法確定虛擬三維場(chǎng)景的可見部分,剔除不可見部分,最后針對(duì)可見部分從修改過的OpenGL庫中調(diào)用相應(yīng)的OpenGL繪制指令;每個(gè)客戶機(jī)端應(yīng)用程序模塊中修改的OpenGL庫接收到各自所屬客戶機(jī)端應(yīng)用程序發(fā)出的OpenGL繪制指令后,截取這些指令,將其打包并通過網(wǎng)絡(luò)發(fā)送至由用戶通過通道參數(shù)設(shè)置指定的服務(wù)器;每個(gè)服務(wù)器通過各自服務(wù)器端應(yīng)用程序模塊中的通信子模塊接收客戶機(jī)發(fā)送過來的對(duì)應(yīng)的應(yīng)用程序的OpenGL流包,再將其發(fā)送給控制子模塊,控制子模塊對(duì)OpenGL流包進(jìn)行解壓,再將解壓后得到的數(shù)據(jù)送入顯示子模塊;客戶機(jī)端控制程序模塊負(fù)責(zé)實(shí)現(xiàn)所有的服務(wù)器繪制的同步,由客戶機(jī)端控制程序模塊中的控制程序?qū)⑼街噶钚畔⑼ㄟ^網(wǎng)絡(luò)發(fā)送給每個(gè)服務(wù)器中的通訊子模塊,通信子模塊接收客戶機(jī)發(fā)送過來同步指令信息,再將其發(fā)送給控制子模塊,各個(gè)控制子模塊根據(jù)同步指令完成同步操作,等待客戶機(jī)端控制程序模塊中的控制程序發(fā)出繪制命令,當(dāng)各個(gè)服務(wù)器接收到客戶機(jī)端控制程序模塊中的控制程序發(fā)出的繪制命令后,開始進(jìn)行圖像繪制并顯示。
2、 一種多通道的分布式繪制系統(tǒng)的實(shí)現(xiàn)方法,其特征在于具體步驟包括a在客戶機(jī)中進(jìn)行通道設(shè)置將客戶機(jī)和服務(wù)器聯(lián)成局域網(wǎng),并在同一個(gè)網(wǎng)段內(nèi)為每臺(tái)計(jì)算機(jī)設(shè)置不同 的IP地址,用戶在客戶機(jī)中通過控制程序模塊輸入欲設(shè)定的通道數(shù)量,并選擇拼接模式或多視點(diǎn)模式,系統(tǒng)根據(jù)通道的數(shù)量將應(yīng)用程序和修改的0penGL庫復(fù) 制到和通道一一對(duì)應(yīng)的文件夾下,然后,在客戶機(jī)中設(shè)置各通道對(duì)應(yīng)的服務(wù)器 IP地址,并以配置文件的形式保存在各通道對(duì)應(yīng)的文件夾下; b在客戶機(jī)控制程序模塊中進(jìn)行攝像機(jī)設(shè)置根據(jù)步驟a所設(shè)置的通道參數(shù),系統(tǒng)在客戶機(jī)端根據(jù)模式的選擇按照透視 投影的原理自動(dòng)或手動(dòng)來確定攝像機(jī)參數(shù);用戶還可以通過服務(wù)器端的輸入子 模塊輸入控制指令,系統(tǒng)將接收到的控制指令通過網(wǎng)絡(luò)發(fā)送給客戶機(jī)端,客戶 機(jī)端控制程序模塊中的控制程序根據(jù)這些指令信息更新其相應(yīng)的攝像機(jī)的參 數(shù);然后,控制程序模塊將設(shè)置完成后的參數(shù)信息傳輸給客戶機(jī)中的每一個(gè)客 戶機(jī)端應(yīng)用程序模塊;c在客戶機(jī)控制程序模塊中創(chuàng)建共享內(nèi)存區(qū)客戶機(jī)端控制程序模塊中的控制程序先將虛擬三維場(chǎng)景數(shù)據(jù)讀入到客戶 機(jī)的內(nèi)存中,創(chuàng)建并映射共享內(nèi)存區(qū)域,再將虛擬三維場(chǎng)景數(shù)據(jù)寫入共享內(nèi)存 區(qū)域中,接下來通知客戶機(jī)中的各個(gè)應(yīng)用程序模塊來讀取這些虛擬三維場(chǎng)景數(shù) 據(jù);d客戶機(jī)各應(yīng)用程序模塊形成OpenGL繪制流 各個(gè)客戶機(jī)端應(yīng)用程序模塊先根據(jù)經(jīng)步驟a設(shè)置的通道及經(jīng)步驟b設(shè)置的 攝像機(jī)參數(shù)來設(shè)置各自對(duì)應(yīng)的服務(wù)器及攝像機(jī),再根據(jù)攝像機(jī)的參數(shù)從經(jīng)步驟c 創(chuàng)建的共享內(nèi)存區(qū)域中讀取虛擬三維場(chǎng)景數(shù)據(jù),然后通過視錐體裁剪、背面裁 剪及遮擋裁剪等方法確定虛擬三維場(chǎng)景的可見部分,剔除不可見部分,最后針對(duì)可見部分調(diào)用修改的OpenGL繪制指令,形成OpenGL繪制流。隨后進(jìn)行步驟e; e OpenGL繪制流的截取與發(fā)送與一般的OpenGL庫不同,這里采用的是現(xiàn)有的經(jīng)過修改的OpenGL庫,經(jīng) 修改的OpenGL庫接收到客戶機(jī)端應(yīng)用程序模塊發(fā)出的OpenGL繪制指令后不是 立即繪制顯示,而是截取這些指令,打包并通過網(wǎng)絡(luò)發(fā)送至由用戶通過通道參 數(shù)設(shè)置指定的服務(wù)器;f服務(wù)器進(jìn)行繪制準(zhǔn)備各個(gè)服務(wù)器首先通過各自服務(wù)器端應(yīng)用程序模塊中的通信子模塊接收經(jīng)步 驟e發(fā)送過來的對(duì)應(yīng)的應(yīng)用程序的OpenGL繪制流包,然后通過控制子模塊對(duì) OpenGL繪制流包進(jìn)行解壓,再將解壓后得到的數(shù)據(jù)送入顯示子模塊,隨后進(jìn)行 步驟g;g客戶機(jī)控制程序模塊的控制程序向所有的服務(wù)器發(fā)送同步信號(hào),隨后進(jìn) 行步驟h;h繪制顯示各個(gè)服務(wù)器接受客戶機(jī)端控制程序模塊的同步控制,隨后開始進(jìn)行圖像繪制。
全文摘要
本發(fā)明屬于計(jì)算機(jī)圖形虛擬仿真應(yīng)用領(lǐng)域,涉及一種多通道的分布式繪制系統(tǒng)與方法。本發(fā)明采用客戶機(jī)/服務(wù)器結(jié)構(gòu),系統(tǒng)包括一臺(tái)客戶機(jī)、一臺(tái)或多臺(tái)服務(wù)器以及將它們連接起來的網(wǎng)絡(luò)??蛻魴C(jī)和每臺(tái)服務(wù)器都安裝有支持OpenGL庫的圖形適配器,客戶機(jī)和每臺(tái)服務(wù)器各自運(yùn)行相應(yīng)的軟件,每臺(tái)服務(wù)器連接顯示器或投影等顯示設(shè)備。在客戶機(jī)采用多進(jìn)程共享場(chǎng)景數(shù)據(jù),通過提取并打包各進(jìn)程的OpenGL繪制命令并分別發(fā)送給對(duì)應(yīng)的服務(wù)器的方法實(shí)現(xiàn)了分布式節(jié)點(diǎn)的拼接顯示和多視點(diǎn)顯示,擴(kuò)大了系統(tǒng)的適應(yīng)性和靈活性。
文檔編號(hào)G06T1/00GK101334891SQ20081011781
公開日2008年12月31日 申請(qǐng)日期2008年8月4日 優(yōu)先權(quán)日2008年8月4日
發(fā)明者昕 劉, 王全玉 申請(qǐng)人:北京理工大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1