我要发帖 回复

正式会员

5

主题

71

积分

0

专家分

:

私信
发表时间 : 2006-9-1 13:49:14 | 浏览 : 3325    评论 : 13
这个问题困扰本人好久,并且已经影响到项目的进程,特来请教。
navigator上控制点速度在修改时导航器需要处于关闭状态,并且每进行一次修改后都只能从路径上已经控制点处开始,这样在进行速度改变时,从视觉上就会产生停顿现象,并且视点每次只会在固定的位置开始,我想让一个视点在进行路径导航运行时,随时响应外设输入,改变视点所在位置速度,然后让导航器从速度改变的这一点开始更新,请问怎么解决?

最近VR访客

vrer 评论于2006-9-1 13:53:41
obuil兄,如果知道怎么交解决,请不吝赐教。
administrator专家组 评论于2006-9-1 14:03:09
那可以动态创建导航器,动态取得数据加入到导航器中
administrator专家组 评论于2006-9-1 14:04:44
至于速度控制,就可以把那个帖子的代码结合在下面一起了
  1. void liftone(float x,float y,float z,float h,float p,float r,float x1,float y1,float z1,float h1,float p1,float r1)
  2. {

  3. vgPath *path;
  4. vgSplineNavigator *nav;
  5. vgPosition *pos;
  6. vgPlayer *plyr;


  7. float ctrlPts[MAXNUM][6];
  8. float old;
  9. int numPts,idx;


  10. plyr = vgFindPlyr("box2");
  11. path = vgNewPath(PATH_FILE,NULL);

  12. numPts=0;
  13. idx=0;

  14. pos=vgNewPos();

  15. vgPosVec(pos,x,y,z,h,p,r);
  16. vgPathAddCtrlPointPos(path,pos);

  17. ctrlPts[numPts][0]=x;
  18. ctrlPts[numPts][1]=y;
  19. ctrlPts[numPts][2]=z;
  20. ctrlPts[numPts][3]=h;
  21. ctrlPts[numPts][4]=p;
  22. ctrlPts[numPts][5]=r;
  23. vgDelPos(pos);
  24. numPts++;

  25. pos=vgNewPos();

  26. vgPosVec(pos,x1,y1,z1,h1,p1,r1);
  27. vgPathAddCtrlPointPos(path,pos);

  28. ctrlPts[numPts][0]=x1;
  29. ctrlPts[numPts][1]=y1;
  30. ctrlPts[numPts][2]=z1;
  31. ctrlPts[numPts][3]=h1;
  32. ctrlPts[numPts][4]=p1;
  33. ctrlPts[numPts][5]=r1;
  34. vgDelPos(pos);
  35. numPts++;

  36. if(numPts)
  37. {
  38.   nav=vgNewSplineNavigator(NAV_FILE,path);
  39.   vgProp(nav,VGCOMMON_ENABLED,VG_ON);
  40.   vgProp(nav,VGSPLINENAV_START_INDEX,0);
  41.   vgProp(nav,VGSPLINENAV_LOOP,VG_ON);
  42.   vgNavigatorAddMarker(nav,0,VGSPLINENAV_LINEAR,0,NULL,0);
  43.   vgNavigatorAddMarker(nav,0,VGSPLINENAV_START_DELAY,2,NULL,0);
  44.   vgNavigatorAddMarker(nav,0,VGSPLINENAV_VELOCITY,30,NULL,0);
  45.   vgNavigatorAddMarker(nav,0,VGSPLINENAV_ABSOLUTE_HPR,VG_ON,NULL,0);
  46.   vgNavigatorAddMarker(nav,0,VGSPLINENAV_RENDER,VG_ON,NULL,0);
  47.   
  48.   for(idx=1;idx  {
  49.    vgNavigatorAddMarker(nav,idx,VGNAV_EMPTY,0,NULL,0);
  50.   }
  51.   
  52.   vgMakeSplineNavigator(nav);
  53.   printf("There are %d CtrlPoints with !\n",(int)vgGetProp(path,VGPATH_NUM_CTRLPTS));
  54.   printf("there are %d Markers!\n",(int)vgGetProp(nav,VGNAV_NUM_MARKERS));
  55.   
  56.   
  57.   vgProp(plyr,VGPLYR_SPLINE_NAVIGATOR,VG_ON);
  58. vgPlyrNav(plyr,(vgNavigator *)nav);
  59.   
  60. }

  61. }
复制代码
vrer 评论于2006-9-1 14:07:50
我现在就是用动态创建导航器解决的,但有个小问题不好解决,就是在弯道或者上下坡时,新生成的路径和导航器和我预先设定的不一致,直线段是没问题的,并且如果频繁进行加减速,要生成很多的导航器,程序会报错。
administrator专家组 评论于2006-9-1 15:41:35
为什么一定要是用导航器呢?
vgPos()参数中 直接读入你的数据值 文件
这样 你就可以想怎么动 就怎么动了
vrer 评论于2006-9-1 15:54:01
我主要是要模拟列车沿轨道行驶,如果只是更新vgPos()的参数,更新位置信息所得到的视点就会很随意,不能沿轨道行驶,如果通过读取外部数据的方式提供位置信息,就无法使一些天气特性与之编定,并且速度的控制也不好实现,所以一直很头疼,找不到合适的方法。
vrer 评论于2006-9-3 22:25:12
类似的问题没有人找到合适的解决方法吗?
seven0610 评论于2008-3-25 13:15:23
这个老问题还是想请教下
谢谢
yangwang21 评论于2008-4-2 21:21:48
我也正为此而困惑呢,试一下
wwwy 评论于2008-5-29 20:32:13
学习中……
sh_chj8410 评论于2009-4-3 15:27:53

也想请教!

也想请教!
ggw0122 评论于2011-4-13 23:18:57
谢谢了!!!
lgliweisheng 评论于2011-9-29 14:29:13
我懂了!楼上很牛!

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-3-3 11:50 PM

返回顶部