版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
虛擬現(xiàn)實(shí)技術(shù)計算機(jī)學(xué)院虛擬現(xiàn)實(shí)技術(shù)與系統(tǒng)國家重點(diǎn)實(shí)驗(yàn)室 2011.9TechnologyofVirtualReality(VR)第四講繪制與渲染技術(shù)視/聽/觸/味/嗅位置/姿態(tài)/操作用戶/操作者真實(shí)環(huán)境虛擬環(huán)境化身化身化身真實(shí)環(huán)境現(xiàn)實(shí)世界/對象
建模虛擬現(xiàn)實(shí)組成中的作用生成過程中的作用真實(shí)世界對象模型虛擬環(huán)境顯示渲染建模繪制與渲染目的:將虛擬環(huán)境輸出,作用于參與者繪制與渲染技術(shù)分類從感知通道角度視覺渲染將幾何模型按照視覺原理進(jìn)行表現(xiàn)觸力覺渲染提供力覺/觸力覺感知信息聽覺渲染提供逼真的聽覺感受其他通道渲染嗅覺、味覺等上述通道并不孤立,需要相互結(jié)合,而視覺通道是輸出的主體例子:聽覺與視覺的結(jié)合HarmonicFluids,SIGGRAPH2009在逼真表現(xiàn)流體模型的基礎(chǔ)上,增加逼真的聲音效果例子:
視覺與嗅覺結(jié)合
北京時間3月5日消息,據(jù)英國《每日郵報》報道,英國科學(xué)家設(shè)計了一種虛擬現(xiàn)實(shí)的神奇頭盔,這種頭盔能夠模擬視覺、嗅覺、聽覺、觸覺甚至味覺功能,讓使用者不必親自前往遙遠(yuǎn)的度假目的地,在家中便可獲得身臨其境的感覺,盡情享受虛擬旅游的快樂。
戴上這款頭盔后,“扶椅游客”(只閱讀或聽說關(guān)于旅游的事而不親身旅行的人)只需舒舒服服地坐在起居室,便可聽到狩獵之旅中獅子的咆哮,聞到高山草甸上鮮花的芳香并感受加勒比海陽光的熱度。此外,這款裝置還可讓用戶問候遠(yuǎn)在世界另一端的朋友和家人,就好像他們也身在同一房間,讓自己盡情沉浸在虛幻中的世界。有了這個頭盔,學(xué)生便可以對歷史進(jìn)行虛擬探索,體驗(yàn)生活在古埃及、古羅馬或者古希臘的感受。
科學(xué)家研制虛擬現(xiàn)實(shí)裝置已經(jīng)有近20年歷史了,但直到現(xiàn)在,絕大多數(shù)裝置仍能夠只能創(chuàng)造聲音和圖像。來自約克和華威大學(xué)的一支英國科學(xué)家小組發(fā)起了一項計劃,研制世界上第一款真正意義上的虛擬現(xiàn)實(shí)頭盔,這種裝置能夠模擬所有5種感覺,讓他們所說的“真實(shí)虛擬”變得更加可信。
這款頭盔名為“虛擬繭”,內(nèi)裝專門研發(fā)的電子設(shè)備,包括一個高清晰、高動態(tài)電腦顯示屏、高技術(shù)含量的揚(yáng)聲器、用來向佩戴者面部吹熱/冷風(fēng)的風(fēng)扇以及一個可以在鼻子下方釋放化學(xué)物質(zhì)的“嗅覺管”以模擬真實(shí)世界中的氣味。
視覺渲染技術(shù)的表現(xiàn)形態(tài)繪制引擎場景管理碰撞檢測多種類型對象渲染(幾何、流體….)本講主要內(nèi)容常用繪制引擎及OpenGVS場景管理與碰撞檢測技術(shù)GPU技術(shù)
常用繪制引擎繪制系統(tǒng)的層次結(jié)構(gòu)硬件平臺:顯卡、GPU、……基本繪制層:OpenGL、DirectX
常用繪制引擎商用PerformerWorldToolKit(WTK)VTreeOpenGVSVegaVirtools……開源OSG……OpenGVS基礎(chǔ)OpenGVSisaveryhigh-level,ApplicationsProgrammingInterface(API)forreal-time3-Dsoftwaredevelopersandsystemintegrators.APIconsistsofmanypowerfulfunctions.OpenGVS是API
使用OpenGVS可以快速開發(fā)跨平臺的虛擬現(xiàn)實(shí)應(yīng)用。OpenGVS的應(yīng)用軟件可以在許多不同的硬件平臺和帶不同繪圖標(biāo)準(zhǔn)(OpenGL,3DFXGLIDE,Direct3D)的操作系統(tǒng)上運(yùn)行,而不需要做什么修改。支持OpenGL、3DFXGlide以及DirectX多種加速引擎。
OpenGVS的優(yōu)勢OpenGVS與OpenGLD3D的關(guān)系
在虛擬現(xiàn)實(shí)系統(tǒng)的開發(fā)中,還有OpenGL、Direct3D、WTK等圖形開發(fā)工具。OpenGVS與OpenGL、Direct3D一樣都是用于3D圖形系統(tǒng)開發(fā)的API。不同的是OpenGL等屬于“較低層次”繪圖原語。OpenGVS則是一種軟件開發(fā)包(SDK),它把繁雜的軟件開發(fā)瑣事分成許多簡單的相互關(guān)聯(lián)又方便使用的組件。用戶應(yīng)用程序既可以調(diào)用這些軟件,也可以避開OpenGVS直接調(diào)用底層繪圖軟件包提供的函數(shù)。圖形系統(tǒng)OpenGVSOpenGVS資源組成SystemFacilityCommandFacilityImportFacilityUserFacilityObjectFacilitySceneFacilityCameraFacilityChannelFacilityFrameBufferFacilityFogFacilityLightFacility MaterialFacilityTextureFacility GeometryFacility
OpenGVS的功能組件OpenGVS基本術(shù)語OpenGVS基本術(shù)語
幀緩存(FrameBuffer)
TheFrameBufferFacilityisusedtoestablishasoftwareresourcerelationshipbetweenthegraphicshardwareframebufferandtheGVS.EveryGVSapplicationwillneedtocreateatleastone(andusuallyonlyone)framebuffer.Channels(whichincludeauserspecifiedsceneandcamera)mustbeaddedtotheframebuffertocompletetherequiredGVSsoftwareconnections.Innearlyallcases,allyou’llneedtodoiscreateasingleframebufferresourceandconnectyourchanneltotheframebuffer.OpenGVS基本術(shù)語
通道(Channel):
Theterm“channel”isanhistoricaltermborrowedfromtheoriginalcomputerimagegenerationindustryterminologywhichbeganinthe1960s;theterm“imagegenerationchannel”remainsinforcetoday.AGVSchanneladoptsthisterminologyandissimplya3-Ddrawingsurfacerelativetosomearbitrarydesigneyepointin3-Dspace.TheChannelFacilityisusedtoformpartoftheGVSviewingpipelinealongwithacamera.通道是隨相機(jī)(camera)而建立的一個三維視覺管道,也可看成是場景、對象、霧、光源等眾多資源的集合體。通道與幀緩存相連,把視頻信號傳到物理輸出媒介。在通常的仿真程序中,程序員至少要建立一個通道,在其中渲染想要的顏色并加入相機(jī)和場景(scene),這樣當(dāng)這個通道與幀緩存相連時,GVS就可以繪制所需的場景了。
屬性缺省值設(shè)定時所用函數(shù)NameNULL(emptystring"")GV_chn_set_name()NormalizedViewportDimensions(.xmin,.xmax,.ymin,.ymax){-1.0,1.0,-1.0,1.0}GV_chn_set_viewport()EraseModeGV_CHN_ERASE_MODE_ONGV_chn_set_erase_mode()EraseColor{0.0,0.0,0.0,1.0}(black)GV_chn_set_erase_color()BorderG_ONGV_chn_set_border()DoubleBufferingG_ON
FarClippingPlane(systemunits)250000.0
NearClippingPlane0.1
Shear(.x,.y)Translation{0.0,0.0}GV_chn_set_shear()Twist(.x,.y,.z)Angles{0.0,0.0,0.0}GV_chn_set_twist()通道(GvsChn)類classGvsChn{int id;//通道標(biāo)識號G_Name name;//通道名float clip_near; //通道中近剪切面到相機(jī)的距離float clip_far; //通道中遠(yuǎn)剪切面到相機(jī)的距離GV_Viewport*view_port; //通道的視口坐標(biāo)GV_Rgba *erase_color; //通道的填涂顏色G_Vector2 *shear;//通道錯切角度GvsCam *cam;//通道中的相機(jī)GvsScn *scn;//通道中的場景GvsChn *m_pPrev;//通道鏈表中的前一通道GvsChn *m_pNext;//通道鏈表中的后一通道OpenGVS基本術(shù)語
場景(Scene)是基本的資源,繪圖數(shù)據(jù)在此保存。場景是零個或多個實(shí)體實(shí)例的集合。在OpenGVS中,實(shí)體實(shí)例在被繪出之前必須加入場景。用戶可為他們的應(yīng)用程序定義任意多的場景,但每次只有一個場景及其通道被激活,同時每個場景中又可以存在多個通道。場景(Scene)類classScene{int id; //場景標(biāo)識號G_Name name; //場景名GvsFog *fog; //場景中的霧GvsLsr *lsr; //場景中的光GvsObiList *obi_list;//實(shí)體鏈表objectdefinitionGvsObi *terr; //場景中的地形(是一個靜態(tài)實(shí)體庫)GvsScn* m_pPrev; //場景鏈表中的前一個場景GvsScn* m_pNext; //場景鏈表中的后一個場景}OpenGVS基本術(shù)語
實(shí)體(Objects)具有繼承性,也就是說,每個實(shí)體都擁有用戶定義的樹狀結(jié)構(gòu)。這個結(jié)構(gòu)由一個“父”節(jié)點(diǎn)開始,每個節(jié)點(diǎn)可以有零個或多個“子”節(jié)點(diǎn)。在任意時刻,對象定義(definition)的多個實(shí)例(instances)都可以加入場景或從場景中移走。實(shí)體類classObilist{intcount()const; //實(shí)體計數(shù)GvsObi*first()const; //實(shí)體鏈表中的第一個實(shí)體GvsObi*last()const; //實(shí)體鏈表中的最后一個實(shí)體voidAdded(GvsObi*node); //鏈表中添加一個實(shí)體voidRemove(GvsObi*node);//實(shí)體移去(不顯示)voidRemoveAndDelete(GvsObi*node);//將實(shí)體移去并從鏈表刪除GvsObi*lookup(constintid)const;//實(shí)體標(biāo)識查找實(shí)體GvsObi*lookup(G_Namename)const; /實(shí)體名稱找實(shí)體intGetChannles(GvsObi**&m_pGvsObiList);//通過實(shí)體查找實(shí)體所在通道GvsObi*m_pFirst; //鏈表中第一個實(shí)體GvsObi*m_pLast; //鏈表中最后一個實(shí)體}OpenGVS基本術(shù)語
照相機(jī)(Camera)——OpenGVS中基本的視點(diǎn)控制機(jī)制。每個相機(jī)都有一個或多個相互關(guān)聯(lián)的平臺。在用戶的應(yīng)用程序中,相機(jī)只有被加入通道才能被激活。系統(tǒng)中可以有多個不同角度的照相機(jī),但每一時刻只能有一個照相機(jī)是活動的。用戶可在不同照相機(jī)間切換就象是用不同的鏡頭觀察場景。因此使用哪個相機(jī)決定了場景怎樣繪制。OpenGVS基本術(shù)語
光源(Lightsources)
在用戶定義的OpenGVS場景中創(chuàng)建和更新光源。為了激活一個光源,必須把它加入到用戶的應(yīng)用程序中去。盡管對大多數(shù)硬件系統(tǒng)來說在一個場景中每次之只加入一個無限遠(yuǎn)的光源的效果最好,但在一個場景中還是可以有多個光源用來模擬太陽、路燈等等OpenGVS基本術(shù)語
霧(Fogmodel)可加入場景用來模擬自然界中煙或霧的特殊效果,這一資源并不是必須的。
OpenGVS仿真循環(huán)系統(tǒng)初始化1.GV_sys_init()——要想初始化OpenGVS,必須在程序中調(diào)用一次也只能調(diào)用一次這個函數(shù)。GV_sys_init()初始化OpenGVS的軟件管道,并啟動數(shù)據(jù)庫導(dǎo)入過程。在完成了自身的初始化動作之后,GV_sys_init()將調(diào)用用戶初始化函數(shù)GV_user_init()。2.GV_user_init()——這是程序員真正進(jìn)行初始化的地方。生成關(guān)鍵的圖形資源:建立幀緩存,建立通道,建立相機(jī),建立場景,建立光源。地形初始化,從對象的定義生成對象的實(shí)例,再將實(shí)例加入場景之中。進(jìn)行其它必要的資源連接:將光源加入場景,為通道設(shè)置相機(jī),為通道設(shè)置場景,將通道加入幀緩存。運(yùn)行時模塊CWinApp::Run()的作用是提供一個缺省的消息循環(huán),不斷地獲取和發(fā)送Windows消息,直到它收到一個WM_QUIT消息。通過重載VC的CWinApp類的成員函數(shù)Run()把消息循環(huán)的控制權(quán)交給OpenGVS,它也不斷地獲取和發(fā)送Windows消息,直到它收到一個WM_QUIT消息。這些消息將由OpenGVS的應(yīng)用程序來處理,而不是由MFC的應(yīng)用程序處理。XXX::Run()函數(shù)建立的消息循環(huán)中調(diào)用了OpenGVS的運(yùn)行時模塊GV_sys_proc()。從此,OpenGVS進(jìn)入運(yùn)行時狀態(tài)。在運(yùn)行時的每一幀,OpenGVS總是自動地以一種回調(diào)函數(shù)的機(jī)制來調(diào)用一些程序定義的回調(diào)函數(shù)。例:應(yīng)用程序通過運(yùn)行時函數(shù)GV_user_proc()
對所有實(shí)體實(shí)現(xiàn)以下功能1)通過傳感器接收參與者的一些操作指令,根據(jù)這些指令對本地實(shí)體的狀態(tài)進(jìn)行刷新;2)讀取并處理網(wǎng)上PDU;3)本地實(shí)體碰撞檢測;4)其他交互事件處理(如開火、爆炸、碰撞等);5)發(fā)布本地仿真實(shí)體信息6)根據(jù)當(dāng)前視點(diǎn),繪制視景。以坦克實(shí)體為例,描述GV_user_proc()的實(shí)現(xiàn)。仿真循環(huán):intGV_user_proc(){ for(inti=0;i++;i<MTotalNumber){if(m_entity[i].type==1)//實(shí)體是人在回路接收輸入設(shè)備數(shù)據(jù),根據(jù)動力學(xué)方程求解下一時刻的位置;if(m_entity[i].type==2)//實(shí)體是計算機(jī)生成兵力(CGF){if(導(dǎo)航代理) 根據(jù)規(guī)則進(jìn)行決策,求解下一時刻位置;}if(火控代理)求解火炮發(fā)射角,并裝彈射擊;if(防護(hù)代理) 求解坦克毀傷情況;if(三維圖形代理)三維圖形刷新;if(二維圖形代理)二維圖形刷新;if(三維聲音代理)三維聲音刷新;if(網(wǎng)絡(luò)代理)發(fā)送實(shí)體狀態(tài)Pdu;}關(guān)閉模塊當(dāng)應(yīng)用程序接收到系統(tǒng)消息WM_QUIT時,將退出OpenGVS的消息循環(huán),并調(diào)用關(guān)閉模塊。這個模塊完成資源句柄或指針的釋放。setG_DEV=d:setG_ROOT_PATH=\gemsetGV_ROOT=\gem\gvsetGV_GFX=openglsetG_COMPILER=msvccalld:\gem\gv\login_gv.batd:cd\progra~1\MICROS~1\Common\MSDev98\bin\msdev.exe
OpenGVS環(huán)境變量設(shè)置OpenGL加速引擎編譯連接設(shè)置Preprocessordefinitions:WIN32,_WINDOWS,_AFXDLLObject/librarymodules:libgv.lib$(GV_LIB_GL)netapi32.libwinmm.libmpr.lib
VC工程文件的設(shè)置(1)GLIDE加速引擎編譯連接設(shè)置Preprocessordefinitions:WIN32,_DEBUG,_WINDOWS,OpenGVS,NOGEOMETRY,G_SYS_GLIDEObject/librarymodules:d:\gem\gv\lib\w32\x86mt\glide\libgv3.libd:\gem\gv\lib\w32\x86mt\glide\libgv.libd:\gem\gv\lib\w32\x86mt\glide\libsgl.libd:\gem\gv\lib\w32\x86mt\glide\libstub.libd:\gem\gv\libsys\w32\x86\glide\glide2x.libmpr.libnetapi32.libwinmm.liboldnames.lib
VC工程文件的設(shè)置(2)
COMMANDFACILITY(1)
COMMANDFACILITY(2)
OpenGVS支持的模型(1)3DStudioMaxFilesexportedin3DSbinaryfileformat(.3ds)(2)MultiGenOpenFlightformat(.flt)(3)GameGenformat(.gam)(4)WavefrontAscii(.obj)(5)InternalencryptedOpenGVSdatabasefileformat(.gvm)
ImportFacility(1)importfile=filename[options]
ImportFacility(2)
加載模型的兩種方法(1)IMPORTINGMODELSVIASTARTUPCOMMANDFILES:在gvsinit.cmd中指定如下命令:importfile=f18.flt(2)IMPORTINGDATABASESUSINGFUNCTIONCALLS:在應(yīng)用程序中使用函數(shù)調(diào)用:intstatus;status=GV_cmd_service("importfile=f18.gam");GV_cmd_service("importfile=f18.gamname=AIRPLANE");GV_Obiinst;GV_obi_instance_by_name("AIRPLANE",&inst);GV_obi_set_name(inst,"PLANE_0");staticG_Positionposition={-20000.,4000.,800.};GV_obi_set_position(inst,&position);staticG_Rotationangles={0.,45.0*G_DEG_TO_RAD,0.};GV_obi_set_rotation(inst,&angles);
創(chuàng)建對象實(shí)例及操作對象
訪問對象的樹狀結(jié)構(gòu)GV_Obibarrel;GV_obi_inq_by_name("TANK/TURRET/Barrel",&barrel);GV_obi_inq_by_name("TANK",&root);GV_obi_inq_by_name_relative(root,".../Barrel",&barrel);創(chuàng)建SCENEGV_Sceneotw_scene;GV_scn_create(&otw_scene);
SCENEFACILITY(1)向SCENE中加入對象GV_obi_instance_by_name("moon",&inst);GV_scn_add_object(scene,inst);在SCENE中刪除一個對象GV_scn_remove_object(scene,inst);向SCENE中加入光源GV_lsr_inq_by_name("sun",&sun);GV_scn_add_light(scene,sun);
SCENEFACILITY(2)向SCENE中加入霧化模型GV_fog_inq_by_name("haze",&haze);GV_scn_add_fog(scene,haze);將SCENE加入通道中GV_scn_inq_by_name("OTW",&scnhdl);GV_chn_inq_by_name("main",&chnhdl);GV_chn_set_scene(chnhdl,scnhdl);創(chuàng)建CAMERAGV_Cameranew_camera;GV_cam_create(&new_camera);
CAMERAFACILITY(1)將相機(jī)加入通道中externGV_Channelchannel_main;GV_chn_set_camera(channel_main,camera1);將相機(jī)綁定到一個運(yùn)動對象上GV_obi_inq_by_name("AIRCRAFT",&aircraft_inst);GV_cam_set_mount_obi(camera_pilot,aircraft_inst);相機(jī)追蹤某一對象GV_cam_set_track_mode(camera,GV_CAM_TRACK_MODE_OBI_SINGLE);GV_cam_add_trackable_obi(camera,thing_inst);
CAMERAFACILITY(2)相機(jī)參數(shù)的設(shè)定GV_cam_set_aov_nominal(camera,angle);GV_cam_set_zoom_mode(camera,GV_CAM_ZOOM_MODE_AUTO);釋放相機(jī)占用的資源GV_cam_free(camera);創(chuàng)建CHANNELGV_Channelchannel;GV_chn_create(&channel);
CHANNELFACILITY設(shè)置視口大小staticGV_Viewportvport_upper_right={0.0,1.0,0.0,1.0};GV_chn_set_viewport(channel,&vport_upper_right);GEOMETRYFACILITYGV_geo_inq_intersection(scene,&p0,&p1,type_mask,exclude,&data);G_Booleanisc_result;//G_TRUEifintersectionoccuredGV_Obiisc_object;//NULLifnone,otherwisehandleGV_Obiisc_sub_object;//NULLorHandleGV_Geo_faceisc_face;//NULLifnone,otherwisehandlefloatisc_range;//RangetointersectionG_Vector3isc_point;//PointofintersectionVR應(yīng)用程序(漫游)構(gòu)造過程場景數(shù)據(jù)庫模型加載模型控制面及控制參數(shù)非碰撞實(shí)體表面定義場景調(diào)度碰撞檢測地形匹配實(shí)體操縱輸入映射與解釋狀態(tài)設(shè)置視點(diǎn)控制交互設(shè)計二維地圖特殊效果外部輸入圖5-1通用漫游引擎框架結(jié)構(gòu)示意圖DOF實(shí)體約束系統(tǒng)狀態(tài)控制機(jī)制外部輸入(包括各種傳感器輸入及可能的網(wǎng)絡(luò)命令等)主要完成四方面(1)狀態(tài)設(shè)置:用于定制漫游系統(tǒng),在漫游過程中打開/關(guān)閉漫游引擎提供的某些功能,包括設(shè)置特殊效果以及是否使用二維地圖向?qū)?。?)視點(diǎn)控制:控制漫游系統(tǒng)中觀察相機(jī)的運(yùn)動,在相機(jī)運(yùn)動的過程中,完成場景調(diào)度控制、碰撞檢測與響應(yīng)、地形匹配等功能。(3)交互設(shè)計:在漫游過程中進(jìn)行簡單的虛擬場景動態(tài)交互設(shè)計。(4)實(shí)體操縱:對虛擬環(huán)境中的實(shí)體實(shí)施選擇、操縱。如開/關(guān)門窗等。漫游引擎的狀態(tài)機(jī)制
通用漫游框架中定義的絕大多數(shù)功能都被定義為可選擇項,也就是說,漫游者可以根據(jù)自己的需要打開或關(guān)閉某些功能,如開/關(guān)霧化效果、開/關(guān)二維地圖、決定是否進(jìn)行碰撞檢測、選擇透明處理方式等。另一方面,漫游者還可以對漫游系統(tǒng)的初始狀態(tài)進(jìn)行設(shè)置,比如觀察相機(jī)的初始位置、相機(jī)行進(jìn)的速度步長、轉(zhuǎn)角的步長、系統(tǒng)模擬的氣候條件(晴、多云、陰)、時段(早晨、中午、傍晚)等。輸入設(shè)備映射鍵盤鼠標(biāo)游戲桿步行器傳感器用戶控制指令視點(diǎn)控制相機(jī)運(yùn)動參數(shù)映射解釋圖5-2輸入設(shè)備映射與視點(diǎn)控制視點(diǎn)控制模型walker_heighteye_height行走相機(jī)觀察相機(jī)v_p1v_p0v_p2w_p1w_p0w_p2step-step
圖5-3漫游引擎中的視點(diǎn)控制模型其他策略場景調(diào)度控制碰撞檢測與響應(yīng)地形匹配技術(shù)二維地圖漫游向?qū)б勒沼嬎銠C(jī)圖形學(xué)正投影的原理,將三維場景模型“壓縮”到一個平面上,然后運(yùn)用相機(jī)資源,實(shí)現(xiàn)地圖的顯示、縮放以及二維與三維視點(diǎn)的同步運(yùn)動基于霧化效果的恒定幀頻技術(shù)
場景組織及碰撞檢測技術(shù)基本求交計算——基本幾何體求交場景組織——包含多個物體碰撞檢測——場景下求交場景此處是廣義概念,指三維物體所在的空間。(并非OpenGVS中場景)OpenGVS中場景是基本的資源,繪圖數(shù)據(jù)在此保存。場景是零個或多個實(shí)體實(shí)例的集合。判斷一個點(diǎn)是否在多邊形內(nèi)的方法叉積判斷法(僅適用于凸多邊形)夾角之和檢驗(yàn)法交點(diǎn)計數(shù)檢驗(yàn)選擇算法的關(guān)鍵是計算復(fù)雜度Vi=Pi–P0,i=1,2,…n,Vn+1=V1P0在多邊形內(nèi)的充要條件是ViХVi+1的符號相同P1P2P3P4P5P0一條射線與長方體是否相交,可以采用Cyrus-Back算法(簡稱C-B算法)在一般的射線與長方體求交時,是對射線進(jìn)行逐面求交并判斷,這樣這樣當(dāng)射線與長方體有交時,至少要求出與兩個面的交點(diǎn),而當(dāng)射線與長方體無交時,必須將射線與六個面均求交后方可確定?;谕苟嗝骟w裁剪的C-B算法利用矢量的概念進(jìn)行求解,運(yùn)算效率較高多邊形邊界上的任意點(diǎn)p1,p2,N為其中一點(diǎn)處的內(nèi)法線:N.(p2-p1)>=0V1.V2=|V1|.|V2|.cos(θ)兩矢量垂直,點(diǎn)積為0由于在凸多邊形內(nèi)部,-Π/2≤θ≤Π/2,故其點(diǎn)積恒非負(fù)假設(shè)fi為邊界上一點(diǎn),直線方程為X=p0+Dt則如果與該邊界相交,有:N.(P0+Dt-fi)=0即:N.(P0-fi)+(N.D)t=0,即可得到t,求出與該邊界的交點(diǎn)場景組織包含多個物體后如何快速求交?空間數(shù)據(jù)組織結(jié)構(gòu)空間結(jié)構(gòu)信息包圍體層次球,AABB,OBB,k-DOP(離散有向多面體)用于加速繪制和各種計算與查詢靜態(tài),動態(tài)場景空間結(jié)構(gòu)信息BSP樹軸對齊BSP樹計算開銷比較大可以進(jìn)行粗排序?qū)cclusionCulling有利靜態(tài)場景多邊形對齊BSP樹計算開銷大從后到前嚴(yán)格遍歷靜態(tài)場景空間結(jié)構(gòu)信息OCTree普通八叉樹預(yù)處理計算開銷大更新困難靜態(tài)場景松散八叉樹空間結(jié)構(gòu)信息與邏輯語義信息SceneGraph高層數(shù)據(jù)結(jié)構(gòu)(紋理,變換。。)狀態(tài)切換少場景描述能力強(qiáng)不需要預(yù)處理靜態(tài),動態(tài)直接應(yīng)用碰撞檢測場景裁減GEOMETRYFACILITYGV_geo_inq_intersection(scene,&p0,&p1,type_mask,exclude,&data);G_Booleanisc_result;//G_TRUEifintersectionoccuredGV_Obiisc_object;//NULLifnone,otherwisehandleGV_Obiisc_sub_object;//NULLorHandleGV_Geo_faceisc_face;//NULLifnone,otherwisehandlefloatisc_range;//RangetointersectionG_Vector3isc_point;//Pointofintersection可見性裁減視錐細(xì)節(jié)裁剪視錐裁剪遮擋裁剪細(xì)節(jié)裁剪
GPU技術(shù)概述GPUGraphicsProcessingUnitGPU歷史1999年——Geforce256——GPU2001年——Geforce3——可編程2006年——ATI的X1900XTX(R580),NVIDIA的GeForce7900GTX(G71)2006年底——G80
概述GPGPU(GeneralPurposeComputationOnGraphicsHardware)WHYGPGPU?價格性能目標(biāo):使廉價的GPU能夠被開發(fā)人員更好的作為計算處理器應(yīng)用GPUvs.CPUCPUGPU每次處理單個/組數(shù)據(jù)每次處理一個數(shù)據(jù)流通用功能專用于圖形繪制存儲系統(tǒng)側(cè)重于延時小存儲系統(tǒng)側(cè)重于大吞吐量串行執(zhí)行任務(wù)固有的并行結(jié)構(gòu)GPUvs.CPU“流”計算模型流(Stream):一組具有相同計算和操作的數(shù)據(jù)紀(jì)錄核心(kernel):對數(shù)據(jù)流中每個元素進(jìn)行操作的函數(shù),以一個或多個流作為輸入,產(chǎn)生一個或多個流作為輸出。經(jīng)典的例子:繪制流水線GPU適于計算密集,高并行的計算,GPU設(shè)計了更多的晶體管專用于數(shù)據(jù)處理,而非數(shù)據(jù)高速緩存和流控制GPU與計算機(jī)體系結(jié)構(gòu)CPU芯片、計算機(jī)主內(nèi)存、顯卡接口和南橋芯片分別連在北橋芯片上由北橋芯片負(fù)責(zé)協(xié)調(diào)它們之間數(shù)據(jù)的傳輸GPU與計算機(jī)體系結(jié)構(gòu)圖形連接器(Graphicsconnector)PCI最大132MB/secAGP 最大264MB/secx8(AGP8x)PCIExpress最大8GB/sec(PCI-E16x4G上行,4G下行)GPU與計算機(jī)體系結(jié)構(gòu)采用PCI-E(16x)總線情況下的各部分帶寬GPU的結(jié)構(gòu)和繪制流程頂點(diǎn)處理部分(VS)Setup&光柵化部分像素(片元)處理部分(PS)GPU的結(jié)構(gòu)和繪制流程頂點(diǎn)處理部分完成頂點(diǎn)變換、光照計算,紋理地址計算等功能VertexTextureFetchGPU的結(jié)構(gòu)和繪制流程三角形設(shè)定器/光柵化部件(3D->2D)完成圖元組裝、根據(jù)視棱錐和用戶裁剪平面進(jìn)行裁剪、齊次除法、視區(qū)縮放、背向面和視區(qū)剔除、設(shè)置三角形、光柵化處理等功能GPU的結(jié)構(gòu)和繪制流程像素處理部分PixelShaderUnit(PSU像素著色單元)TextureMappingUnit(TMU貼圖單元)rasteroperation(ROP像素結(jié)果輸出處理器)GPU的結(jié)構(gòu)和繪制流程GPU的結(jié)構(gòu)和繪制流程一般3D繪制流程:GPGPU可用資源GPU擅長于什么樣的運(yùn)算?數(shù)據(jù)上平行且獨(dú)立高算法強(qiáng)度 ArithmeticIntensity= o
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑工程意向協(xié)議書
- 聯(lián)合培訓(xùn)合作協(xié)議范文
- 石榴嫁接方法繁殖方法
- 隱性權(quán)協(xié)議書范文
- 2025報價轉(zhuǎn)讓合同范文
- 2025土地資產(chǎn)贈與合同
- 2025抵押物借款合同模板
- 2025經(jīng)銷商法務(wù)合同模板
- 室內(nèi)設(shè)計行業(yè)話務(wù)員工作總結(jié)
- 2025有關(guān)委托代理的合同
- 2024年日語培訓(xùn)機(jī)構(gòu)市場供需現(xiàn)狀及投資戰(zhàn)略研究報告
- 2024年公安機(jī)關(guān)理論考試題庫附參考答案(基礎(chǔ)題)
- 歷史-廣東省大灣區(qū)2025屆高三第一次模擬試卷和答案
- 2024年安全生產(chǎn)法律、法規(guī)、標(biāo)準(zhǔn)及其他要求清單
- 2023年高考文言文閱讀設(shè)題特點(diǎn)及備考策略
- 抗心律失常藥物臨床應(yīng)用中國專家共識
- 考級代理合同范文大全
- 2024解析:第三章物態(tài)變化-講核心(原卷版)
- DB32T 1590-2010 鋼管塑料大棚(單體)通 用技術(shù)要求
- 安全行車知識培訓(xùn)
- 2024年安徽省高校分類對口招生考試數(shù)學(xué)試卷真題
評論
0/150
提交評論