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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

是面向對象功能擴展庫,幫助VR的開發(fā)者;支持各種VR中常見的I/O設備(開發(fā)者不用寫驅動程序);

允許輸入CAD模型(節(jié)省時間)、編輯形狀、指定對象的層次結構,碰撞檢測和多層次的細節(jié),遮蔭和紋理,運行時間管理;

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

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

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

RenderWare

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

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

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

yesC/C++3DGameStudio游戲引擎

yes

C++場景圖:是物體的一個分層組織

(可見或不可見)在虛擬世界中(或“宇宙”);場景圖用樹狀結構表示,節(jié)點用枝連接;可見物體用外部節(jié)點表示,稱為葉子(他們有沒有子女)。例如節(jié)點

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

yesC/C++3DGameStudio游戲引擎

yes

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

Java

面向對象的程序設計語言

用于網(wǎng)絡應用開發(fā)

平臺獨立

比C/C++慢

Java3D

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

完美地集成了Java

很強壯的面向對象的體系結構

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

幾何可以從各種文件格式導入

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

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

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

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

幾何的外觀用外觀對象給定

一個外觀類對象存儲有關材料(漫反射、鏡面反射….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初始化建模幾何建立傳感器定義行為定義場景圖網(wǎng)絡Java3D節(jié)點類型:節(jié)點組葉子樹枝組變換組選擇背景行為霧光照3D形狀Compilablesub-graphTransform+childnodesSelectwhichofthechildrenarevisible(usefulforLOD)Universebackground.CanbeacolororanimageActionstobeperformedbythesimulationFognodeLightnode.Specialderivedclasses:AmbientLight,PointLight,DirectionalLightGeometry+Appearance+BoundingBoxJava3D場景圖節(jié)點從文件調(diào)入物體

Java3D默認支持Lightwave

和Wavefront

模型文件

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

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

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);把模型加入場景的圖中訪問導入模型的子零件部分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虛擬手的導入:

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初始化建模幾何建立傳感器定義行為定義場景圖網(wǎng)絡Java3D中的輸入設備:

Java3D中默認的輸入設備是鼠標和鍵盤;

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

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

Java3D提供控制仿真的Behavior對象一個Behavior對象包含一些列仿真中接受的動作

一個刺激由WakeupCondition對象發(fā)出

一些激活的類:

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

我們定義一個行為Bhv

,它按照1度旋轉球;

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

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

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

相反,一個用戶能夠控制幾個ViewPlatforms;

這些對應幾個Views,因為ViewPlatform

有自己的

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

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

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

Java3D應用程序能夠像標準的應用程序一樣運行。Java3DsimulationJavaAppletServerJava3D與VRML

VRML提供了在虛擬世界中定義對象并啟動對象的可能

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

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

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

2,270個多邊形);球繞任意軸不斷地旋轉,手或者是轉動的,或者是有用戶驅動的.Java3D–WTK比較實驗中用的圖形場景Java3D與WTK比較

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

圖形模式

(非立體的,立體的),

繪制模式

(線框,Gouraud,紋理);

場景復雜度

(多邊形數(shù)目

5,000–50,000);

光照(光源數(shù)目

1,5,10);

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

yesC/C++3DGameStudio游戲引擎

yes

C++Vizard特征:使用Python,它是可升級和跨平臺的

它是面向對象的,很容易集成C/C++

運行于Unix,Windows,Mac和其它平臺;

使用一個4-window“工作臺”,允許變成人員寫并執(zhí)行代碼,檢查3Dmodels,拖放對象,發(fā)出命令同時繪制場景.腳本棧–當輸入的時候,錯誤用高亮度標記交互窗口–輸入命令資源窗口–文本列表3D窗口–開發(fā)每個物體Workbench的使用:圖標菜單用鼠標開發(fā)場景導入物體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仿真服務器:

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

一個接收來自其它用戶的信息。User2User1PositionisthepropertyBallistheobjectactioninformationVizard網(wǎng)絡舉例: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)絡舉例:#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工具包名稱應用專有語言庫規(guī)模Java3D(SunMicrosystems)一般應用no用C完成用Java編程19工具包,275類VizardToolkitandPeoplePak(WorldViz)一般應用擴展精靈yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom觸覺yesC++PeopleShop(BostonDynamics)軍事/民用

yesC/C++3DGameStudio游戲引擎

yes

C++PHANToM的GHOST軟件包

提供真實感的觸覺交互;

提供并使觸覺交互更直觀

提供觸覺交互的場景圖,利用3D圖形APIs

提供觸覺交互技術的擴展環(huán)境;

與PHANTOM點觸覺交互

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

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

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

(每個子節(jié)點只有一個雙親節(jié)點)GHOST節(jié)點類3DsupportStaticNodesDynamicNodesUtilityClassesGHOST九個節(jié)點類GHOST九個節(jié)點類(continued)GHOST九個節(jié)點類(continued)場景圖舉例yxzHeadyxzLeftShoulderyxzRightShoulderyxzRightElbowyxzLeftElbowyxzTorsoyxzBody靜態(tài)場景圖–僅僅分離的和幾何節(jié)點作為葉子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();力計算和動力學xyz(0,0,0)應用處理觸覺加工場景產(chǎn)生碰撞檢測碰撞反映觸覺狀態(tài)更新結束觸覺繪制觸覺循環(huán)30fps場景繪制1000Hz碰撞檢測與反應

場景圖包含至少一個通過gstPHANToM表示的觸覺接口的節(jié)點(一個觸覺場景中有四個觸覺接口);碰撞檢測用gstShape

節(jié)點進行;

當碰撞檢測存在時,gstPHANToM_SCP

被加入到場景圖中,這個節(jié)點應該加入到相同雙親的下面,作為gstPHANToM

節(jié)點。NormalForce(dependsonspringanddampercoefficients)FrictionForce(dependsonstaticanddynamicfrictioncoefficients)

碰撞檢測下,計算力;

通過動態(tài)效果進行碰撞反應

(活動節(jié)點,動態(tài)固體);

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

(用戶定義的).碰撞檢測與反應動態(tài)節(jié)點

gstDynamic節(jié)點對于其下面的節(jié)點加上運動能力,在gstDynamic

下面的子樹表示一個物力的動態(tài)物體;由gstPHANToM

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

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

節(jié)點;具有四個派生類:gstDial,gstButton,gstSlider

和gstRigidBody.動態(tài)節(jié)點(continued)

當一個gstDynamic

節(jié)點改變狀態(tài)時,

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

例如–如果gstButton

從pressed

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

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

將把他們的當前的狀態(tài)拷貝到所定義的數(shù)據(jù)結構中。回調(diào)函數(shù)把來自GHOST觸覺過程的場景觸覺節(jié)點的信息傳遞給應用過程。例如,用戶產(chǎn)生一個表示節(jié)點gstPHANToM

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

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

SurfaceKspringnew=SurfaceKspringcurrent/Sfrustum

SurfaceKdampingnew=SurfaceKdampingcurrent/Sfrustum其中SurfaceKspring

和SurfaceKdamping

分別是gstShape

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

yes

C++BDIPeopleShop/DI-Guy特點

提供了一種在實時場景中模擬人物的使用方法;

是一種任務層次的變成環(huán)境,結合基于菜單的圖形用戶接口(GUI)任務映射到預先定義好的實時插值的關聯(lián)運動之中;非常適合分布式交互仿真(DIS)。因為低帶寬需求和預測;起初為軍事而設計,現(xiàn)在用于民用,例如,事件回放、建筑漫游、仿真驅動、警察訓練。

連接的對象庫,可以運行于SGI,IntelPCs,和其它平臺;

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

運行于OpenGL,Direct3D,Sense8WTK,MakStealth和其它軟件包;

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

具有54自由度(DOF),11連接點(links)的關節(jié)多邊形結構;

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

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

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

的兩個參數(shù)是距離distance和長度length;距離distance

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

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

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

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

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

3DGameStudio人物

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

;

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

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

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

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

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

凸凹不平紋理

光照映射和多紋理3DGameStudio人物動畫

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

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

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

靜態(tài)、動態(tài)3D聲音資源,可編程3DGameStudio初始化3DGameStudio初始化3DgameStudio游戲編程舉例Moreat3DGameStudioOverviewPurposeQuickandeasycreationofinteractiverealtimeapplicationsSuitefor2Dand3Dmultimediaprojects,especiallycomputergamesAdevelopmentsystem3Dengine2DenginePhysicsengineLeveldesignModelandterraineditorsC-ScriptprogramminglanguageHugelibrariesof3DobjectsandartworkWhatcanbemade1stpersongames3rdpersongamesroleplayinggamesflightsimulatorssportsgamesvirtualrealityoranyother2Dor3Dprojectyoucanimagine用3DGameStudio開發(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論