国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

虛擬現(xiàn)實(shí)中基于Herm ite曲線實(shí)現(xiàn)固定漫游路徑算法與優(yōu)化

2014-10-16 08:53裴玉劉桂陽(yáng)師翊
關(guān)鍵詞:折線漫游小球

裴玉,劉桂陽(yáng),師翊

(黑龍江八一農(nóng)墾大學(xué)信息技術(shù)學(xué)院,大慶163319)

隨著社會(huì)的進(jìn)步,虛擬現(xiàn)實(shí)技術(shù)在計(jì)算機(jī)領(lǐng)域已經(jīng)得到了廣泛的發(fā)展,它能夠?yàn)槭褂谜咛峁╆P(guān)于視覺(jué)、聽(tīng)覺(jué)、觸覺(jué)等感官的模擬,使用戶不用親臨現(xiàn)場(chǎng)就有如同身臨其境一般。近年來(lái),虛擬現(xiàn)實(shí)技術(shù)在城市規(guī)劃、工程設(shè)計(jì)、醫(yī)學(xué)、文化傳播、旅游、教育等領(lǐng)域有著極為廣泛的應(yīng)用[1]??梢哉f(shuō),虛擬現(xiàn)實(shí)技術(shù)的綜合應(yīng)用,具有廣闊的發(fā)展前景和良好的社會(huì)、經(jīng)濟(jì)效益。虛擬環(huán)境漫游是虛擬現(xiàn)實(shí)應(yīng)用的基本功能之一,構(gòu)造一個(gè)虛擬環(huán)境漫游系統(tǒng),就是利用高性的計(jì)算機(jī)軟硬件創(chuàng)建參與者具有身臨其境的人機(jī)交互能力、有助于啟發(fā)構(gòu)思的信息環(huán)境[2]。Unity3D作為一種三維虛擬現(xiàn)實(shí)游戲平臺(tái),是一個(gè)全面整合的專業(yè)游戲引擎。它可以充分、實(shí)時(shí)的處理大量的三維模型,使用戶在三維場(chǎng)景中真實(shí)的感受到被仿真系統(tǒng)運(yùn)行中的動(dòng)態(tài)變化。

在三維場(chǎng)景中,漫游是一個(gè)重要的表現(xiàn)手法。漫游[3]包括自主漫游、固定路徑漫游。固定漫游控制路徑既可以用于到相機(jī)漫游,也可以用于其他虛擬對(duì)象的自動(dòng)運(yùn)動(dòng)。如何確定這些路徑,在這方面,技術(shù)相對(duì)已經(jīng)比較成熟,多數(shù)是利用現(xiàn)成的曲線計(jì)算,對(duì)于普通的二次曲線是可以實(shí)現(xiàn)平滑的過(guò)程,但是往往這是一個(gè)比較復(fù)雜的過(guò)程,會(huì)占用大量的時(shí)間。在交互狀態(tài)下如何去設(shè)置控制點(diǎn),不是很方便,只能用樣條曲線。樣條曲線的特點(diǎn)是由多個(gè)控制點(diǎn)進(jìn)行擬合的,它的控制點(diǎn)是關(guān)鍵,如何在實(shí)際問(wèn)題中動(dòng)態(tài)的實(shí)現(xiàn)這些控制點(diǎn)是一個(gè)難題,而且在控制點(diǎn)中,找到中間某個(gè)差值,也需要用控制點(diǎn)計(jì)算,每步大量的運(yùn)算,給實(shí)時(shí)運(yùn)行造成很大的負(fù)擔(dān)[4]。Hermite曲線已經(jīng)解決了這個(gè)問(wèn)題,但是它的缺陷是不能在交互狀態(tài)下去控制,而且實(shí)時(shí)去每一幀進(jìn)行計(jì)算,會(huì)造成大量的資源浪費(fèi),影響大量的時(shí)間。此研究是在Unity3D場(chǎng)景下用交互的方法,實(shí)現(xiàn)了Hermite曲線的動(dòng)態(tài)控制節(jié)點(diǎn),將現(xiàn)實(shí)中的路徑通過(guò)Hermite曲線原理轉(zhuǎn)化成分段的樣條曲線,實(shí)時(shí)生成顯示狀態(tài),給用戶提供了一個(gè)可參考的路徑,最終將路徑固化成具體的節(jié)點(diǎn)代碼,進(jìn)行優(yōu)化。

1 漫游路徑曲線的實(shí)現(xiàn)原理

1.1 Herm ite曲線實(shí)現(xiàn)原理

Hermite曲線已經(jīng)研究成熟,它可以直觀的描述平滑曲線的構(gòu)建。假設(shè)有n個(gè)點(diǎn),分別為P0,……Pi-1,三次Hermite曲線可以由起始點(diǎn)Pi和結(jié)束點(diǎn)Pi+2,以及起始切線Ti和結(jié)束切線Ti+2來(lái)定義[5]。三次Hermite曲線插值公式P(t)可以表示為(其中t∈[0,1]):

P(t)也稱為Hermite曲線段或者三次樣條段,該曲線段滿足下列等式

Hermite曲線就是通過(guò)曲線的起點(diǎn)、終點(diǎn)、起點(diǎn)切向量和終點(diǎn)切向量來(lái)確定曲線的。

圖1 Herm ite曲線Fig.1 Hermite curve

圖1 所示是Hermite曲線及其控制點(diǎn)的示意圖。改變這四個(gè)參數(shù),就可以控制Hermite曲線的形狀。要實(shí)現(xiàn)物體做連續(xù)的曲線運(yùn)動(dòng),首先離散化該曲線,得到分布在這條曲線上的點(diǎn)。為了使物體運(yùn)動(dòng)平滑,那么相鄰兩點(diǎn)的間隔距離不能太大,否則物體在運(yùn)動(dòng)過(guò)程中會(huì)出現(xiàn)抖動(dòng)的現(xiàn)象[6]。在計(jì)算機(jī)圖形學(xué)中,利用計(jì)算得到離散化的點(diǎn)用直線連接起來(lái)得到一條近似曲線來(lái)繪制Hermite曲線。如果在每一幀中使用物體依次放到這些離散化的點(diǎn)的上,相鄰兩點(diǎn)的間隔距離足夠消失,就可以實(shí)現(xiàn)物體沿Hermite曲線的平滑運(yùn)動(dòng)。

1.2 路徑的生成原理

假設(shè)Hermite曲線上有已知的n個(gè)點(diǎn),t是系統(tǒng)時(shí)間,從第一幀開(kāi)始從0無(wú)限變大。當(dāng)前時(shí)間為t時(shí),需要計(jì)算出填充于兩個(gè)已知點(diǎn)之間點(diǎn)的坐標(biāo),這些點(diǎn)連續(xù)成為場(chǎng)景中的Hermite曲線,而坐標(biāo)位置是關(guān)于t的參數(shù)方程(t∈[0,1])。在實(shí)際運(yùn)行中,要求每?jī)蓚€(gè)已知點(diǎn)之間的填充點(diǎn),需要將系統(tǒng)時(shí)間t轉(zhuǎn)化到[0,1],具體做法為:(當(dāng)前時(shí)間-起點(diǎn)時(shí)間)/(末點(diǎn)時(shí)間-起點(diǎn)時(shí)間),將算出的當(dāng)前時(shí)間代入?yún)?shù)方程中,即可求出每個(gè)填充點(diǎn)的坐標(biāo)。

在Hermite曲線中,相鄰已知點(diǎn)P1和P2的生成時(shí)間為TimeP1=2 s,TimeP2=4 s,如圖2所示。

圖2 曲線示意圖Fig.2 Schematic diagram of curves

若求在3.2 s時(shí)生成的點(diǎn)的坐標(biāo),應(yīng)先求當(dāng)前時(shí)間t=(3.2-2)/(4-2)=0.6 s,將t=0.6,代入?yún)?shù)方程

即可求出在3.2 s時(shí)生成的點(diǎn)的坐標(biāo)。

2 交互實(shí)現(xiàn)曲線

2.1 交互實(shí)現(xiàn)曲線的方法

在Hermite曲線中默認(rèn)4個(gè)點(diǎn),實(shí)際工作中有若干個(gè)點(diǎn),如何把現(xiàn)實(shí)中的多個(gè)節(jié)點(diǎn)轉(zhuǎn)化成Hermite中4個(gè)點(diǎn)?假設(shè)有n個(gè)點(diǎn),要在這n個(gè)點(diǎn)中取出相鄰4個(gè)點(diǎn),求出2個(gè)點(diǎn)的切向量,用2個(gè)點(diǎn)的坐標(biāo)和這2個(gè)點(diǎn)的切向量確定填充點(diǎn)的坐標(biāo)。將所有已知點(diǎn)的坐標(biāo)放在一個(gè)數(shù)組里,初始化每個(gè)點(diǎn)對(duì)應(yīng)的時(shí)間、位置,外部輸入一個(gè)時(shí)間,根據(jù)時(shí)間就能返回節(jié)點(diǎn)所對(duì)應(yīng)的差值,根據(jù)差值就能把一個(gè)個(gè)點(diǎn)連接起來(lái)。在這里,對(duì)于路徑漫游,要有一個(gè)完整的控制節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)坐標(biāo)不是固定的,需要有個(gè)可視的編輯界面,用Unity3D內(nèi)置的小球工具,可視的編輯它,每一個(gè)小球就是一個(gè)控制節(jié)點(diǎn),它只是一個(gè)輔助參考,最終它不被顯示。項(xiàng)目完成的算法是利用一個(gè)名為“path”的交結(jié)點(diǎn),在下面建立若干個(gè)小球?qū)ο?,每個(gè)小球作為Hermite曲線的一個(gè)控制點(diǎn)。如圖3所示

圖3 建立控制點(diǎn)Fig.2 Establishmentof control point

通過(guò)小球代替控制節(jié)點(diǎn),實(shí)現(xiàn)了一個(gè)動(dòng)態(tài)顯示,利用Update函數(shù),通過(guò)插值坐標(biāo),可以在運(yùn)行過(guò)程中保證相機(jī)沿著小球來(lái)運(yùn)動(dòng)。為了使小球能夠真正的達(dá)到和曲線實(shí)時(shí)調(diào)整的目的,用了畫線的算法,理論的線是完全封閉連續(xù)的,由無(wú)數(shù)個(gè)點(diǎn)組成,而實(shí)際中都是由離散的點(diǎn)組成的,這是計(jì)算機(jī)本身的特點(diǎn)。用分段的折線段的方法來(lái)畫線,其中折線段的每個(gè)點(diǎn)就是固化的坐標(biāo),根據(jù)折線段的每個(gè)位置而去確定固化的個(gè)數(shù),段數(shù)分的越少,折線段就越生硬,但相對(duì)浪費(fèi)的資源越少,最后固化這些點(diǎn),把每個(gè)折線段的點(diǎn)存起來(lái)。在折線段編輯過(guò)程中,通過(guò)折線段,連成一個(gè)近似的封閉的方法,這里的折線段的段數(shù)是可以動(dòng)態(tài)調(diào)節(jié)的。實(shí)時(shí)的調(diào)整折線段的段數(shù),就可以觀察到它的平滑程度,這樣實(shí)現(xiàn)了節(jié)點(diǎn)的控制個(gè)數(shù)以及算法的復(fù)雜程度,達(dá)到一個(gè)優(yōu)化的解決方法。

為了控制曲線畫線,需要控制一個(gè)點(diǎn),取控制點(diǎn)小球的坐標(biāo),將坐標(biāo)存在數(shù)組里。通過(guò)當(dāng)前用到的4個(gè)控制點(diǎn),利用GetHermiteAtTime函數(shù)將坐標(biāo)交給參數(shù)方程,通過(guò)運(yùn)算算出當(dāng)前坐標(biāo),根據(jù)坐標(biāo)最終畫出具體的線。那么當(dāng)調(diào)節(jié)小球的時(shí)候,節(jié)點(diǎn)都隨著變化,這樣達(dá)到了直觀形象的觀察路徑的方法。為了方便用戶能看到行走的路徑,利用OnDrawGizmos函數(shù),調(diào)用Hermite曲線公式,在OnDrawGizmos函數(shù)中,每步通過(guò)時(shí)間做參數(shù),找到當(dāng)前的時(shí)間點(diǎn),根據(jù)當(dāng)前的時(shí)間點(diǎn)得到插值坐標(biāo),自動(dòng)生成隨著小球變化的藍(lán)色路徑,用戶在編輯模式下就可看到曲線的變化。具體參數(shù)設(shè)置如圖4所示。

圖4 算法參數(shù)設(shè)置Fig.4 Algorithm parameter settings

具體的參數(shù)說(shuō)明如表1所示:

表1 算法中參數(shù)的功能說(shuō)明Table1 Function description of parameters in the algorithm

用戶可以在設(shè)置模式下根據(jù)要求增加和減少小球即控制點(diǎn)的數(shù)量,來(lái)控制曲線的光滑程度。通過(guò)Line Cout段數(shù)決定了曲線的彎折程度,段數(shù)越多,運(yùn)行起來(lái)相對(duì)會(huì)比較慢,曲線會(huì)比較平滑,反之,段數(shù)越少,生成的曲線會(huì)比較生硬,最終根據(jù)需求生成用戶滿意的曲線。圖5中A、B分別為L(zhǎng)ine Cout段數(shù)為10與100的對(duì)比效果。

圖5 Line Cout段數(shù)對(duì)比圖Fig.5 Number comparison chart

2.2 Animaiton編輯器與交互實(shí)現(xiàn)曲線的對(duì)比優(yōu)勢(shì)

在Unity3D環(huán)境中,系統(tǒng)提供的Animation編輯器可以實(shí)現(xiàn)固定漫游路徑。就是將對(duì)象在相應(yīng)時(shí)間、相應(yīng)位置進(jìn)行關(guān)鍵幀的設(shè)置。但是在編輯狀態(tài)下,對(duì)象的每個(gè)關(guān)鍵幀位置并沒(méi)有相應(yīng)的參考標(biāo)識(shí),只能依靠估量的方法進(jìn)行位置的設(shè)置,而且在漫游過(guò)程中,對(duì)象的朝向始終朝著一個(gè)方向,不能多視角的進(jìn)行游覽。如圖6所示。

圖6 關(guān)鍵幀設(shè)置Fig.6 Key Frames Settings

利用交互實(shí)現(xiàn)曲線的方法可以在編輯狀態(tài)下看到生成的藍(lán)色漫游路徑,路徑生成后可以隨時(shí)調(diào)整控制小球的數(shù)量和位置來(lái)改變生成的漫游路徑,具有實(shí)時(shí)化、可視化的特點(diǎn)。在漫游的過(guò)程中,攝像機(jī)的朝向可以隨著鼠標(biāo)方向的變化而變化,根據(jù)用戶的意愿調(diào)整視角,使漫游方式更加人性化。相比較Animation編輯器生成漫游路徑的方法,此方法步驟簡(jiǎn)便,生成的漫游路徑十分平滑并且漫游方式更加符合用戶的操作習(xí)慣。生成效果如圖7所示。

圖7 交互實(shí)現(xiàn)曲線Fig.7 Interactive curve

3 路徑優(yōu)化算法

生成路徑時(shí),如果在每次運(yùn)行時(shí)在每一幀都重新進(jìn)行矩陣運(yùn)算來(lái)確定相機(jī)的位置,將大量占用計(jì)算機(jī)的系統(tǒng)資源,為了使程序運(yùn)行更快,運(yùn)行一次后,本項(xiàng)目將這一路徑曲線進(jìn)行插值離散化,將生成的曲線坐標(biāo)保存到數(shù)組中,相機(jī)在漫游時(shí)完全脫離原始的控制點(diǎn)及矩陣運(yùn)算,直接取數(shù)組中的坐標(biāo)即可,這種將路徑“固化”的方法能夠大量節(jié)約虛擬漫游的系統(tǒng)資源。

用少量的球?qū)崿F(xiàn)平滑的曲線,平滑的曲線由多條折線段構(gòu)成,根據(jù)微積分的原理,折線段越多,曲線就越平滑,曲線的具體段數(shù)可由開(kāi)發(fā)者根據(jù)場(chǎng)景大小自行設(shè)置。為了保證攝像機(jī)平滑運(yùn)行,在每一幀調(diào)用Update函數(shù),在函數(shù)中連接每一段折線段,將每段折線段生成的插值坐標(biāo)賦值給攝像機(jī),這樣攝像機(jī)的運(yùn)動(dòng)時(shí)間與每一幀的時(shí)間細(xì)化同步,達(dá)到了平滑運(yùn)動(dòng)的目的。如此,攝像機(jī)的運(yùn)動(dòng)完全脫離Hermite曲線,這樣就達(dá)到了優(yōu)化算法的目的。如果開(kāi)發(fā)者想改變控制小球的位置和數(shù)量生成新的Hermite曲線,要使改變生效,需要執(zhí)行Savecode函數(shù),Savecode函數(shù)的運(yùn)行效果是把存有原有坐標(biāo)的文本文件刪除,生成存有新的Hermite曲線坐標(biāo)的文件,程序再次運(yùn)行時(shí)會(huì)調(diào)用新的坐標(biāo),從而使攝像機(jī)按照新的路徑漫游。具體實(shí)現(xiàn)流程如圖8所示。

圖8 流程圖Fig.8 Flow diagram

4 結(jié)論

通過(guò)實(shí)驗(yàn)算法,利用路徑的生成以及固化技術(shù),實(shí)現(xiàn)了固定漫游路徑。在虛擬景區(qū)展示中,用戶根據(jù)圖片導(dǎo)航[7]提示信息進(jìn)入漫游界面,按照指定的路線,對(duì)重要景點(diǎn)進(jìn)行游覽,不僅方便于用戶操作,而且不會(huì)遺漏欣賞到任何一個(gè)景點(diǎn)。這種算法也可以應(yīng)用到游戲、旅游、教育、建筑等行業(yè)的虛擬場(chǎng)景中,如怪獸的自動(dòng)行走,鳥(niǎo)的飛翔,車輛的自動(dòng)行走,宇宙星體的運(yùn)動(dòng)等,對(duì)于今后虛擬行業(yè)的發(fā)展,具有良好的應(yīng)用價(jià)值。

[1]徐誠(chéng).虛擬校園漫游系統(tǒng)的研究[D].武漢:華中師范大學(xué),2006.

[2]李龍,向明尚,劉賢梅.虛擬校園環(huán)境的構(gòu)造和漫游引擎的實(shí)現(xiàn)[J].大慶石油學(xué)院學(xué)報(bào),2003,27(2):56-58.

[3]陳勇,馬純永,陳戈.基于VC/OpenGL的虛擬海大校園導(dǎo)航系統(tǒng)[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2007,19(2):263-266.

[4]孫英慧,孫英娟,楊柳.基于Hermite算法的曲線擬合[J].長(zhǎng)春師范學(xué)院學(xué)報(bào):自然科學(xué)版,2009,4(2):8-12.

[5]Tomas A M,Eric H.實(shí)時(shí)計(jì)算機(jī)圖形學(xué)[M].普建濤,譯.2版.北京:北京大學(xué)出版社,2004.

[6]馮洪奎,鮑勁松,金燁,等.在視景仿真中用Hermite曲線控制物體運(yùn)動(dòng)[J].系統(tǒng)仿真學(xué)報(bào),2008,5(4):1224-1228.

[7]劉桂陽(yáng).大豆精準(zhǔn)生產(chǎn)網(wǎng)絡(luò)信息系統(tǒng)平臺(tái)設(shè)計(jì)[J].黑龍江八一農(nóng)墾大學(xué)學(xué)報(bào),2008,20(5):82-86.

猜你喜歡
折線漫游小球
平面分割問(wèn)題的探究之旅
聯(lián)想等效,拓展建?!浴皫щ娦∏蛟诘刃?chǎng)中做圓周運(yùn)動(dòng)”為例
小球進(jìn)洞了
小球別跑
小球別跑
折線的舞臺(tái)——談含絕對(duì)值的一次函數(shù)的圖象
霹靂漫游堂
折線
折線圖案
NASA漫游記
扬州市| 同德县| 富锦市| 平阳县| 新巴尔虎左旗| 如皋市| 长阳| 桃源县| 石城县| 遵义市| 肥乡县| 临城县| 成安县| 靖宇县| 霍林郭勒市| 龙岩市| 青阳县| 登封市| 平昌县| 会理县| 上饶市| 平阳县| 永昌县| 柳江县| 南通市| 西贡区| 博爱县| 论坛| 通山县| 卢龙县| 菏泽市| 黑水县| 秦皇岛市| 宁乡县| 九龙县| 元阳县| 房产| 密云县| 财经| 宜兰县| 赤水市|