改變路徑時(shí)指定控制點(diǎn)的速度_第1頁
改變路徑時(shí)指定控制點(diǎn)的速度_第2頁
改變路徑時(shí)指定控制點(diǎn)的速度_第3頁
改變路徑時(shí)指定控制點(diǎn)的速度_第4頁
改變路徑時(shí)指定控制點(diǎn)的速度_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、轉(zhuǎn)帖分享怎樣在應(yīng)用程序中改變運(yùn)動(dòng)路徑中指定控制點(diǎn)的速度?代碼下面這段程用于改變運(yùn)動(dòng)路徑中指定控制點(diǎn)的速度:void setNavMarkerSpeed( const int navIdx,路徑索弓 Iconst int pointIdx, 控制點(diǎn)索引const float speed ) 指定速度(char data256;unsigned ctrlptIdx = -1;int eventType = -1;double value = -1;unsigned nbytes = 0;bool idxFound = false;vgSplineNavigator *navigator = vgG

2、etNavigator( navIdx );if( navigator = NULL )return;int render = vgProp( navigator, VGSPLINENAV_RENDER );int navstate = vgProp( navigator, VGCOMMON_ENABLED );vgProp( navigator, VGSPLINENAV_RENDER, VG_OFF );vgProp( navigator, VGCOMMON_ENABLED, VG_OFF );vgUpdate(navigator );int numMarkers = vgGetProp(

3、navigator,VGNAV_NUM_MARKERS);for( int j = 0; j numMarkers; j+ )(vgNavigatorGetMarker( (vgNavigator*)navigator,j,&ctrlptIdx,&eventType,&value,(void*)data,&nbytes );if( eventType = VGSPLINENAV_VELOCITY & pointIdx = ctrlptIdx) ( vgNavigatorMarker( (vgNavigator*)navigator,j,pointIdx,VGSPLINENAV_VELOCITY

4、,speed,NULL, 0 );idxFound = true;break;)if( !idxFound )(vgNavigatorAddMarker( navigator,pointIdx,VGSPLINENAV_VELOCITY, speed,NULL, 0);)vgMakeSplineNavigator(navigator);if( render = VG_ON )vgProp( navigator, VGSPLINENAV_RENDER, VG_ON );if( navstate = VG_ON )vgProp( navigator, VGCOMMON_ENABLED, VG_ON

5、);)轉(zhuǎn)帖分享怎樣用程序在運(yùn)動(dòng)模式和運(yùn)動(dòng)路徑之間進(jìn)行轉(zhuǎn)換代碼下面兩個(gè)函數(shù)分別用于讓觀察者在運(yùn)動(dòng)模式和運(yùn)動(dòng)路徑之間進(jìn)行轉(zhuǎn)換:void switchObsToNavigator( const int navIdx ) 轉(zhuǎn)為按指定的運(yùn)動(dòng)路徑 navIdx(vgObserver *obs = vgGetObserv(0)vgNavigator *nav = (vgNavigator*) vgGetSplineNavigator( navIdx );vgProp( nav, VGCOMMON_ENABLED, VG_ON );vgProp( nav, VGPLYR_SPLINE_NAVIGATOR, V

6、G_ON );vgProp( obs, VGCOMMON_ENABLED, VG_ON );vgProp( obs, VGOBS_TETHERSTATE, VGOBS_FIXED );vgProp( obs, VGOBS_TETHERCOORD, VGOBS_TPLAYER );vgPlayer *plyr = vgGetPlyr(0);vgPlyrNav( plyr, nav );vgObservPlyr( obs, plyr );)void switchObsMotionModel( const int motIdx ) 轉(zhuǎn)為按指定的運(yùn)動(dòng)模式 motIdx運(yùn)動(dòng) (vgObserver *o

7、bs = vgGetObserv(0);vgObservNav( obs, NULL );vgObservPlyr( obs, NULL );vgNavigator *nav = (vgNavigator*) vgGetSplineNavigator(0);vgProp( nav, VGCOMMON_ENABLED, VG_OFF );vgProp( nav, VGPLYR_SPLINE_NAVIGATOR, VG_OFF );vgMotion *mot = vgGetMot(motIdx);vgProp( mot, VGCOMMON_ENABLED, VG_ON );vgUpdate( mo

8、t );vgObservMot( obs, mot );vgProp( obs, VGOBS_TETHERCOORD, VGOBS_TABSOLUTE);vgProp( obs, VGOBS_TETHERSTATE, VGOBS_DYNAMIC );vgProp( obs, VGCOMMON_ENABLED, VG_ON );)手動(dòng)添加路徑完整代碼,但有一問題:自動(dòng)漫游時(shí)不能到達(dá)路徑末端,這是為何(內(nèi)詳,附代碼)?在場景中手動(dòng)添加控制點(diǎn),形成路徑,然后自動(dòng)漫游,漫游時(shí)第一個(gè)控制點(diǎn)能夠準(zhǔn)確定位,但是漫游到路徑的末端時(shí),卻總是停在最后一個(gè)控制點(diǎn)的稍前處,這是為何?有沒有大俠知道???void mai

9、n()(vgWindow *win;vgObserver *obs;vgPath *path;vgSplineNavigator *nav;vgPosition *pos;int numPts, idx;vgInitSys();vgDefineSys(town.adf);vgConfigSys();win = vgGetWin(0);obs = vgGetObserv(0);path = vgNewPath(my.pth, NULL);nav = vgNewSplineNavigator(my.nav, path);numPts = 0;idx = 0;bool bDelFile = fals

10、e;while(1)(vgSyncFrame();vgFrame();switch(vgGetWinKey(win)(case VGWIN_F5:pos = vgNewPos();vgGetPos(obs, pos);vgPathAddCtrlPointPos(path, pos);vgDelPos(pos);numPts+;break;case VGWIN_F6:vgProp(nav, VGCOMMON_ENABLED, VG_ON);vgProp(nav, VGSPLINENAV_START_INDEX, 0);vgNavigatorAddMarker(nav, 0, VGSPLINENA

11、V_HERMITE, 0, NULL, 0);vgNavigatorAddMarker(nav, 0, VGSPLINENAV_START_DELAY 1, NULL, 0);/渲染導(dǎo)航路徑for(idx = 1; idx numPts; idx+)vgNavigatorAddMarker(nav, idx, VGNAV_EMPTY, 0, NULL, 0);vgMakeSplineNavigator(nav);/按路徑運(yùn)動(dòng)vgProp(obs, VGOBS_TETHERSTATE, VGOBS_NAVIGATOR);vgObservNav(obs, (vgNavigator*)nav);br

12、eak;default:break;)#include vg.h#include vgutil.h voidsetNavigatorOverallSpeed( const int navIdx,const float speed )(char data256;unsigned ctrlptIdx = -1;int eventType = -1;double value = -1;unsigned nbytes = 0;vgSplineNavigator *navigator = vgGetNavigator( navIdx );if( navigator = NULL )return;int

13、render = vgProp( navigator, VGSPLINENA/_RENDER );int navstate = vgProp( navigator, VGCOMMON_ENABLED );vgProp( navigator, VGSPLINENA/_RENDER, VG_OFF ); vgProp( navigator, VGCOMMON_ENABLED, VG_OFF );vgUpdate( navigator );int numMarkers = vgGetProp( navigator,VGNA/_NUM_MARKERS);for( int j = 0; j numMar

14、kers; j+ )(vgNavigatorGetMarker( (vgNavigator*)navigator,j, &ctrlptIdx, &eventType, &value, (void*)data, &nbytes );if( eventType = VGSPLINENA/_VELOCITY ) (vgNavigatorMarker( (vgNavigator*)navigator, j, ctrlptIdx, VGSPLINENAV_VELOCITY, speed, NULL, 0 );vgProp( navigator,VGSPLINENAV_VELOCITY, speed );

15、vgMakeSplineNavigator(navigator);if( render = VG_ON )vgProp( navigator, VGSPLINENA/_RENDER, VG_ON );if( navstate = VG_ON )vgProp( navigator, VGCOMMON_ENABLED, VG_ON );關(guān)于對(duì)player創(chuàng)建導(dǎo)航器得問題!牛人幫忙看看請(qǐng)問這一段對(duì)player創(chuàng)建導(dǎo)航器得代碼有什么問題阿實(shí)現(xiàn)目標(biāo)是在起始點(diǎn)和終點(diǎn)間直線運(yùn)動(dòng)void liftone(float x,float y,float z,float h,float p,float float x

16、1,float y1,float z1,float h1,float p1,float r1) (vgPath *path;vgSplineNavigator *nav;vgPosition *pos;vgPlayer *plyr;float ctrlPtsMAXNUM6;float old;int numPts,idx;plyr = vgFindPlyr(box2);path = vgNewPath(PATH_FILE,NULL);numPts=0;idx=0;pos=vgNewPos();vgPosVec(pos,x,y,z,h,p,r);vgPathAddCtrlPointPos(pat

17、h,pos);ctrlPtsnumPts0=x;ctrlPtsnumPts1=y;ctrlPtsnumPts2=z;ctrlPtsnumPts3=h;ctrlPtsnumPts4=p;ctrlPtsnumPts5=r;vgDelPos(pos);numPts+;pos=vgNewPos();vgPosVec(pos,x1,y1,z1,h1,p1,r1);vgPathAddCtrlPointPos(path,pos);ctrlPtsnumPts0=x1;ctrlPtsnumPts1=y1;ctrlPtsnumPts2=z1;ctrlPtsnumPts3=h1;ctrlPtsnumPts4=p1;

18、ctrlPtsnumPts5=r1;vgDelPos(pos);numPts+;if(numPts)(nav=vgNewSplineNavigator(NAV_FILE,path);vgProp(nav,VGCOMMON_ENABLED,VG_ON);vgProp(nav,VGSPLINENAV_START_INDEX,0);vgProp(nav,VGSPLINENAV_LOOPVG_ON);vgNavigatorAddMarker(nav,0,VGSPLINENAV_LINEAR,0,NULL,0);vgNavigatorAddMarker(nav,0,VGSPLINENAV_START_DELAY2,NULL,0);vgNavigatorAddMarker(nav,0,VGSPLINENAV_VELOCITY30,NULL,0);vgNavigatorAddMarker(nav,0,VGSPLINENAV_ABSOLUTE_HPR,VG_ON,NULL,0);vgNavigatorAddMarker(nav,0,VGSPLINENAV_RENDER,VG_ON,NULL,0);for(idx=1;idxNUMPTS;IDX+)(vgNavigatorAddMarker(nav,idx,VGNAV_EMPTY0,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論