版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)加盟合作協(xié)議(2024版)細(xì)則版
- 2025年茶園租賃合同示范文本8篇
- 2024版轎車租借合同:全面保障合同條款版
- 2025年度柴油發(fā)電機(jī)及配件全球采購(gòu)合同范本4篇
- 2024年04月陜西西安銀行金融市場(chǎng)及資產(chǎn)管理業(yè)務(wù)人才招考筆試歷年參考題庫(kù)附帶答案詳解
- 專業(yè)空氣能熱泵熱水器安裝工程協(xié)議規(guī)范文本版B版
- 專業(yè)設(shè)備采購(gòu)銷售協(xié)議:2024版細(xì)則版A版
- 2025年度綠色建筑場(chǎng)調(diào)研與投資評(píng)估服務(wù)合同4篇
- 二零二五年度瓷磚行業(yè)供應(yīng)鏈管理合同3篇
- 2025年環(huán)保設(shè)備產(chǎn)品區(qū)域代理合同4篇
- GA 1551.5-2019石油石化系統(tǒng)治安反恐防范要求第5部分:運(yùn)輸企業(yè)
- 拘留所教育課件02
- 沖壓生產(chǎn)的品質(zhì)保障
- 《腎臟的結(jié)構(gòu)和功能》課件
- 2023年湖南聯(lián)通校園招聘筆試題庫(kù)及答案解析
- 上海市徐匯區(qū)、金山區(qū)、松江區(qū)2023屆高一上數(shù)學(xué)期末統(tǒng)考試題含解析
- 護(hù)士事業(yè)單位工作人員年度考核登記表
- 天津市新版就業(yè)、勞動(dòng)合同登記名冊(cè)
- 產(chǎn)科操作技術(shù)規(guī)范范本
- 人教版八年級(jí)上冊(cè)地理全冊(cè)單元測(cè)試卷(含期中期末試卷及答案)
- 各種焊工證件比較和釋義
評(píng)論
0/150
提交評(píng)論