虛擬現(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è),還剩277頁(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ù)VR編程技術(shù)1VRToolkitsVRToolkits2虛擬現(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í)編程工具包3虛擬現(xiàn)實(shí)工具包可分為:是否基于文本或圖形化編程;所使用的語(yǔ)言和軟件庫(kù)大小的類型;支持I/O設(shè)備的類型;提供繪制的類型;一般目的還是特殊應(yīng)用;是否專有(更多的功能,更好地記錄文檔)或公共領(lǐng)域(免費(fèi),少量文檔和功能)虛擬現(xiàn)實(shí)工具包可分為:4在九十年代的虛擬現(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)),并支持平面著色,以保證快速繪制。在九十年代的虛擬現(xiàn)實(shí)工具包5Rend386場(chǎng)景Rend386場(chǎng)景6本章討論的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++本章討論的VR軟件工具包名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模7場(chǎng)景圖:是物體的一個(gè)分層組織(可見(jiàn)或不可見(jiàn))在虛擬世界中(或“宇宙”);場(chǎng)景圖用樹狀結(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)景圖:ABCEDJFGHI根節(jié)點(diǎn)內(nèi)部節(jié)點(diǎn)外部節(jié)點(diǎn)8手掌場(chǎng)景球場(chǎng)景圖表明球是場(chǎng)景的孩子節(jié)點(diǎn)場(chǎng)景圖不是靜態(tài)的手掌場(chǎng)景球場(chǎng)景圖表明球是場(chǎng)景的孩子節(jié)點(diǎn)場(chǎng)景圖不是靜態(tài)的9手掌場(chǎng)景球場(chǎng)景已經(jīng)被修改,球現(xiàn)在是手掌的孩子VC6.1onbookCD手掌場(chǎng)景球場(chǎng)景已經(jīng)被修改,球現(xiàn)在是手掌的孩子VC6.110建模階段模型幾何設(shè)置定義并連接傳感器定義動(dòng)作函數(shù)定義場(chǎng)景圖定義網(wǎng)絡(luò)建模階段模型幾何設(shè)置定義并連接傳感器定義動(dòng)作函數(shù)定義網(wǎng)絡(luò)11實(shí)時(shí)循環(huán)開(kāi)始仿真更新物體(從傳感器和智能行為)繪制場(chǎng)景(圖形,聲音,觸覺(jué))讀傳感器數(shù)據(jù)退出仿真每一幀循環(huán)實(shí)時(shí)循環(huán)開(kāi)始仿真更新物體繪制場(chǎng)景退出仿真每一幀循環(huán)12名稱應(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軟件工具包名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模Java313Java及Java3DJava面向?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)Java及Java3D14Java3D初始化建模幾何建立傳感器定義行為定義場(chǎng)景圖網(wǎng)絡(luò)Java3D建模幾何建立傳感器定義行為網(wǎng)絡(luò)15Java3D初始化建模幾何建立傳感器定義行為定義場(chǎng)景圖網(wǎng)絡(luò)Java3D建模幾何建立傳感器定義行為網(wǎng)絡(luò)16Java3D幾何:幾何可以從各種文件格式導(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幾何:導(dǎo)入幾何幾何圖元:定制幾何:17Java3D物體外觀:幾何的外觀用外觀對(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物體外觀:Mat=newMateria18Java3D初始化建模幾何建立傳感器定義行為定義場(chǎng)景圖網(wǎng)絡(luò)Java3D初始化建模幾何建立傳感器定義行為網(wǎng)絡(luò)19Java3D節(jié)點(diǎn)類型:節(jié)點(diǎn)組葉子樹枝組變換組選擇背景行為霧光照3D形狀Compilablesub-graphTransform+childnodesSelectwhichofthechildrenarevisible(usefulforLOD)Universebackground.CanbeacolororanimageActionstobeperformedbythesimulationFognodeLightnode.Specialderivedclasses:AmbientLight,PointLight,DirectionalLightGeometry+Appearance+BoundingBoxJava3D節(jié)點(diǎn)類型:節(jié)點(diǎn)組葉子樹枝組變換組選擇背景20Java3D場(chǎng)景圖節(jié)點(diǎn)Java3D場(chǎng)景圖節(jié)點(diǎn)21全局根正方體球手拇指食指中指無(wú)名指小拇指全局根正方體球手拇指食指中指無(wú)名指小拇指22SceneSc=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)入模型的子零件部分SceneSc=loader.load(“Hand.w23Palm=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)入:

Palm=loader.load("Palm.wrl")24Java3D虛擬手的層次:

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虛擬手的層次:Palm.addchild(25Java3D初始化建模幾何建立傳感器定義行為定義場(chǎng)景圖網(wǎng)絡(luò)Java3D初始化建模幾何建立傳感器定義行為網(wǎng)絡(luò)26Java3D中的輸入設(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中的輸入設(shè)備:27Java3D通用傳感器接口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通用傳感器接口classPhysicalEn28Java3D初始化建模幾何建立傳感器啟動(dòng)場(chǎng)景定義場(chǎng)景圖網(wǎng)絡(luò)Java3D初始化建模幾何建立傳感器啟動(dòng)場(chǎng)景網(wǎng)絡(luò)29Java3D–啟動(dòng)仿真

Java3D提供控制仿真的Behavior對(duì)象一個(gè)Behavior對(duì)象包含一些列仿真中接受的動(dòng)作一個(gè)刺激由WakeupCondition對(duì)象發(fā)出

一些激活的類:

WakeupOnCollisionEntryWakeupOnCollisionExitWakeupOnCollisionMovementWakeupOnElapsedFramesWakeupOnElapsedTimeWakeupOnSensorEntryWakeupOnSensorExitWakeupOnViewPlatformEntryWakeupOnViewPlatformExitJava3D–啟動(dòng)仿真30Java3D–行為(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–行為(Behavior)的使用Wakeu31Java3D的View對(duì)象描述仿真中的圖形顯示,和用戶位置(由跟蹤器給出的)View模型提供了由ViewPlatform節(jié)點(diǎn)提供的虛擬世界和用于交互的I/O設(shè)備的分離;一些被跟蹤的用戶可以映射到虛擬世界的相同的位置;這對(duì)應(yīng)幾個(gè)Views和一個(gè)ViewPlatformJava3D的View對(duì)象描述仿真中的圖形顯示,和用戶位32相反,一個(gè)用戶能夠控制幾個(gè)ViewPlatforms;這些對(duì)應(yīng)幾個(gè)Views,因?yàn)閂iewPlatform有自己的View;這樣一個(gè)用戶可以有幾個(gè)Views與虛擬世界對(duì)應(yīng),它們之間可以通訊.Viewplatform1Viewplatform2相反,一個(gè)用戶能夠控制幾個(gè)ViewPlatforms;V33Java3D初始化建模幾何建立傳感器定義行為定義場(chǎng)景圖網(wǎng)絡(luò)Java3D初始化建模幾何建立傳感器定義行為網(wǎng)絡(luò)34Java3DsimulationJavaApplicationJava3DsimulationJavaAppletJava3DsimulationJavaApplicationJava3D–網(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)行。Java3DsimulationJavaAppletServerJava3DsimulationJavaApplicat35Java3D與VRMLVRML提供了在虛擬世界中定義對(duì)象并啟動(dòng)對(duì)象的可能圖形用戶接口(APIs),例如Java3D或WTK從VRML文件載入模型的靜態(tài)信息,而忽略了傳感器、路徑和腳本等信息;Java3D與VRML36第6章虛擬現(xiàn)實(shí)的編程技術(shù)課件37Java3D和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的比較Java3d(版本1.3b38Java3D–WTK比較實(shí)驗(yàn)中用的圖形場(chǎng)景Java3D–WTK比較實(shí)驗(yàn)中用的圖形場(chǎng)景39Java3D與WTK比較

用于判斷性能的仿真變量:圖形模式(非立體的,立體的),繪制模式(線框,Gouraud,紋理);場(chǎng)景復(fù)雜度(多邊形數(shù)目5,000–50,000);光照(光源數(shù)目1,5,10);交互(無(wú)交互,手輸入,力反饋)Java3D與WTK比較40Java3D–WTK比較Java3d平均比WTK快,Java3D–WTK比較Java3d平均比WTK快,41Java3D–WTK比較Java3d版本3.1Beta1比WTKRelease9具有較小延遲Java3D–WTK比較Java3d版本3.1Be42但Java3d在場(chǎng)景繪制時(shí)間上變化較快但Java3d在場(chǎng)景繪制時(shí)間上變化較快43WTK不會(huì)偶爾出現(xiàn)峰值,不會(huì)出現(xiàn)偶爾的凍結(jié)WTK不會(huì)偶爾出現(xiàn)峰值,不會(huì)出現(xiàn)偶爾的凍結(jié)44本章討論的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++本章討論的VR工具包名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模45Vizard特征:使用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è)物體Vizard特征:使用Python,它是可升級(jí)和跨平臺(tái)的46Workbench的使用:圖標(biāo)菜單用鼠標(biāo)開(kāi)發(fā)場(chǎng)景導(dǎo)入物體Workbench的使用:圖標(biāo)菜單用鼠標(biāo)開(kāi)發(fā)場(chǎng)景導(dǎo)入物47importviz

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

importhand

viz.go(48

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多紋理:

importviz

viz.go()

logo=49Vizard仿真服務(wù)器:多于一個(gè)用戶存在同一個(gè)環(huán)境中,每個(gè)用戶需要運(yùn)行Vizard.Aftertheworldissetup當(dāng)虛擬世界建立后,每個(gè)用戶必須建立兩個(gè)“mailboxes”.一個(gè)接收來(lái)自其它用戶的信息。User2User1PositionisthepropertyBallistheobjectactioninformationVizard仿真服務(wù)器:User2User1Posit50Vizard網(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ò)舉例:Importviz51Vizard網(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)

Vizard網(wǎng)絡(luò)舉例:#Thisfunctionwill52本章討論的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++本章討論的VR工具包名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模53PHANToM的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)PHANToMDesktopmodelPHANToM的GHOST軟件包提供真實(shí)感的觸覺(jué)交互;54GHOST–應(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–應(yīng)用交互xyz(0,0,0)應(yīng)用處理觸覺(jué)加55GHOST觸覺(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)景繪制1000HzGHOST觸覺(jué)場(chǎng)景圖xyz(0,0,0)應(yīng)用處理觸覺(jué)加工場(chǎng)56觸覺(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))觸覺(jué)場(chǎng)景圖提供一種構(gòu)造觸覺(jué)場(chǎng)景的結(jié)構(gòu)化方法,包括幾何和動(dòng)態(tài)57GHOST節(jié)點(diǎn)類3DsupportStaticNodesDynamicNodesUtilityClassesGHOST節(jié)點(diǎn)類3Dsupport58GHOST九個(gè)節(jié)點(diǎn)類GHOST九個(gè)節(jié)點(diǎn)類59GHOST九個(gè)節(jié)點(diǎn)類(continued)GHOST九個(gè)節(jié)點(diǎn)類(continued)60GHOST九個(gè)節(jié)點(diǎn)類(continued)GHOST九個(gè)節(jié)點(diǎn)類(continued)61場(chǎng)景圖舉例yxzHeadyxzLeftShoulderyxzRightShoulderyxzRightElbowyxzLeftElbowyxzTorsoyxzBody場(chǎng)景圖舉例yxzHeadyxzLeftShouldery62靜態(tài)場(chǎng)景圖–僅僅分離的和幾何節(jié)點(diǎn)作為葉子靜態(tài)場(chǎng)景圖–僅僅分離的和幾何節(jié)點(diǎn)作為葉子63GHOST代碼舉例:

#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();GHOST代碼舉例:#include<stdlib.64力計(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力計(jì)算和動(dòng)力學(xué)xyz(0,0,0)應(yīng)用處理觸覺(jué)加工場(chǎng)景產(chǎn)生碰65碰撞檢測(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)。碰撞檢測(cè)與反應(yīng)場(chǎng)景圖包含至少一個(gè)通過(guò)gstPHANToM表66NormalForce(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)NormalForce67動(dòng)態(tài)節(jié)點(diǎn)

gstDynamic節(jié)點(diǎn)對(duì)于其下面的節(jié)點(diǎn)加上運(yùn)動(dòng)能力,在gstDynamic下面的子樹表示一個(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)gstDynamic節(jié)點(diǎn)對(duì)于其下面的節(jié)點(diǎn)加上運(yùn)動(dòng)能68動(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行為舉例動(dòng)態(tài)節(jié)點(diǎn)(continued)當(dāng)一個(gè)gstDynami69更新應(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更新應(yīng)用xyz(0,0,0)應(yīng)用處理觸覺(jué)加工場(chǎng)景產(chǎn)生碰撞檢70圖形及回調(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)的位置。圖形及回調(diào)函數(shù)用戶需要確定哪一個(gè)節(jié)點(diǎn)用回調(diào)函數(shù),需要發(fā)送給71將用戶映射到觸覺(jué)場(chǎng)景中Phantom工作空間用戶工作空間將用戶映射到觸覺(jué)場(chǎng)景中Phantom工作空間用戶工作空72攝像機(jī)映射到PHANToM工作臺(tái)CameraPhantomworkspacez-axisPhantomworkspaceCameraPhantomworkspacephantomSep變換MrotationphantomSep變換McameraphantomSep變換MzaxisOffset攝像機(jī)映射到PHANToM工作臺(tái)CameraPhantom73縮放攝像機(jī)和PHANToM工作空間攝像機(jī)工作空間太大攝像機(jī)工作空間太小攝像機(jī)工作空間適當(dāng)CameraPhantomworkspaceCameraPhantomworkspaceCameraPhantomworkspace縮放攝像機(jī)和PHANToM工作空間攝像機(jī)工作攝像機(jī)工作攝74縮放攝像機(jī)和PHANToM工作空間CameraDxmaxDphantomxmax規(guī)模因子依賴于從焦距到可視平截頭體(frustum)的距離從非規(guī)模的PHANTOM工作空間中心到面的邊緣的距離Dphantomxmax必須是確定的規(guī)模因子為Sfrustum=Dxmax/Dphantomxmax縮放攝像機(jī)和PHANToM工作空間CameraDxmax75縮放攝像機(jī)和PHANToM工作空間為了維持觸覺(jué)的逼真度,gstShape節(jié)點(diǎn)的物理屬性(柔性和阻尼)也需要進(jìn)行同樣的縮放;

SurfaceKspringnew=SurfaceKspringcurrent/Sfrustum

SurfaceKdampingnew=SurfaceKdampingcurrent/Sfrustum其中SurfaceKspring和SurfaceKdamping分別是gstShape的柔性參數(shù)和阻尼參數(shù)縮放攝像機(jī)和PHANToM工作空間為了維持觸覺(jué)的逼真度76本章討論的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++本章討論的VR工具包名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模77BDIPeopleShop/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)練。BDIPeopleShop/DI-Guy特點(diǎn)提供了一種78連接的對(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ù)連接的對(duì)象庫(kù),可以運(yùn)行于SGI,IntelPCs,79PeopleShop初始化場(chǎng)景幾何定義傳感器定義行為定義人物路徑定義網(wǎng)絡(luò)PeopleShop場(chǎng)景幾何定義傳感器定義行為定義網(wǎng)絡(luò)80PeopleShop初始化場(chǎng)景幾何定義傳感器定義行為定義人物路徑定義網(wǎng)絡(luò)PeopleShop場(chǎng)景幾何定義傳感器定義行為定義網(wǎng)絡(luò)81PeopleShop人物具有54自由度(DOF),11連接點(diǎn)(links)的關(guān)節(jié)多邊形結(jié)構(gòu);車也作為人物;不同人物具有不同的動(dòng)作;每一種類型人物具有用戶選擇的外觀(例如,人物的車可以是坦克或警車)人物使用紋理增加真實(shí)感,并減少多邊形的數(shù)量。PeopleShop人物具有54自由度(DOF),182人物選擇人物類型決定可以接受的動(dòng)作(可以選擇的菜單)人物選擇人物類型決定可以接受的動(dòng)作(可以選擇的菜單)83外觀選擇Bob_shortsJoe_blueBridget_skirtDiane_teen人物外觀(可選的菜單)外觀選擇Bob_shorts84BDI軟件包Characterlevel-of-detailsegmentationbasedondistancetovirtualcameraimprovesreal-timeperformance(uptoabout100characterscanbeinascene)38polygons2500polygonsSupplementalbdi.DI-Guy-LOD.mpgBDI軟件包Characterlevel-of-deta85PeopleShop初始化場(chǎng)景幾何定義傳感器定義行為定義人物路徑定義網(wǎng)絡(luò)PeopleShop場(chǎng)景幾何定義傳感器定義行為定義網(wǎng)絡(luò)86PeopleShop指定路徑路徑途中點(diǎn)SlopeAdjuster初始路徑擴(kuò)展路徑加入的途中點(diǎn)PeopleShop指定路徑路徑途中點(diǎn)Slope初始87BDI軟件包ActionbeadEndbeadStackedactionbeadsLastactionbeadBDI軟件包ActionEnd88編輯行為VC6.6onbookCD編輯行為VC6.689VC6.5onbookCDVC6.590PeopleShop初始化場(chǎng)景幾何定義傳感器定義行為定義人物路徑定義網(wǎng)絡(luò)PeopleShop場(chǎng)景幾何定義傳感器定義行為定義網(wǎng)絡(luò)91BDI軟件包傳感器邊緣當(dāng)士兵進(jìn)入到傳感器區(qū)域時(shí),系統(tǒng)會(huì)發(fā)現(xiàn)察覺(jué)-這會(huì)觸發(fā)士兵B向A開(kāi)槍SoldierASoldierBBDI軟件包傳感器邊緣當(dāng)士兵進(jìn)入到傳感器區(qū)域時(shí),系統(tǒng)會(huì)發(fā)現(xiàn)92PeopleShop傳感器傳感器是用戶定義的體,在其中當(dāng)人進(jìn)入時(shí)被發(fā)覺(jué)(PeopleShopUser’sManual)SensorboundarySupplementalbdi.farmhouse.mpgPeopleShop傳感器傳感器是用戶定義的體,在其中當(dāng)人93PeopleShop初始化場(chǎng)景幾何定義傳感器定義行為定義人物路徑定義網(wǎng)絡(luò)PeopleShop場(chǎng)景幾何定義傳感器定義行為定義網(wǎng)絡(luò)94PeopleShop行為

行為可以反射(基于傳感器接收的信號(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:PeopleShop行為行為可以反射(基于傳感器接收95BDI軟件包決策語(yǔ)句(IF/THEN/ELSE)BDI軟件包決策語(yǔ)句(IF/THEN/ELSE)96PeopleShop實(shí)時(shí)性PeolpeShop初始化交互訓(xùn)練沉浸訓(xùn)練想定可視化用戶用戶用戶PeopleShop實(shí)時(shí)性交互訓(xùn)練沉浸訓(xùn)練想定可視化用戶97PeopleShop實(shí)時(shí)性PeolpeShop初始化交互訓(xùn)練沉浸訓(xùn)練想定可視化用戶用戶用戶PeopleShop實(shí)時(shí)性交互訓(xùn)練沉浸訓(xùn)練想定可視化用戶用98BDIPeopleShop軟件包用戶使用游戲桿或鼠標(biāo)與仿真實(shí)時(shí)交互,菜單限制控制和沉浸VC6.7BDIPeopleShop軟件包用戶使用游戲桿或鼠標(biāo)與仿99PeopleShop實(shí)時(shí)性PeolpeShop初始化交互訓(xùn)練沉浸訓(xùn)練想定可視化用戶用戶用戶PeopleShop實(shí)時(shí)性交互訓(xùn)練沉浸訓(xùn)練想定可視化用戶100BDIPeopleShop–實(shí)時(shí)模式用戶使用跟蹤器和傳感器與仿真實(shí)時(shí)交互Omni-directionaltreadmillSensorizedweaponBDIPeopleShop–實(shí)時(shí)模式用戶使用跟蹤器和傳101PeopleShop初始化場(chǎng)景幾何定義傳感器定義行為定義人物路徑定義網(wǎng)絡(luò)PeopleShop場(chǎng)景幾何定義傳感器定義行為定義網(wǎng)絡(luò)102PeopleShop網(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)

PeopleShop網(wǎng)絡(luò)在DIS環(huán)境中修改人物的外103BDI軟件包用推算預(yù)測(cè)的DISBDI軟件包用推算預(yù)測(cè)的DIS104BDI軟件包使用實(shí)況定位的DIS人在循環(huán)中DI-GuymodelDI-Guymodel任務(wù)級(jí)的改變(動(dòng)作,方向,速度)(fromKoechlingetal.,1997)BDI軟件包使用實(shí)況定位的DIS人在循環(huán)中DI-Guy105PeopleShop“TopGun”(courtesyBostonDynamicsInc.)PeopleShop“TopGun”106本章討論的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++本章討論的VR工具包名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模1073DGameStudio人物使用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人物使用A6游戲引擎,提供1083DGameStudio人物3D引擎允許多用戶(多個(gè)虛擬像機(jī)),建立在DirectX9圖形流水線;具有剪切的優(yōu)化;深入的通過(guò)幾何LOD和紋理細(xì)節(jié)的優(yōu)化;表面可以變形,物體可以是動(dòng)態(tài)的人物動(dòng)畫通過(guò)骨骼框架表示。3DGameStudio人物3D引擎允許多用戶(1093DGameStudio幾何的產(chǎn)生我們可以導(dǎo)入大的模型庫(kù),或用另外的建模軟件(3DStudioMax)建好的模型物體可以用WorldEditor(WED)3Deditor產(chǎn)生3DGameStudio幾何的產(chǎn)生我們可以導(dǎo)入大的模1103DGameStudio紋理凸凹不平紋理光照映射和多紋理3DGameStudio紋理凸凹不平紋理光照映射和1113DGameStudio人物動(dòng)畫動(dòng)畫可以導(dǎo)入由Maya產(chǎn)生的,或者人物可以用modeleditor創(chuàng)建按照動(dòng)作定義的幀3DGameStudio人物動(dòng)畫動(dòng)畫可以導(dǎo)入由May112物理與聲音引擎具有碰撞檢測(cè)功能,建立在多邊形級(jí)別上,及物理行為重力、彈性和摩擦力

Cscript–C++的簡(jiǎn)單版本,用于產(chǎn)生物理行為,同過(guò)函數(shù)進(jìn)行I/O編程(鍵盤、鼠標(biāo))靜態(tài)、動(dòng)態(tài)3D聲音資源,可編程物理與聲音引擎具有碰撞檢測(cè)功能,建立在多邊形級(jí)別上,及物理1133DGameStudio初始化3DGameStudio初始化1143DGameStudio初始化3DgameStudio游戲編程舉例3DGameStudio初始化3DgameStudi1153DGameStudioOverview3DGameStudioOverview116PurposeQuickandeasycreationofinteractiverealtimeapplicationsSuitefor2Dand3Dmultimediaprojects,especiallycomputergamesPurposeQuickandeasycreation117Adevelopmentsystem3Dengine2DenginePhysicsengineLeveldesignModelandterraineditorsC-ScriptprogramminglanguageHugelibrariesof3DobjectsandartworkAdevelopmentsystem3Dengine118Whatcanbemade1stpersongames3rdpersongamesroleplayinggamesflightsimulatorssportsgamesvirtualrealityoranyother2Dor3DprojectyoucanimagineWhatcanbemade1stpersongam119用3DGameStudio開(kāi)發(fā)的游戲用3DGameStudio開(kāi)發(fā)的游戲120ComponentsLevel/WorldEditer–WEDObjects,Textures,Lights,Sounds…ModelEditer–MEDModel,TerrainScriptEditer–SEDC-ScriptComponentsLevel/WorldEditer121WorkflowandComponents

WorkflowandComponents122LevelEditer–WED

LevelEditer–WED123ModelEditer–MED

ModelEditer–MED124ScriptEditer–SED

ScriptEditer–SED125Demo-techdemo.wmpDemo-techdemo.wmp1263DGameStudioC-Script3DGameStudioC-Script127SyntaxSimilartoC/C++VeryLikeJavaScriptComment:/*----*///----Statementendedby“;”FunctionsandobjectsSyntaxSimilartoC/C++128VariablesOnlyonetype:varAsC/C++types:int,float,double,long,short,char,boolean...Syntax:varname;varname=number;Examples:vara;varb=1;varc=2.3;VariablesOnlyonetype:var129ArraySyntax:varname[n];varname[n]=value_1,value_2,...value_n;Example:vara[5]=0,10,20,30,40;ArraySyntax:130StringsSyntaxstringname; (variable

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

entity*name=entity;string*name;

string*name=string;function*name;

function*name=function;PointersPointersstorerefere133FunctionsSyntax:functionname(parameter1,parameter2...);var=functionname(parameter1,parameter2...);Example:functionaverage(a,b)

{

return((a+b)/2);

}//iscalledthisway:

x=average(123,456);

FunctionsSyntax:134ControlLogicif-elseif(expression){instructions...}if(expression){instructions...} else{instructions...}if(((x+3)<9)||(y==0)){z=10;}

else{z=5;}whilewhile(expression){instructions...}while(x<100){x+=1;}ControlLogicif-else135EntityActionsCanbesetasbehaviorsofentitiesinWEDPropertiesentity.x entity.pan

entity.y entity.tilt

entity.z entity.rollExample:actionentity_rotate

{

while(1)

{

my.pan+=3;

wait(1); //wait1frame

}

}EntityActionsCanbesetasb136ScriptExample–DoorMakeadoorentityBuildalevelusingthedoorjustmadeAddascriptfileandopenitAddanaction“door1”Setdoor’sbehavioras“door1”CompileandrunScriptExample–DoorMakeado137FirstActionsounddoor_open=<door_op.wav>;sounddoor_close=<door_cl.wav>;actiondoor1{while(1){ent_playsound(my,door_open,66);while(my.pan<90){my.pan+=3*time;//rotatecounterclockwisewait(1);}sleep(1);ent_playsound(my,door_close,66);while(my.pan>0){my.pan-=3*time;//rotateclockwisewait(1);}sleep(1);}}FirstActionsounddoor_open=138InteractiveActionvarindicator=0;varmy_position[5];functionscan_me{my_position[0]=CAMERA.X;my_position[1]=CAMERA.Y;my_position[2]=CAMERA.Z;my_position[3]=CAMERA.PAN;my_position[4]=CAMERA.TILT;temp.PAN=120;temp.TILT=180;temp.Z=300;//scanrange-300Quantsindicator=1;//ScantoopenthedoorSCAN_ENTITY(my_position,temp);}ON_SPACE=scan_me;InteractiveActionvarindicato139InteractiveActionfunctiondoor_event{if(indicator!=1){return;}//mustberightkindofscanif(my.pan<90)//ifdoorwasclosed,openit{ent_playsound(MY,door_open,66);while(my.pan<90){my.pan+=3*TIME;//rotateclockwisewait(1);}my.pan=90;}

InteractiveActionfunctiondoo140else//otherwisecloseit{ent_playsound(MY,door_close,66);while(my.pan>0){my.pan-=3*TIME;//rotatecounterclockwisewait(1);}my.pan=0;}}actiondoor2{my.event=door_event;my.enable_scan=on;//makedoorsensitiveforscanning}else//otherwisecloseit141

VR編程技術(shù)VR編程技術(shù)142VRToolkitsVRToolkits143虛擬現(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í)編程工具包144虛擬現(xiàn)實(shí)工具包可分為:是否基于文本或圖形化編程;所使用的語(yǔ)言和軟件庫(kù)大小的類型;支持I/O設(shè)備的類型;提供繪制的類型;一般目的還是特殊應(yīng)用;是否專有(更多的功能,更好地記錄文檔)或公共領(lǐng)域(免費(fèi),少量文檔和功能)虛擬現(xiàn)實(shí)工具包可分為:145在九十年代的虛擬現(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)),并支持平面著色,以保證快速繪制。在九十年代的虛擬現(xiàn)實(shí)工具包146Rend386場(chǎng)景Rend386場(chǎng)景147本章討論的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++本章討論的VR軟件工具包名稱應(yīng)用專有語(yǔ)言庫(kù)規(guī)模148場(chǎng)景圖:是物體的一個(gè)分層組織(可見(jiàn)或不可見(jiàn))在虛擬世界中(或“宇宙”);場(chǎng)景圖用樹狀結(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)景圖:ABCEDJFGHI根節(jié)點(diǎn)內(nèi)部節(jié)點(diǎn)外部節(jié)點(diǎn)149手掌場(chǎng)景球場(chǎng)景圖表明球是場(chǎng)景的孩子節(jié)點(diǎn)場(chǎng)景圖不是靜態(tài)的手掌場(chǎng)景球場(chǎng)景圖表明球是場(chǎng)景的孩子節(jié)點(diǎn)場(chǎng)景圖不是靜態(tài)的150手掌場(chǎng)景球場(chǎng)景已經(jīng)被修改,球現(xiàn)在是手掌的孩子VC6.1onbookCD手掌場(chǎng)景球場(chǎng)景已經(jīng)被修改,球現(xiàn)在是手掌的孩子VC6.1151建模

溫馨提示

  • 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)論