虛擬現(xiàn)實(shí)的編程技術(shù)_第1頁(yè)
虛擬現(xiàn)實(shí)的編程技術(shù)_第2頁(yè)
虛擬現(xiàn)實(shí)的編程技術(shù)_第3頁(yè)
虛擬現(xiàn)實(shí)的編程技術(shù)_第4頁(yè)
虛擬現(xiàn)實(shí)的編程技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩136頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

VR編程技術(shù)VRToolkits虛擬現(xiàn)實(shí)編程工具包

是面向?qū)ο蠊δ軘U(kuò)展庫(kù),幫助VR的開(kāi)發(fā)者;支持各種VR中常見(jiàn)的I/O設(shè)備(開(kāi)發(fā)者不用寫驅(qū)動(dòng)程序);

允許輸入CAD模型(節(jié)省時(shí)間)、編輯形狀、指定對(duì)象的層次結(jié)構(gòu),碰撞檢測(cè)和多層次的細(xì)節(jié),遮蔭和紋理,運(yùn)行時(shí)間管理;

具有內(nèi)置網(wǎng)絡(luò)功能,用于多用戶交互。

虛擬現(xiàn)實(shí)工具包可分為:是否基于文本或圖形化編程;所使用的語(yǔ)言和軟件庫(kù)大小的類型;支持I/O設(shè)備的類型;

提供繪制的類型;一般目的還是特殊應(yīng)用;是否專有(更多的功能,更好地記錄文檔)或公共領(lǐng)域(免費(fèi),少量文檔和功能)在九十年代的虛擬現(xiàn)實(shí)工具包

RenderWare

(Cannon),VRT3/Superscape(DimensionLtd.),CyberspaceDeveloperKit(Autodesk),CosmoAuthoringTool(SGI/Platinum/CA),Rend386

及其它;允許任何基于文本的編程:(RenderWare,CDKandRend386),或者圖形編程:

(SuperscapeandCosmo);獨(dú)立于平臺(tái),一般并不需要圖形加速硬件;往往用“低端”I/O設(shè)備(鼠標(biāo)),并支持平面著色,以保證快速繪制。Rend386場(chǎng)景本章討論的VR軟件工具包名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模Java3D(SunMicrosystems)一般應(yīng)用no用C完成用Java編程19工具包,275類VizardToolkitandPeoplePak(WorldViz)一般應(yīng)用擴(kuò)展精靈yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom觸覺(jué)yesC++PeopleShop(BostonDynamics)軍事/民用

yesC/C++3DGameStudio游戲引擎

yes

C++場(chǎng)景圖:是物體的一個(gè)分層組織

(可見(jiàn)或不可見(jiàn))在虛擬世界中(或“宇宙”);場(chǎng)景圖用樹(shù)狀結(jié)構(gòu)表示,節(jié)點(diǎn)用枝連接;可見(jiàn)物體用外部節(jié)點(diǎn)表示,稱為葉子(他們有沒(méi)有子女)。例如節(jié)點(diǎn)

F,G,H,I內(nèi)部節(jié)點(diǎn)表示轉(zhuǎn)變(即適用于所有的子女)ABCEDJFGHI根節(jié)點(diǎn)內(nèi)部節(jié)點(diǎn)外部節(jié)點(diǎn)手掌場(chǎng)景球場(chǎng)景圖表明球是場(chǎng)景的孩子節(jié)點(diǎn)場(chǎng)景圖不是靜態(tài)的手掌場(chǎng)景球場(chǎng)景已經(jīng)被修改,球現(xiàn)在是手掌的孩子VC6.1onbookCD建模階段模型幾何設(shè)置定義并連接傳感器定義動(dòng)作函數(shù)定義場(chǎng)景圖定義網(wǎng)絡(luò)實(shí)時(shí)循環(huán)開(kāi)始仿真更新物體(從傳感器和智能行為)繪制場(chǎng)景(圖形,聲音,觸覺(jué))讀傳感器數(shù)據(jù)退出仿真每一幀循環(huán)名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模Java3D(SunMicrosystems)一般應(yīng)用no用C完成用Java編程19工具包,275類VizardToolkitandPeoplePak(WorldViz)一般應(yīng)用擴(kuò)展精靈yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom觸覺(jué)yesC++PeopleShop(BostonDynamics)軍事/民用

yesC/C++3DGameStudio游戲引擎

yes

C++本章討論的VR軟件工具包Java及Java3D

Java

面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言

用于網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)

平臺(tái)獨(dú)立

比C/C++慢

Java3D

Java類的層次,作為3D圖形繪制和聲音繪制系統(tǒng)的接口

完美地集成了Java

很強(qiáng)壯的面向?qū)ο蟮捏w系結(jié)構(gòu)

有利的3D圖形應(yīng)用程接口(API)Java3D初始化建模幾何建立傳感器定義行為定義場(chǎng)景圖網(wǎng)絡(luò)Java3D初始化建模幾何建立傳感器定義行為定義場(chǎng)景圖網(wǎng)絡(luò)Java3D幾何:

幾何可以從各種文件格式導(dǎo)入

(如.3DS,DXF,LWS,NFF,OBJ,VRT,VTK,WRL)

能夠作為圖元產(chǎn)生

(例如.sphere,cone,cylinder,…)

用特定的類指定頂點(diǎn)、邊、法向量、紋理坐標(biāo)產(chǎn)生定制幾何導(dǎo)入幾何loader.load(“Hand.wrl")幾何圖元:newSphere(radius)定制幾何:newGeometryArray(…)newLineArray(…)newQuadArray(…)newTriangleArray(…)Java3D物體外觀:

幾何的外觀用外觀對(duì)象給定

一個(gè)外觀類對(duì)象存儲(chǔ)有關(guān)材料(漫反射、鏡面反射….diffuse,specular,shininess,opacity)和紋理Mat=newMaterial();Mat.setDiffuseColor(r,g,b);Mat.setAmbientColor(r,g,b);Mat.setSpecularColor(r,g,b);TexLd=newTextureLoader(“checkered.jpg”,...);Tex=TexLd.getTexture();Appr=newAppearance();Appr.setMaterial(Mat);Appr.setTexture(Text);Geom.setAppearance(Appr)Java3D初始化建模幾何建立傳感器定義行為定義場(chǎng)景圖網(wǎng)絡(luò)Java3D節(jié)點(diǎn)類型:節(jié)點(diǎn)組葉子樹(shù)枝組變換組選擇背景行為霧光照3D形狀Compilablesub-graphTransform+childnodesSelectwhichofthechildrenarevisible(usefulforLOD)Universebackground.CanbeacolororanimageActionstobeperformedbythesimulationFognodeLightnode.Specialderivedclasses:AmbientLight,PointLight,DirectionalLightGeometry+Appearance+BoundingBoxJava3D場(chǎng)景圖節(jié)點(diǎn)從文件調(diào)入物體

Java3D默認(rèn)支持Lightwave

和Wavefront

模型文件

其它格式的載入器可以免費(fèi)從下列網(wǎng)址下載:

/utilities/loaders.html載入器把讀入文件的內(nèi)容加到場(chǎng)景圖中,作為一個(gè)獨(dú)立的物體.然而,它們提供了訪問(wèn)單獨(dú)子部件的函數(shù)全局根正方體球手拇指食指中指無(wú)名指小拇指SceneSc=loader.load(“Hand.wrl”);BranchGroupBg=Sc.getSceneGroup();RootNode.addChild(Bg);Java3D模型導(dǎo)入

SceneSc=loader.load(“Hand.wrl”);BranchGroupBg=Sc.getSceneGroup();Thumb=Bg.getChild(0);Index=Bg.getChild(1);Middle=Bg.getChild(2);Ring=Bg.getChild(3);Small=Bg.getChild(4);把模型加入場(chǎng)景的圖中訪問(wèn)導(dǎo)入模型的子零件部分Palm=loader.load("Palm.wrl").getSceneGroup();ThumbProximal=loader.load("ThumbProximal.wrl").getSceneGroup();ThumbDistal=loader.load("ThumbDistal.wrl").getSceneGroup();IndexProximal=loader.load("IndexProximal.wrl").getSceneGroup();IndexMiddle=loader.load("IndexMiddle.wrl").getSceneGroup();IndexDistal=loader.load("IndexDistal.wrl").getSceneGroup();MiddleProximal=loader.load("MiddleProximal.wrl").getSceneGroup();MiddleMiddle=loader.load("MiddleMiddle.wrl").getSceneGroup();MiddleDistal=loader.load("MiddleDistal.wrl").getSceneGroup();RingProximal=loader.load("RingProximal.wrl").getSceneGroup();RingMiddle=loader.load("RingMiddle.wrl").getSceneGroup();RingDistal=loader.load("RingDistal.wrl").getSceneGroup();SmallProximal=loader.load("SmallProximal.wrl").getSceneGroup();SmallMiddle=loader.load("SmallMiddle.wrl").getSceneGroup();SmallDistal=loader.load("SmallDistal.wrl").getSceneGroup();Java3D虛擬手的導(dǎo)入:

Java3D虛擬手的層次:

Palm.addchild(ThumbProximal);ThumbProximal.addchild(ThumbDistal);Palm.addchild(IndexProximal);IndexProximal.addchild(IndexMiddle);IndexMiddle.addchild(IndexDistal);Palm.addchild(MiddleProximal);MiddleProximal.addchild(MiddleMiddle);MiddleMiddle.addchild(MiddleDistal);Palm.addchild(RingProximal);RingProximal.addchild(RingMiddle);RingMiddle.addchild(RingDistal);Palm.addchild(SmallProximal);SmallProximal.addchild(SmallMiddle);SmallMiddle.addchild(SmallDistal);Java3D初始化建模幾何建立傳感器定義行為定義場(chǎng)景圖網(wǎng)絡(luò)Java3D中的輸入設(shè)備:

Java3D中默認(rèn)的輸入設(shè)備是鼠標(biāo)和鍵盤;

目前VR應(yīng)用中集成其它的輸入設(shè)備(位置傳感器,跟蹤球,游戲桿…)完全由開(kāi)發(fā)者的需要而決定;

通常驅(qū)動(dòng)程用C/C++寫,使用人員可以使用Java重寫驅(qū)動(dòng)程序,也可以使用JNI(JavaNativeInterface)來(lái)調(diào)用C/C++版本的驅(qū)動(dòng)程。后者是更加需要的.Java3D提供很好的通用輸入設(shè)備接口,可以用于集成傳感器.然而,開(kāi)發(fā)人員還是選擇傳統(tǒng)的方法.Java3D通用傳感器接口classPhysicalEnvironment-存儲(chǔ)全部輸入設(shè)備和仿真中的傳感器的信息classInputDevice–輸入設(shè)備驅(qū)動(dòng)程序接口classSensor–提供實(shí)時(shí)數(shù)據(jù)的對(duì)象類物理環(huán)境輸入設(shè)備傳感器一個(gè)輸入設(shè)別能提供一個(gè)或多個(gè)傳感器一個(gè)傳感器不需要和一個(gè)輸入設(shè)備關(guān)聯(lián)(VRML類型傳感器)Java3D初始化建模幾何建立傳感器啟動(dòng)場(chǎng)景定義場(chǎng)景圖網(wǎng)絡(luò)Java3D–啟動(dòng)仿真

Java3D提供控制仿真的Behavior對(duì)象一個(gè)Behavior對(duì)象包含一些列仿真中接受的動(dòng)作

一個(gè)刺激由WakeupCondition對(duì)象發(fā)出

一些激活的類:

WakeupOnCollisionEntryWakeupOnCollisionExitWakeupOnCollisionMovementWakeupOnElapsedFramesWakeupOnElapsedTimeWakeupOnSensorEntryWakeupOnSensorExitWakeupOnViewPlatformEntryWakeupOnViewPlatformExitJava3D–行為(Behavior)的使用WakeupOnElapsedFramesWup=newWakeupOnElapsedFrames(0);Bhv.wakeupOn(Wup);全局根節(jié)點(diǎn)

我們定義一個(gè)行為Bhv

,它按照1度旋轉(zhuǎn)球;

我們想讓這個(gè)行為每一幀都被調(diào)用,以便球能夠轉(zhuǎn)動(dòng)VC6.3onbookCDVC6.4onbookCDJava3D的View

對(duì)象描述仿真中的圖形顯示,和用戶位置(由跟蹤器給出的)View模型提供了由ViewPlatform

節(jié)點(diǎn)提供的虛擬世界和用于交互的I/O設(shè)備的分離;一些被跟蹤的用戶可以映射到虛擬世界的相同的位置;這對(duì)應(yīng)幾個(gè)Views和一個(gè)ViewPlatform

相反,一個(gè)用戶能夠控制幾個(gè)ViewPlatforms;

這些對(duì)應(yīng)幾個(gè)Views,因?yàn)閂iewPlatform

有自己的

View;這樣一個(gè)用戶可以有幾個(gè)Views與虛擬世界對(duì)應(yīng),它們之間可以通訊.Viewplatform1Viewplatform2Java3D初始化建模幾何建立傳感器定義行為定義場(chǎng)景圖網(wǎng)絡(luò)Java3DsimulationJavaApplicationJava3DsimulationJavaAppletJava3DsimulationJavaApplicationJava3D–網(wǎng)絡(luò)

Java3D不提供內(nèi)置的網(wǎng)絡(luò)虛擬環(huán)境的解決方案

然而,它允許開(kāi)發(fā)者集成使用Java提供的強(qiáng)大的網(wǎng)絡(luò)特征

Java3D應(yīng)用程序能夠像標(biāo)準(zhǔn)的應(yīng)用程序一樣運(yùn)行。Java3DsimulationJavaAppletServerJava3D與VRML

VRML提供了在虛擬世界中定義對(duì)象并啟動(dòng)對(duì)象的可能

圖形用戶接口(APIs),例如Java3D或WTK從VRML文件載入模型的靜態(tài)信息,而忽略了傳感器、路徑和腳本等信息;Java3D在線資源

/products/java-media/3D/index.html

/~srp/Java3D/portfolio/Java3D和WTK的比較Java3d(版本1.3beta1)和WTK(Release9)之間的比較進(jìn)行了研究;運(yùn)行于雙PentiumIII933MHzPC(Dell),512M字節(jié)內(nèi)存RAM,Wildcat4110圖形加速器,64M字節(jié)RAM;I/O接口是theRutgersMasterII力反饋手套;場(chǎng)景包括幾個(gè)球(每個(gè)球420個(gè)多邊形)和虛擬手(

2,270個(gè)多邊形);球繞任意軸不斷地旋轉(zhuǎn),手或者是轉(zhuǎn)動(dòng)的,或者是有用戶驅(qū)動(dòng)的.Java3D–WTK比較實(shí)驗(yàn)中用的圖形場(chǎng)景Java3D與WTK比較

用于判斷性能的仿真變量:

圖形模式

(非立體的,立體的),

繪制模式

(線框,Gouraud,紋理);

場(chǎng)景復(fù)雜度

(多邊形數(shù)目

5,000–50,000);

光照(光源數(shù)目

1,5,10);

交互(無(wú)交互,手輸入,力反饋)Java3D–WTK比較Java3d平均比WTK快,Java3D–WTK比較Java3d版本3.1Beta1比WTKRelease9具有較小延遲但Java3d在場(chǎng)景繪制時(shí)間上變化較快WTK不會(huì)偶爾出現(xiàn)峰值,不會(huì)出現(xiàn)偶爾的凍結(jié)本章討論的VR工具包名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模Java3D(SunMicrosystems)一般應(yīng)用no用C完成用Java編程19工具包,275類VizardToolkitandPeoplePak(WorldViz)一般應(yīng)用擴(kuò)展精靈yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom觸覺(jué)yesC++PeopleShop(BostonDynamics)軍事/民用

yesC/C++3DGameStudio游戲引擎

yes

C++Vizard特征:使用Python,它是可升級(jí)和跨平臺(tái)的

它是面向?qū)ο蟮?,很容易集成C/C++

運(yùn)行于Unix,Windows,Mac和其它平臺(tái);

使用一個(gè)4-window“工作臺(tái)”,允許變成人員寫并執(zhí)行代碼,檢查3Dmodels,拖放對(duì)象,發(fā)出命令同時(shí)繪制場(chǎng)景.腳本棧–當(dāng)輸入的時(shí)候,錯(cuò)誤用高亮度標(biāo)記交互窗口–輸入命令資源窗口–文本列表3D窗口–開(kāi)發(fā)每個(gè)物體Workbench的使用:圖標(biāo)菜單用鼠標(biāo)開(kāi)發(fā)場(chǎng)景導(dǎo)入物體importviz

importhand

viz.go()

#Identifythe5DTglove'sport.

PORT_5DT_USB=0

#Addthe5DTsensor

sensor=viz.add('5dt.dls')

#Createahandobjectfromthedataglove

glove=hand.add(sensor,hand.GLOVE_5DT)

#Placethehandinfrontoftheuser

glove.translate(0,1,5)

glove.rotate(180,-90,180)#nowwhenyourunthescriptthegloveshouldbemovingVizard虛擬手:

importviz

viz.go()

logo=viz.add('logo.wrl')#addvizardlogoandplaceitinfrontofuserlogo.translate(0,2,4)

tex1=viz.add('gb_noise.jpg')#addtwotexturesthatwillthenbeappliedtothelogo#tex2=viz.add('brick.jpg')

logo.texture(tex1)#appliesthefirsttexturelogo.texture(tex2,'',1)#appliesthesecondtexturetothelogoblend=viz.add('multitexblend.fp')#indicatehowtoblendthetwotextureslogo.apply(blend)Vizard多紋理:

Vizard仿真服務(wù)器:

多于一個(gè)用戶存在同一個(gè)環(huán)境中,每個(gè)用戶需要運(yùn)行Vizard.Aftertheworldissetup當(dāng)虛擬世界建立后,每個(gè)用戶必須建立兩個(gè)“mailboxes”.

一個(gè)接收來(lái)自其它用戶的信息。User2User1PositionisthepropertyBallistheobjectactioninformationVizard網(wǎng)絡(luò)舉例:ImportvizViz.go()Ball=viz.add(‘ball.wrl’)#createaBallobjectthatiscontrolledbytheotheruser#addtheworldthatwillbedisplayedonyourcomputer#Useaprompttoasktheotheruserthenetworknameofhiscomputer.

target_machine=viz.input('Enterthenameoftheothermachine').upper()

#Addamailboxfromwhichtosendmessagestotheotheruser.Thisisyouroutbox.

target_mailbox=viz.add(viz.NETWORK,target_machine)#Addanidforthetimer.

BROADCAST=1

#Addthetimer.

defmytimer(num):

ifnum==BROADCAST:

#Retrieveyourcurrentposition.

position=viz.get(viz.HEAD_POS)

#Sendthedatatothetargetmailbox.Alltherecipientwillget

youryaw,xandzcoordinates.

target_mailbox.send(position[0],position[1],position[2])Vizard網(wǎng)絡(luò)舉例:#Thisfunctionwilldealwithincomingmessages.

defmynetwork(message):

#message[0]iswhosentthemessage,message[1]isadescriptionofwhathe

#sentandmessage[2]andgreaterarethemessagesthemselves.

x=message[2]

y=message[3]

z=message[4]

ball.translate(x,y,z)

#Callbackthenetworkfunctiontoawaitincomingmessages.

viz.callback(viz.NETWORK_EVENT,mynetwork)

#Callbackthetimer.

viz.callback(viz.TIMER_EVENT,mytimer)

#Startthetimer.

viz.starttimer(BROADCAST,0.01,-1)

本章討論的VR工具包名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模Java3D(SunMicrosystems)一般應(yīng)用no用C完成用Java編程19工具包,275類VizardToolkitandPeoplePak(WorldViz)一般應(yīng)用擴(kuò)展精靈yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom觸覺(jué)yesC++PeopleShop(BostonDynamics)軍事/民用

yesC/C++3DGameStudio游戲引擎

yes

C++PHANToM的GHOST軟件包

提供真實(shí)感的觸覺(jué)交互;

提供并使觸覺(jué)交互更直觀

提供觸覺(jué)交互的場(chǎng)景圖,利用3D圖形APIs

提供觸覺(jué)交互技術(shù)的擴(kuò)展環(huán)境;

與PHANTOM點(diǎn)觸覺(jué)交互

;

基于用戶定義的力模型幾何;

對(duì)力反應(yīng)的幾何運(yùn)動(dòng)xyz(0,0,0)PHANToMDesktopmodelGHOST–應(yīng)用交互xyz(0,0,0)應(yīng)用處理觸覺(jué)加工場(chǎng)景產(chǎn)生碰撞檢測(cè)碰撞反映觸覺(jué)狀態(tài)更新結(jié)束觸覺(jué)繪制觸覺(jué)循環(huán)30fps場(chǎng)景繪制1000HzGHOST觸覺(jué)場(chǎng)景圖xyz(0,0,0)應(yīng)用處理觸覺(jué)加工場(chǎng)景產(chǎn)生碰撞檢測(cè)碰撞反映觸覺(jué)狀態(tài)更新結(jié)束觸覺(jué)繪制觸覺(jué)循環(huán)30fps場(chǎng)景繪制1000Hz觸覺(jué)場(chǎng)景圖

提供一種構(gòu)造觸覺(jué)場(chǎng)景的結(jié)構(gòu)化方法,包括幾何和動(dòng)態(tài)的;自頂向下遍歷(與WTK不同);每個(gè)節(jié)點(diǎn)只被遍歷一次

(每個(gè)子節(jié)點(diǎn)只有一個(gè)雙親節(jié)點(diǎn))GHOST節(jié)點(diǎn)類3DsupportStaticNodesDynamicNodesUtilityClassesGHOST九個(gè)節(jié)點(diǎn)類GHOST九個(gè)節(jié)點(diǎn)類(continued)GHOST九個(gè)節(jié)點(diǎn)類(continued)場(chǎng)景圖舉例yxzHeadyxzLeftShoulderyxzRightShoulderyxzRightElbowyxzLeftElbowyxzTorsoyxzBody靜態(tài)場(chǎng)景圖–僅僅分離的和幾何節(jié)點(diǎn)作為葉子GHOST代碼舉例:

#include<stdlib.h>#include<gstBasic.h>#include<gstSphere.h>#include<gstPHANToM.h>#include<gstSeparator.h>#include<gstScene.h>Main()gstScene*scene=newgstScene;gstSeparator*root=newgstSeparator;gstSphere*sphere=newgstSphere;Sptere->setRadius(20);gstPHANToM*phantom=newgstPHANToM(``PHANToMname``);Root->addChild(phantom);Root->addChild(sphere);Scene->setRoot(root);Scene->startServoLoop();While(!scene->getDoneServoLoop())//endapplicationbycallingscene->stopServoLoop();力計(jì)算和動(dòng)力學(xué)xyz(0,0,0)應(yīng)用處理觸覺(jué)加工場(chǎng)景產(chǎn)生碰撞檢測(cè)碰撞反映觸覺(jué)狀態(tài)更新結(jié)束觸覺(jué)繪制觸覺(jué)循環(huán)30fps場(chǎng)景繪制1000Hz碰撞檢測(cè)與反應(yīng)

場(chǎng)景圖包含至少一個(gè)通過(guò)gstPHANToM表示的觸覺(jué)接口的節(jié)點(diǎn)(一個(gè)觸覺(jué)場(chǎng)景中有四個(gè)觸覺(jué)接口);碰撞檢測(cè)用gstShape

節(jié)點(diǎn)進(jìn)行;

當(dāng)碰撞檢測(cè)存在時(shí),gstPHANToM_SCP

被加入到場(chǎng)景圖中,這個(gè)節(jié)點(diǎn)應(yīng)該加入到相同雙親的下面,作為gstPHANToM

節(jié)點(diǎn)。NormalForce(dependsonspringanddampercoefficients)FrictionForce(dependsonstaticanddynamicfrictioncoefficients)

碰撞檢測(cè)下,計(jì)算力;

通過(guò)動(dòng)態(tài)效果進(jìn)行碰撞反應(yīng)

(活動(dòng)節(jié)點(diǎn),動(dòng)態(tài)固體);

如果必要通知應(yīng)用系統(tǒng)

(用戶定義的).碰撞檢測(cè)與反應(yīng)動(dòng)態(tài)節(jié)點(diǎn)

gstDynamic節(jié)點(diǎn)對(duì)于其下面的節(jié)點(diǎn)加上運(yùn)動(dòng)能力,在gstDynamic

下面的子樹(shù)表示一個(gè)物力的動(dòng)態(tài)物體;由gstPHANToM

節(jié)點(diǎn)與物體碰撞產(chǎn)生的力被加入到gstDynamic

節(jié)點(diǎn)的狀態(tài)之中;變換(旋轉(zhuǎn)、平移)總是應(yīng)用到gstDynamic

節(jié)點(diǎn);具有四個(gè)派生類:gstDial,gstButton,gstSlider

和gstRigidBody.動(dòng)態(tài)節(jié)點(diǎn)(continued)

當(dāng)一個(gè)gstDynamic

節(jié)點(diǎn)改變狀態(tài)時(shí),

一個(gè)調(diào)用用戶定義的函數(shù)的事件產(chǎn)生.

例如–如果gstButton

從pressed

狀態(tài)變?yōu)閞eleased狀態(tài)時(shí),應(yīng)用程序退出。gstButton行為舉例更新應(yīng)用xyz(0,0,0)應(yīng)用處理觸覺(jué)加工場(chǎng)景產(chǎn)生碰撞檢測(cè)碰撞反映觸覺(jué)狀態(tài)更新結(jié)束觸覺(jué)繪制觸覺(jué)循環(huán)30fps場(chǎng)景繪制1000Hz圖形及回調(diào)函數(shù)

用戶需要確定哪一個(gè)節(jié)點(diǎn)用回調(diào)函數(shù),需要發(fā)送給回調(diào)函數(shù)的信息是什么。應(yīng)用程序通過(guò)調(diào)用回調(diào)函數(shù)更新信息。這些節(jié)點(diǎn)具有調(diào)用返回的定義,并具有一個(gè)更新的狀態(tài),上次調(diào)用的updateGraphics

將把他們的當(dāng)前的狀態(tài)拷貝到所定義的數(shù)據(jù)結(jié)構(gòu)中?;卣{(diào)函數(shù)把來(lái)自GHOST觸覺(jué)過(guò)程的場(chǎng)景觸覺(jué)節(jié)點(diǎn)的信息傳遞給應(yīng)用過(guò)程。例如,用戶產(chǎn)生一個(gè)表示節(jié)點(diǎn)gstPHANToM

當(dāng)前位置的回調(diào)函數(shù),在碰撞之后就應(yīng)該改變回調(diào)gstPHANToM_SCP,這樣用戶可以看到物體上接觸點(diǎn)的位置。將用戶映射到觸覺(jué)場(chǎng)景中Phantom工作空間用戶工作空間攝像機(jī)映射到PHANToM工作臺(tái)CameraPhantomworkspacez-axisPhantomworkspaceCameraPhantomworkspacephantomSep變換MrotationphantomSep變換McameraphantomSep變換MzaxisOffset縮放攝像機(jī)和PHANToM工作空間攝像機(jī)工作空間太大攝像機(jī)工作空間太小攝像機(jī)工作空間適當(dāng)CameraPhantomworkspaceCameraPhantomworkspaceCameraPhantomworkspace縮放攝像機(jī)和PHANToM工作空間CameraDxmaxDphantomxmax規(guī)模因子依賴于從焦距到可視平截頭體(frustum)的距離從非規(guī)模的PHANTOM工作空間中心到面的邊緣的距離Dphantomxmax必須是確定的規(guī)模因子為Sfrustum=Dxmax/Dphantomxmax縮放攝像機(jī)和PHANToM工作空間

為了維持觸覺(jué)的逼真度,gstShape節(jié)點(diǎn)的物理屬性(柔性和阻尼)也需要進(jìn)行同樣的縮放;

SurfaceKspringnew=SurfaceKspringcurrent/Sfrustum

SurfaceKdampingnew=SurfaceKdampingcurrent/Sfrustum其中SurfaceKspring

和SurfaceKdamping

分別是gstShape

的柔性參數(shù)和阻尼參數(shù)本章討論的VR工具包名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模Java3D(SunMicrosystems)一般應(yīng)用no用C完成用Java編程19工具包,275類VizardToolkitandPeoplePak(WorldViz)一般應(yīng)用擴(kuò)展精靈yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom觸覺(jué)yesC++PeopleShop(BostonDynamics)軍事/民用yesC/C++3DGameStudio游戲引擎

yes

C++BDIPeopleShop/DI-Guy特點(diǎn)

提供了一種在實(shí)時(shí)場(chǎng)景中模擬人物的使用方法;

是一種任務(wù)層次的變成環(huán)境,結(jié)合基于菜單的圖形用戶接口(GUI)任務(wù)映射到預(yù)先定義好的實(shí)時(shí)插值的關(guān)聯(lián)運(yùn)動(dòng)之中;非常適合分布式交互仿真(DIS)。因?yàn)榈蛶捫枨蠛皖A(yù)測(cè);起初為軍事而設(shè)計(jì),現(xiàn)在用于民用,例如,事件回放、建筑漫游、仿真驅(qū)動(dòng)、警察訓(xùn)練。

連接的對(duì)象庫(kù),可以運(yùn)行于SGI,IntelPCs,和其它平臺(tái);

庫(kù)具有實(shí)時(shí)動(dòng)作引擎模塊、圖形顯示模塊、運(yùn)動(dòng)數(shù)據(jù)、3D圖形模型、紋理和用于DIS的網(wǎng)絡(luò)接口;

運(yùn)行于OpenGL,Direct3D,Sense8WTK,MakStealth和其它軟件包;

建議的硬件是Intel>200MHz,64MBRam,和圖形加速器、(OpenGL,OpenGVSorDirect3D).BDIPeopleShop/DI-Guy特點(diǎn)-續(xù)PeopleShop初始化場(chǎng)景幾何定義傳感器定義行為定義人物路徑定義網(wǎng)絡(luò)PeopleShop初始化場(chǎng)景幾何定義傳感器定義行為定義人物路徑定義網(wǎng)絡(luò)PeopleShop人物

具有54自由度(DOF),11連接點(diǎn)(links)的關(guān)節(jié)多邊形結(jié)構(gòu);

車也作為人物;不同人物具有不同的動(dòng)作;每一種類型人物具有用戶選擇的外觀(例如,人物的車可以是坦克或警車)人物使用紋理增加真實(shí)感,并減少多邊形的數(shù)量。人物選擇人物類型決定可以接受的動(dòng)作(可以選擇的菜單)外觀選擇Bob_shortsJoe_blueBridget_skirtDiane_teen人物外觀(可選的菜單)BDI軟件包Characterlevel-of-detailsegmentationbasedondistancetovirtualcameraimprovesreal-timeperformance(uptoabout100characterscanbeinascene)38polygons2500polygonsSupplementalbdi.DI-Guy-LOD.mpgPeopleShop初始化場(chǎng)景幾何定義傳感器定義行為定義人物路徑定義網(wǎng)絡(luò)PeopleShop指定路徑路徑途中點(diǎn)SlopeAdjuster初始路徑擴(kuò)展路徑加入的途中點(diǎn)BDI軟件包ActionbeadEndbeadStackedactionbeadsLastactionbead編輯行為VC6.6onbookCDVC6.5onbookCDPeopleShop初始化場(chǎng)景幾何定義傳感器定義行為定義人物路徑定義網(wǎng)絡(luò)BDI軟件包傳感器邊緣當(dāng)士兵進(jìn)入到傳感器區(qū)域時(shí),系統(tǒng)會(huì)發(fā)現(xiàn)察覺(jué)-這會(huì)觸發(fā)士兵B(niǎo)向A開(kāi)槍SoldierASoldierBPeopleShop傳感器傳感器是用戶定義的體,在其中當(dāng)人進(jìn)入時(shí)被發(fā)覺(jué)(PeopleShopUser’sManual)SensorboundarySupplementalbdi.farmhouse.mpgPeopleShop初始化場(chǎng)景幾何定義傳感器定義行為定義人物路徑定義網(wǎng)絡(luò)PeopleShop行為

行為可以反射(基于傳感器接收的信號(hào));

行為也可以用決策鍵(decisionbeads)給出;決策鍵(decisionbeads)可以放置在人物的路徑上(紅顏色);決策鍵(decisionbeads)

的兩個(gè)參數(shù)是距離distance和長(zhǎng)度length;距離distance

表明從決策鍵起始點(diǎn)的距離;長(zhǎng)度length表明決策鍵活動(dòng)區(qū)的起始點(diǎn)距離決策可以轉(zhuǎn)換為腳本script:BDI軟件包決策語(yǔ)句(IF/THEN/ELSE)PeopleShop實(shí)時(shí)性PeolpeShop初始化交互訓(xùn)練沉浸訓(xùn)練想定可視化用戶用戶用戶PeopleShop實(shí)時(shí)性PeolpeShop初始化交互訓(xùn)練沉浸訓(xùn)練想定可視化用戶用戶用戶BDIPeopleShop軟件包用戶使用游戲桿或鼠標(biāo)與仿真實(shí)時(shí)交互,菜單限制控制和沉浸VC6.7PeopleShop實(shí)時(shí)性PeolpeShop初始化交互訓(xùn)練沉浸訓(xùn)練想定可視化用戶用戶用戶BDIPeopleShop–實(shí)時(shí)模式用戶使用跟蹤器和傳感器與仿真實(shí)時(shí)交互Omni-directionaltreadmillSensorizedweaponPeopleShop初始化場(chǎng)景幾何定義傳感器定義行為定義人物路徑定義網(wǎng)絡(luò)PeopleShop網(wǎng)絡(luò)

在DIS環(huán)境中修改人物的外形需要更高的帶寬;車具有較小的自由度,而具有40個(gè)關(guān)節(jié)的人物以20Hz更新就需要800包/秒;人們僅僅在任務(wù)級(jí)(動(dòng)作、位置、速度)上更新,而不更新每個(gè)節(jié)點(diǎn)。這樣產(chǎn)生平滑仿真需要大約2包/秒;對(duì)于參與者數(shù)量多的仿真效果很好,例如軍事訓(xùn)練;使用實(shí)況定位(livereckoning)和推算定位(deadreckoning)

BDI軟件包用推算預(yù)測(cè)的DISBDI軟件包使用實(shí)況定位的DIS人在循環(huán)中DI-GuymodelDI-Guymodel任務(wù)級(jí)的改變(動(dòng)作,方向,速度)(fromKoechlingetal.,1997)PeopleShop“TopGun”(courtesyBostonDynamicsInc.)本章討論的VR工具包名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模Java3D(SunMicrosystems)一般應(yīng)用no用C完成用Java編程19工具包,275類VizardToolkitandPeoplePak(WorldViz)一般應(yīng)用擴(kuò)展精靈yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom觸覺(jué)yesC++PeopleShop(BostonDynamics)軍事/民用yesC/C++3DGameStudio游戲引擎yesC++3DGameStudio人物

使用A6游戲引擎,提供了簡(jiǎn)單的快速的編程構(gòu)造虛擬世界的方法;一種任務(wù)級(jí)編程環(huán)境和基于菜單的圖形接口(GUI)的結(jié)合,腳本編程更靈活;

適合多用戶仿真通過(guò)局域網(wǎng)(LANs)和廣域網(wǎng)(WAN)(TCP/IP及UDP);最初為游戲設(shè)計(jì),現(xiàn)在擴(kuò)展為VR編程,性能好,價(jià)格可以接受($500)

3DGameStudio人物

3D引擎允許多用戶(多個(gè)虛擬像機(jī)),建立在DirectX9圖形流水線;具有剪切的優(yōu)化

;

深入的通過(guò)幾何LOD和紋理細(xì)節(jié)的優(yōu)化;

表面可以變形,物體可以是動(dòng)態(tài)的

人物動(dòng)畫(huà)通過(guò)骨骼框架表示。3DGameStudio幾何的產(chǎn)生

我們可以導(dǎo)入大的模型庫(kù),或用另外的建模軟件(3DStudioMax)建好的模型

物體可以用WorldEditor(WED)3Deditor產(chǎn)生3DGameStudio紋理

凸凹不平紋理

光照映射和多紋理3DGameStudio人物動(dòng)畫(huà)

動(dòng)畫(huà)可以導(dǎo)入由Maya產(chǎn)生的,或者人物可以用modeleditor創(chuàng)建按照動(dòng)作定義的幀物理與聲音引擎

具有碰撞檢測(cè)功能,建立在多邊形級(jí)別上,及物理行為重力、彈性和摩擦力

Cscript–C++的簡(jiǎn)單版本,用于產(chǎn)生物理行為,同過(guò)函數(shù)進(jìn)行I/O編程(鍵盤、鼠標(biāo))

靜態(tài)、動(dòng)態(tài)3D聲音資源,可編程3DGameStudio初始化3DGameStudio初始化3DgameStudio游戲編程舉例Moreat3DGameStudioOverviewPurposeQuickandeasycreationofinteractiverealtimeapplicationsSuitefor2Dand3Dmultimediaprojects,especiallycomputergamesAdevelopmentsystem3Dengine2DenginePhysicsengineLeveldesignModelandterraineditorsC-ScriptprogramminglanguageHugelibrariesof3DobjectsandartworkWhatcanbemade1stpersongames3rdpersongamesroleplayinggamesflightsimulatorssportsgamesvirtualrealityoranyother2Dor3Dprojectyoucanimagine用3DGameStudio開(kāi)發(fā)的游戲ComponentsLevel/WorldEditer–WEDObjects,Textures,Lights,Sounds…ModelEditer–MEDModel,TerrainScriptEditer–SEDC-ScriptWorkflowandComponents

LevelEditer–WED

ModelEditer–MED

ScriptEditer–SED

Demo-techdemo.wmp3DGameStudioC-ScriptSyntaxSimilartoC/C++VeryLikeJavaScriptComment:/*----*///----Statementendedby“;”FunctionsandobjectsVariablesOnlyonetype:varAsC/C++types:int,float,double,long,short,char,boolean...Syntax:varname;varname=number;Examples:vara;varb=1;varc=2.3;ArraySyntax:varname[n];varname[n]=value_1,value_2,...value_n;Example:vara[5]=0,10,20,30,40;StringsSyntaxstringname; (variable

length)stringname[n]; (fixedlength)stringname="characters";stringname=<characters>;Examplestringhello="HelloWorld!";stringelements[10];Objectsentityfonttextsoundpanelbmapmaterial……PointersPointersstorereferencestoobjectsorfunctionsentity*name;

entity*name=entity;string*name;

string*name=string;function*name;

function*name=function;FunctionsSyntax:functionname(parameter1,parameter2...);var=functionname(parameter1,parameter2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論