版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
VR編程技術(shù)VRToolkits虛擬現(xiàn)實(shí)實(shí)編程工工具包是面向?qū)?duì)象功能能擴(kuò)展庫(kù)庫(kù),幫助助VR的的開發(fā)者者;支持各種種VR中中常見的的I//O設(shè)設(shè)備(開開發(fā)者不不用寫驅(qū)驅(qū)動(dòng)程序序);允許輸入入CAD模型型(節(jié)節(jié)省時(shí)間間)、編編輯形狀狀、指定定對(duì)象的的層次結(jié)結(jié)構(gòu),碰碰撞檢檢測(cè)和多多層次的的細(xì)節(jié),,遮蔭蔭和紋理理,運(yùn)行行時(shí)間管管理;;具有內(nèi)置置網(wǎng)絡(luò)功功能,用用于多用用戶交互互。虛擬現(xiàn)實(shí)實(shí)工具包包可分為為:是否基于于文本或或圖形化化編程;;所使用的的語(yǔ)言和和軟件庫(kù)庫(kù)大小的的類型;;支持I//O設(shè)備的的類型;;提供繪制制的類型型;一般目的的還是特特殊應(yīng)用用;是否專有有(更多多的功能能,更好好地記錄錄文檔))或公共共領(lǐng)域((免費(fèi),,少量文文檔和功功能)在九十年年代的虛虛擬現(xiàn)實(shí)實(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觸覺yesC++PeopleShop(BostonDynamics)軍事/民用
yesC/C++3DGameStudio游戲引擎
yes
C++場(chǎng)景圖::是物體的的一個(gè)分分層組織織(可可見或不不可見))在虛虛擬世界界中(或或“宇宙宙”));場(chǎng)景圖用用樹狀結(jié)結(jié)構(gòu)表示示,節(jié)點(diǎn)點(diǎn)用枝連連接;可見物體體用外部部節(jié)點(diǎn)表表示,稱稱為葉子子(他們們有沒有有子女))。例例如節(jié)點(diǎn)點(diǎn)F,,G,,H,,I內(nèi)部節(jié)點(diǎn)點(diǎn)表示轉(zhuǎn)轉(zhuǎn)變(即即適用于于所有的的子女))ABCEDJFGHI根節(jié)點(diǎn)內(nèi)部節(jié)點(diǎn)點(diǎn)外部節(jié)點(diǎn)點(diǎn)手掌場(chǎng)景球場(chǎng)景圖表表明球是是場(chǎng)景的的孩子節(jié)節(jié)點(diǎn)場(chǎng)景圖不不是靜態(tài)態(tài)的手掌場(chǎng)景球場(chǎng)景已經(jīng)經(jīng)被修改改,球球現(xiàn)在是是手掌的的孩子VC6.1onbookCD建模階段段模型幾何何設(shè)置定義并連連接傳感感器定義動(dòng)作作函數(shù)定義場(chǎng)景景圖定義網(wǎng)絡(luò)絡(luò)實(shí)時(shí)循環(huán)環(huán)開始仿真更新物體(從傳感器和智能行為)繪制場(chǎng)景(圖形,聲音,觸覺)讀傳感器數(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觸覺yesC++PeopleShop(BostonDynamics)軍事/民用
yesC/C++3DGameStudio游戲引擎
yes
C++本章討論論的VR軟件件工具包包Java及Java3DJava面向?qū)ο笙蟮某绦蛐蛟O(shè)計(jì)語(yǔ)語(yǔ)言用于網(wǎng)絡(luò)絡(luò)應(yīng)用開開發(fā)平臺(tái)獨(dú)立立比C//C+++慢Java3DJava類的的層次,,作為3D圖形形繪制和和聲音繪繪制系統(tǒng)統(tǒng)的接口口完美地集集成了Java很強(qiáng)壯的的面向?qū)?duì)象的體體系結(jié)構(gòu)構(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)產(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é)節(jié)點(diǎn)類類型:節(jié)點(diǎn)組葉子樹枝組組變換組選擇背景行為霧光照3D形形狀Compilablesub-graphTransform++childnodesSelectwhichofthechildrenarevisible(usefulforLOD)Universebackground.CanbeacolororanimageActionstobeperformedbythesimulationFognodeLightnode.Specialderivedclasses:AmbientLight,PointLight,DirectionalLightGeometry++Appearance++BoundingBoxJava3D場(chǎng)場(chǎng)景圖圖節(jié)點(diǎn)全局根正方體球手拇指食指中指無名指小拇指SceneSc==loader.load(“Hand.wrl”));BranchGroupBg==Sc.getSceneGroup(();RootNode.addChild(Bg);;Java3D模模型導(dǎo)導(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)景景的圖中中訪問導(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)認(rèn)的輸入入設(shè)備是是鼠標(biāo)和和鍵盤;;目前VR應(yīng)用中中集成其其它的輸輸入設(shè)備備(位置置傳感器器,跟跟蹤球,,游戲戲桿…))完全由由開發(fā)者者的需要要而決定定;通常驅(qū)動(dòng)動(dòng)程用C/C+++寫,,使用用人員可可以使用用Java重寫寫驅(qū)動(dòng)程程序,也也可以使使用JNI((JavaNativeInterface)來調(diào)調(diào)用C/C+++版版本的驅(qū)驅(qū)動(dòng)程。。后者是是更加需需要的..Java3D提提供很很好的通通用輸入入設(shè)備接接口,可可以用于于集成傳傳感器..然而而,開開發(fā)人員員還是選選擇傳統(tǒng)統(tǒng)的方法法.Java3D通通用傳傳感器接接口classPhysicalEnvironment-存存儲(chǔ)全部部輸入設(shè)設(shè)備和仿仿真中的的傳感器器的信息息classInputDevice–輸入入設(shè)備驅(qū)驅(qū)動(dòng)程序序接口classSensor–提供供實(shí)時(shí)數(shù)數(shù)據(jù)的對(duì)對(duì)象類物理環(huán)境輸入設(shè)備傳感器一個(gè)輸入入設(shè)別能能提供一一個(gè)或多多個(gè)傳感感器一個(gè)傳感感器不需需要和一一個(gè)輸入入設(shè)備關(guān)關(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ì)對(duì)象發(fā)出出一些激活活的類::WakeupOnCollisionEntryWakeupOnCollisionExitWakeupOnCollisionMovementWakeupOnElapsedFramesWakeupOnElapsedTimeWakeupOnSensorEntryWakeupOnSensorExitWakeupOnViewPlatformEntryWakeupOnViewPlatformExitJava3D––行行為(Behavior)的的使用用WakeupOnElapsedFramesWup=newWakeupOnElapsedFrames(0);Bhv..wakeupOn((Wup);全局根節(jié)點(diǎn)我們定義義一個(gè)行行為Bhv,,它按按照1度度旋轉(zhuǎn)球球;我們想讓讓這個(gè)行行為每一一幀都被被調(diào)用,,以便球球能夠轉(zhuǎn)轉(zhuǎn)動(dòng)VC6.3onbookCDVC6.4onbookCDJava3D的View對(duì)象描述述仿真中中的圖形形顯示,,和用戶戶位置((由跟蹤蹤器給出出的)View模型提供供了由ViewPlatform節(jié)點(diǎn)提供供的虛擬擬世界和和用于交交互的I/O設(shè)設(shè)備的分分離;一些被跟跟蹤的用用戶可以以映射到到虛擬世世界的相相同的位位置;這這對(duì)應(yīng)幾幾個(gè)Views和一一個(gè)ViewPlatform相反,一一個(gè)用用戶能夠夠控制幾幾個(gè)ViewPlatforms;這些對(duì)應(yīng)應(yīng)幾個(gè)Views,,因?yàn)閂iewPlatform有自己的的View;這樣樣一個(gè)用用戶可以以有幾個(gè)個(gè)Views與虛虛擬世界界對(duì)應(yīng),,它們們之間可可以通訊訊.Viewplatform1Viewplatform2Java3D初初始化化建模幾何何建立傳感感器定義行為為定義場(chǎng)景景圖網(wǎng)絡(luò)Java3DsimulationJavaApplicationJava3DsimulationJavaAppletJava3DsimulationJavaApplicationJava3D––網(wǎng)網(wǎng)絡(luò)Java3D不不提供供內(nèi)置的的網(wǎng)絡(luò)虛虛擬環(huán)境境的解決決方案然而,它它允許許開發(fā)者者集成使使用Java提提供的的強(qiáng)大的的網(wǎng)絡(luò)特特征Java3D應(yīng)應(yīng)用程序序能夠像像標(biāo)準(zhǔn)的的應(yīng)用程程序一樣樣運(yùn)行。。Java3DsimulationJavaAppletServerJava3D與與VRMLVRML提供了了在虛擬擬世界中中定義對(duì)對(duì)象并啟啟動(dòng)對(duì)象象的可能能圖形用戶戶接口((APIs)),例如如Java3D或WTK從從VRML文件件載入模模型的靜靜態(tài)信息息,而忽忽略了傳傳感器、、路徑和和腳本等等信息;;Java3D和和WTK的的比較Java3d((版本本1..3beta1)和和WTK((Release9)之之間的比比較進(jìn)行行了研究究;運(yùn)行于雙雙PentiumIII933MHzPC((Dell),,512M字節(jié)內(nèi)內(nèi)存RAM,Wildcat4110圖形形加速器器,64M字節(jié)RAM;I/O接接口是theRutgersMasterII力力反饋饋手套;;場(chǎng)景包括括幾個(gè)球球(每每個(gè)球420個(gè)個(gè)多邊形形)和虛虛擬手((2,,270個(gè)多邊邊形);;球繞任意意軸不斷斷地旋轉(zhuǎn)轉(zhuǎn),手或或者是轉(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ù)數(shù)目1,5,10);;交互((無交互互,手手輸入,,力反饋饋)Java3D––WTK比較較Java3d平平均比比WTK快,,Java3D––WTK比比較Java3d版版本3.1Beta1比比WTKRelease9具具有較小小延遲但Java3d在在場(chǎng)景繪繪制時(shí)間間上變化化較快WTK不不會(huì)偶偶爾出現(xiàn)現(xiàn)峰值,,不會(huì)出出現(xiàn)偶爾爾的凍結(jié)結(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觸覺yesC++PeopleShop(BostonDynamics)軍事/民用
yesC/C++3DGameStudio游戲引擎
yes
C++Vizard特特征::使用Python,它它是可升升級(jí)和跨跨平臺(tái)的的;它是面向向?qū)ο蟮牡?,很容容易集成成C/C++運(yùn)行于Unix,Windows,Mac和和其它它平臺(tái);;使用一個(gè)個(gè)4-window““工作作臺(tái)”,,允許變變成人員員寫并執(zhí)執(zhí)行代碼碼,檢查查3Dmodels,拖拖放對(duì)對(duì)象,發(fā)發(fā)出命命令同時(shí)時(shí)繪制場(chǎng)場(chǎng)景.腳本棧––當(dāng)當(dāng)輸入的的時(shí)候,,錯(cuò)誤用高高亮度標(biāo)標(biāo)記交互窗口口–輸入命令令資源窗口口–文本列表表3D窗窗口––開發(fā)每個(gè)個(gè)物體Workbench的的使用用:圖標(biāo)菜單單用鼠標(biāo)開開發(fā)場(chǎng)景景導(dǎo)入物體體importviz
importhand
viz.go())
#Identifythe5DTglove'sport.PORT_5DT__USB=0##Addthe5DTsensorsensor==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è)用戶存存在同一一個(gè)環(huán)境境中,每每個(gè)用戶戶需要運(yùn)運(yùn)行Vizard..Aftertheworldissetup當(dāng)當(dāng)虛擬世世界建立立后,每每個(gè)用用戶必須須建立兩兩個(gè)““mailboxes”..一個(gè)接收收來自其其它用戶戶的信息息。User2User1PositionisthepropertyBallistheobjectactioninformationVizard網(wǎng)網(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.Alltherecipientwillgetyouryaw,,xandzcoordinates..target__mailbox.send(position[0]],position[1],position[[2]))Vizard網(wǎng)網(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觸覺yesC++PeopleShop(BostonDynamics)軍事/民用
yesC/C++3DGameStudio游戲引擎
yes
C++PHANToM的GHOST軟軟件包提供真實(shí)實(shí)感的觸觸覺交互互;提供并使使觸覺交交互更直直觀提供觸覺覺交互的的場(chǎng)景圖圖,利用用3D圖圖形APIs提供觸覺覺交互技技術(shù)的擴(kuò)擴(kuò)展環(huán)境境;與PHANTOM點(diǎn)觸覺覺交互;基于用戶戶定義的的力模型型幾何;;對(duì)力反應(yīng)應(yīng)的幾何何運(yùn)動(dòng)xyz(0,0,0)PHANToMDesktopmodelGHOST––應(yīng)用用交互xyz(0,0,0)應(yīng)用處理觸覺加工場(chǎng)景產(chǎn)生碰撞檢測(cè)碰撞反映觸覺狀態(tài)更新結(jié)束觸覺繪制觸覺循環(huán)30fps場(chǎng)景繪制1000HzGHOST觸觸覺場(chǎng)景景圖xyz(0,0,0)應(yīng)用處理觸覺加工場(chǎng)景產(chǎn)生碰撞檢測(cè)碰撞反映觸覺狀態(tài)更新結(jié)束觸覺繪制觸覺循環(huán)30fps場(chǎng)景繪制1000Hz觸覺場(chǎng)景景圖提供一種種構(gòu)造觸觸覺場(chǎng)景景的結(jié)構(gòu)構(gòu)化方法法,包括括幾何和和動(dòng)態(tài)的的;自頂向下下遍歷((與WTK不不同);;每個(gè)節(jié)點(diǎn)點(diǎn)只被遍遍歷一次次(每每個(gè)子節(jié)節(jié)點(diǎn)只有有一個(gè)雙雙親節(jié)點(diǎn)點(diǎn))GHOST節(jié)節(jié)點(diǎn)類3DsupportStaticNodesDynamicNodesUtilityClassesGHOST九九個(gè)節(jié)點(diǎn)點(diǎn)類GHOST九九個(gè)節(jié)點(diǎn)點(diǎn)類(continued)GHOST九九個(gè)節(jié)點(diǎn)點(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é)學(xué)xyz(0,0,0)應(yīng)用處理觸覺加工場(chǎng)景產(chǎn)生碰撞檢測(cè)碰撞反映觸覺狀態(tài)更新結(jié)束觸覺繪制觸覺循環(huán)30fps場(chǎng)景繪制1000Hz碰撞檢測(cè)測(cè)與反應(yīng)應(yīng)場(chǎng)景圖包包含至少少一個(gè)通通過gstPHANToM表示的觸觸覺接口口的節(jié)點(diǎn)點(diǎn)(一個(gè)個(gè)觸覺場(chǎng)場(chǎng)景中有有四個(gè)觸觸覺接口口);碰撞檢測(cè)測(cè)用gstShape節(jié)點(diǎn)進(jìn)行行;當(dāng)碰撞檢檢測(cè)存在在時(shí),gstPHANToM_SCP被加入到到場(chǎng)景圖圖中,這這個(gè)節(jié)點(diǎn)點(diǎn)應(yīng)該加加入到相相同雙親親的下面面,作為為gstPHANToM節(jié)點(diǎn)。NormalForce(dependsonspringanddampercoefficients)FrictionForce(dependsonstaticanddynamicfrictioncoefficients)碰撞檢測(cè)測(cè)下,計(jì)計(jì)算力;;通過動(dòng)態(tài)態(tài)效果進(jìn)進(jìn)行碰撞撞反應(yīng)((活動(dòng)動(dòng)節(jié)點(diǎn),,動(dòng)態(tài)態(tài)固體));如果必要要通知應(yīng)應(yīng)用系統(tǒng)統(tǒng)(用用戶定義義的)..碰撞檢測(cè)測(cè)與反應(yīng)應(yīng)動(dòng)態(tài)節(jié)點(diǎn)點(diǎn)gstDynamic節(jié)點(diǎn)對(duì)于于其下面面的節(jié)點(diǎn)點(diǎn)加上運(yùn)運(yùn)動(dòng)能力力,在gstDynamic下面的子子樹表示示一個(gè)物物力的動(dòng)動(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è)個(gè)派生類類:gstDial,gstButton,gstSlider和gstRigidBody.動(dòng)態(tài)節(jié)點(diǎn)點(diǎn)(continued))當(dāng)一個(gè)gstDynamic節(jié)點(diǎn)改變變狀態(tài)時(shí)時(shí),一一個(gè)調(diào)用用用戶定定義的函函數(shù)的事事件產(chǎn)生生.例如––如果果gstButton從pressed狀態(tài)變?yōu)闉閞eleased狀態(tài)態(tài)時(shí),應(yīng)應(yīng)用程序序退出。。gstButton行為舉例例更新應(yīng)用用xyz(0,0,0)應(yīng)用處理觸覺加工場(chǎng)景產(chǎn)生碰撞檢測(cè)碰撞反映觸覺狀態(tài)更新結(jié)束觸覺繪制觸覺循環(huán)30fps場(chǎng)景繪制1000Hz圖形及回回調(diào)函數(shù)數(shù)用戶需要要確定哪一個(gè)節(jié)節(jié)點(diǎn)用回調(diào)函函數(shù),需需要發(fā)送送給回調(diào)調(diào)函數(shù)的的信息是什么。。應(yīng)用程序序通過調(diào)調(diào)用回調(diào)調(diào)函數(shù)更更新信息息。這些些節(jié)點(diǎn)具具有調(diào)用用返回的的定義,,并具有有一個(gè)更更新的狀狀態(tài),上上次調(diào)用用的updateGraphics將把他們們的當(dāng)前前的狀態(tài)態(tài)拷貝到到所定義義的數(shù)據(jù)據(jù)結(jié)構(gòu)中中。回調(diào)函數(shù)數(shù)把來自自GHOST觸觸覺過程程的場(chǎng)景景觸覺節(jié)節(jié)點(diǎn)的信信息傳遞遞給應(yīng)用用過程。。例如,用用戶產(chǎn)生生一個(gè)表表示節(jié)點(diǎn)點(diǎn)gstPHANToM當(dāng)前位置置的回調(diào)調(diào)函數(shù),,在碰撞撞之后就就應(yīng)該改改變回調(diào)調(diào)gstPHANToM_SCP,這樣用戶戶可以看看到物體體上接觸觸點(diǎn)的位位置。將用戶映映射到觸觸覺場(chǎng)景景中Phantom工作空間用戶工作作空間攝像機(jī)映映射到PHANToM工作作臺(tái)CameraPhantomworkspacez-axisPhantomworkspaceCameraPhantomworkspacephantomSep變換MrotationphantomSep變換McameraphantomSep變換MzaxisOffset縮放攝像像機(jī)和PHANToM工工作空間間攝像機(jī)工工作空間太大大攝像機(jī)工工作空間太小小攝像機(jī)工工作空間適當(dāng)當(dāng)CameraPhantomworkspaceCameraPhantomworkspaceCameraPhantomworkspace縮放攝像像機(jī)和PHANToM工工作空間間CameraDxmaxDphantomxmax規(guī)模因子子依賴于于從焦距距到可視視平截頭頭體(frustum)的距距離從非規(guī)模模的PHANTOM工作作空間中中心到面面的邊緣緣的距離離Dphantomxmax必須是確確定的規(guī)模因子子為Sfrustum=Dxmax/Dphantomxmax縮放攝像像機(jī)和PHANToM工工作空間間為了維持持觸覺的的逼真度度,gstShape節(jié)點(diǎn)的物物理屬性性(柔性性和阻尼尼)也需需要進(jìn)行行同樣的的縮放;;SurfaceKspringnew=SurfaceKspringcurrent/SfrustumSurfaceKdampingnew=SurfaceKdampingcurrent/Sfrustum其中SurfaceKspring和SurfaceKdamping分別是gstShape的柔性參參數(shù)和阻阻尼參數(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觸覺yesC++PeopleShop(BostonDynamics)軍事/民用yesC/C++3DGameStudio游戲引擎
yes
C++BDIPeopleShop/DI-Guy特特點(diǎn)提供了一一種在實(shí)實(shí)時(shí)場(chǎng)景景中模擬擬人物的的使用方方法;是一種任任務(wù)層次次的變成成環(huán)境,,結(jié)合基基于菜單單的圖形形用戶接接口(GUI)任務(wù)映射射到預(yù)先先定義好好的實(shí)時(shí)時(shí)插值的的關(guān)聯(lián)運(yùn)運(yùn)動(dòng)之中中;非常適合合分布式式交互仿仿真(DIS)。。因?yàn)榈偷蛶捫栊枨蠛皖A(yù)預(yù)測(cè);起初為軍軍事而設(shè)設(shè)計(jì),現(xiàn)現(xiàn)在用于于民用,,例如,,事件回回放、建建筑漫游游、仿真真驅(qū)動(dòng)、、警察訓(xùn)訓(xùn)練。連接的對(duì)對(duì)象庫(kù),,可以運(yùn)運(yùn)行于SGI,IntelPCs,,和其其它平臺(tái)臺(tái);庫(kù)具有實(shí)實(shí)時(shí)動(dòng)作作引擎模模塊、圖圖形顯示示模塊、、運(yùn)動(dòng)數(shù)數(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ò)絡(luò)PeopleShop初始化場(chǎng)景幾何何定義傳感感器定義行為為定義人物物路徑定義網(wǎng)絡(luò)絡(luò)PeopleShop人物物具有54自由度度(DOF),,11連接接點(diǎn)(links)的的關(guān)節(jié)多多邊形結(jié)結(jié)構(gòu);車也作為為人物;;不同人物物具有不不同的動(dòng)動(dòng)作;每一種類類型人物物具有用用戶選擇擇的外觀觀(例如如,人物物的車可可以是坦坦克或警警車)人物使用用紋理增增加真實(shí)實(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ò)絡(luò)PeopleShop指定定路徑路徑途中點(diǎn)SlopeAdjuster初始路徑徑擴(kuò)展路徑徑加入的途途中點(diǎn)BDI軟軟件包包ActionbeadEndbeadStackedactionbeadsLastactionbead編輯行為為VC6.6onbookCDVC6.5onbookCDPeopleShop初始化場(chǎng)景幾何何定義傳感感器定義行為為定義人物物路徑定義網(wǎng)絡(luò)絡(luò)BDI軟軟件包包傳感器邊邊緣當(dāng)士兵進(jìn)進(jìn)入到傳傳感器區(qū)區(qū)域時(shí),,系統(tǒng)會(huì)會(huì)發(fā)現(xiàn)察察覺-這這會(huì)觸發(fā)發(fā)士兵B向A開開槍SoldierASoldierBPeopleShop傳感感器傳感器是是用戶定定義的體體,在其其中當(dāng)人人進(jìn)入時(shí)時(shí)被發(fā)覺覺(PeopleShopUser’sManual)SensorboundarySupplementalbdi..farmhouse.mpgPeopleShop初始化場(chǎng)景幾何何定義傳感感器定義行為為定義人物物路徑定義網(wǎng)絡(luò)絡(luò)PeopleShop行行為行為可以以反射((基于于傳感器器接收的的信號(hào)));行為也可可以用決決策鍵((decisionbeads)給出;決策鍵((decisionbeads)可以放置置在人物物的路徑徑上((紅顏色色);決策鍵((decisionbeads)的兩個(gè)參參數(shù)是距距離distance和長(zhǎng)度length;距離distance表明從決決策鍵起起始點(diǎn)的的距離;;長(zhǎng)度length表明決策策鍵活動(dòng)動(dòng)區(qū)的起起始點(diǎn)距距離決策可以以轉(zhuǎn)換為為腳本script::BDI軟軟件包包決策語(yǔ)句句(IF/THEN/ELSE))PeopleShop實(shí)時(shí)時(shí)性PeolpeShop初始化交互訓(xùn)練沉浸訓(xùn)練想定可視化用戶用戶用戶PeopleShop實(shí)時(shí)性性PeolpeShop初始化交互訓(xùn)練沉浸訓(xùn)練想定可視化用戶用戶用戶BDIPeopleShop軟軟件包用戶使用用游戲桿桿或鼠標(biāo)標(biāo)與仿真真實(shí)時(shí)交交互,菜菜單限制制控制和和沉浸VC6.7PeopleShop實(shí)時(shí)時(shí)性PeolpeShop初始化交互訓(xùn)練練沉浸訓(xùn)練練想定可視視化用戶用戶用戶BDIPeopleShop––實(shí)時(shí)時(shí)模式用戶使用用跟蹤器器和傳感感器與仿仿真實(shí)時(shí)時(shí)交互Omni-directionaltreadmillSensorizedweaponPeopleShop初始化場(chǎng)景幾何何定義傳感感器定義行為為定義人物物路徑定義網(wǎng)絡(luò)絡(luò)PeopleShop網(wǎng)絡(luò)絡(luò)在DIS環(huán)境境中修改改人物的的外形需需要更高高的帶寬寬;車具有較較小的自自由度,,而具有有40個(gè)個(gè)關(guān)節(jié)的的人物以以20Hz更更新就就需要800包包/秒秒;人們僅僅僅在任務(wù)務(wù)級(jí)(動(dòng)動(dòng)作、位位置、速速度)上上更新,,而不更更新每個(gè)個(gè)節(jié)點(diǎn)。。這樣產(chǎn)產(chǎn)生平滑滑仿真需需要大約約2包//秒;對(duì)于參與與者數(shù)量量多的仿仿真效果果很好,,例如軍軍事訓(xùn)練練;使用實(shí)況況定位((livereckoning)和和推算定定位(deadreckoning))
BDI軟軟件包包用推算預(yù)預(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觸覺yesC++PeopleShop(BostonDynamics)軍事/民用yesC/C++3DGameStudio游戲引擎yesC++3DGameStudio人人物使用A6游戲戲引擎,,提供了了簡(jiǎn)單的的快速的的編程構(gòu)構(gòu)造虛擬擬世界的的方法;;一種任務(wù)務(wù)級(jí)編程程環(huán)境和和基于菜菜單的圖圖形接口口(GUI)的的結(jié)合,,腳本本編程更更靈活;;適合多用用戶仿真真通過局局域網(wǎng)((LANs))和廣域域網(wǎng)(WAN)((TCP/IP及及UDP);;最初為游游戲設(shè)計(jì)計(jì),現(xiàn)在在擴(kuò)展為為VR編編程,性性能好,,價(jià)格可可以接受受($500))
3DGameStudio人人物3D引引擎允許許多用戶戶(多多個(gè)虛擬擬像機(jī))),建建立在DirectX9圖形形流水線線;具有剪切切的優(yōu)化化;深入的通通過幾何何LOD和紋理理細(xì)節(jié)的的優(yōu)化;;表面可以以變形,,物體體可以是是動(dòng)態(tài)的的人物動(dòng)畫畫通過骨骨骼框架架表示。。3DGameStudio幾幾何的產(chǎn)產(chǎn)生我們可以以導(dǎo)入大大的模型型庫(kù),或或用另外外的建模模軟件((3DStudioMax)建建好的模模型物體可以以用WorldEditor((WED)3Deditor產(chǎn)生3DGameStudio紋紋理凸凹不平平紋理光照映射射和多紋紋理3DGameStudio人物物動(dòng)畫動(dòng)畫可以以導(dǎo)入由由Maya產(chǎn)產(chǎn)生的,,或者者人物可可以用modeleditor創(chuàng)創(chuàng)建按照動(dòng)作作定義的的幀物理與聲聲音引擎擎具有碰撞撞檢測(cè)功功能,建建立在多多邊形級(jí)級(jí)別上,,及物理理行為重重力、彈彈性和摩摩擦力Cscript–C+++的簡(jiǎn)單單版本,,用于產(chǎn)產(chǎn)生物理理行為,,同過函函數(shù)進(jìn)行行I/O編程((鍵盤盤、鼠標(biāo)標(biāo))靜態(tài)、動(dòng)動(dòng)態(tài)3D聲聲音資源源,可編編程3DGameStudio初初始化3DGameStudio初初始化3DgameStudio游戲編編程舉例例3DGameStudioOverviewPurposeQuickandeasycreationofinteractiverealtimeapplicationsSuitefor2Dand3Dmultimediaprojects,,especiallycomputergamesAdevelopmentsystem3Dengine2DenginePhysicsengineLeveldesignModelandterraineditorsC-ScriptprogramminglanguageHugelibrariesof3DobjectsandartworkWhatcanbemade1stpersongames3rdpersongamesroleplayinggamesflightsimulatorssportsgamesvirtualrealityoranyother2Dor3Dprojectyoucanimagine用3DGameStudio開發(fā)發(fā)的游戲戲ComponentsLevel//WorldEditer––WEDObjects,Textures,Lights,Sounds……ModelEditer––MEDModel,TerrainScriptEditer–SEDC-ScriptWorkflowandComponentsLevelEditer––WEDModelEditer––MEDScriptEditer–SEDDemo-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;((variablelength))stringname[n];((fixedlength))stringname=="characters";stringname==<characters>;Examplestringhello==""HelloWorld!!";stringelements[[10]];Objectsentityfonttextsoundpanelbmapmaterial……P
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025農(nóng)村土地使用權(quán)承包轉(zhuǎn)讓合同范文
- 2025項(xiàng)目委托合同范文大全
- 2025建筑材料采購(gòu)合同的
- xxx汽車制動(dòng)軟管項(xiàng)目可行性報(bào)告
- 新建鍍鋅鋼板項(xiàng)目可行性研究報(bào)告
- 新建汽車天窗組件項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- (投資方案)調(diào)和油品項(xiàng)目可行性研究報(bào)告
- 2025解除施工合同協(xié)議書工程合同解除協(xié)議書范本
- 裝飾建材項(xiàng)目建設(shè)實(shí)施方案
- 2025的國(guó)際運(yùn)輸代理合同
- 蘇教版四年級(jí)上冊(cè)科學(xué)期末試題(含答案)
- 《鑄造用增碳劑》
- 一年級(jí)上心理健康教育《我是小學(xué)生了》課件PPT
- 水庫(kù)回水計(jì)算(實(shí)用)
- 山東第一醫(yī)科大學(xué)護(hù)理倫理學(xué)期末復(fù)習(xí)題
- 清華物理習(xí)題庫(kù)試題及答案光學(xué)
- 中班美術(shù)活動(dòng)美麗的蝴蝶教案【含教學(xué)反思】
- 管理供應(yīng)商 供應(yīng)商績(jī)效評(píng)估
- 1000MW機(jī)組鍋爐過渡段T23水冷壁管檢修導(dǎo)則(征求意見稿)
- 夾層鋼結(jié)構(gòu)施工方案鋼結(jié)構(gòu)夾層施工方案
- 國(guó)開本科《商務(wù)英語(yǔ)4》機(jī)考題庫(kù)及答案
評(píng)論
0/150
提交評(píng)論