我要发帖 回复

中级会员

3

主题

118

积分

0

专家分

兴趣点(最多三项):

Unity引擎
VegaPrime
Openscenegraph

私信
发表时间 : 2019-5-19 11:41:26 | 浏览 : 1879    评论 : 2
本帖最后由 Jasmin 于 2019-5-19 12:11 PM 编辑

http://www.52vr.com/thread-991-1-1.html
这里讲了如何获取dof节点在世界坐标系中的位置,但是关于如何设置没有后续的讨论了

http://www.52vr.com/thread-36682-1-1.html
这本书的随书代码里有在vp5中获取dof节点在世界坐标系中的位置的相关代码
  1. //获取dof节点在世界坐标系中的位置及姿态
  2. void CVP5SIMView::FindDofWCSPosRot(vsDOF* P_dof,double *dof_x,double *dof_y,double *dof_z,double *dof_h,double *dof_p,double *dof_r)
  3. {
  4.         if (P_dof==NULL)
  5.         {
  6.                 return;
  7.         }
  8.         vsTraversalLocate *travLocate=new vsTraversalLocate();
  9.         travLocate->setMode(vsTraversalLocate::MODE_MATRIX_STACK|vsTraversalLocate::MODE_NODE_STACK);
  10.         travLocate->visit(P_dof);
  11.         vuMatrix<double>m=travLocate->getTopMatrixStack();
  12.         m.getTranslate(dof_x,dof_y,dof_z);
  13.         m.getRotate(dof_h,dof_p,dof_r);
  14.         travLocate->unref();
  15. }
复制代码
然后仿照这个改写一下发现编译能通过,但是dof节点并没有运动。
下面是我的代码,请各位大大帮忙看看:
  1. void CVP5SIMView::SetDofWCSPosRot(vsDOF* P_dof,double dof_x,double dof_y,double dof_z,double dof_h,double dof_p,double dof_r)
  2. {
  3.         if (P_dof==NULL)
  4.         {return;}
  5.         vsTraversalLocate *travLocate=new vsTraversalLocate();
  6.         travLocate->setMode(vsTraversalLocate::MODE_MATRIX_STACK|vsTraversalLocate::MODE_NODE_STACK);
  7.         travLocate->visit(P_dof);
  8.         vuMatrix<double>m=travLocate->getTopMatrixStack();}
复制代码


最近VR访客

sichuanwww 评论于2019-5-20 08:03:04
Jasmin 发表于 2019-5-19 11:41 AM
http://www.52vr.com/thread-991-1-1.html
这里讲了如何获取dof节点在世界坐标系中的位置,但是关于如何设 ...

你这只是获取dof的坐标,
设置坐标,直接用setTranslate(x,y,z,h,p,r)。
单纯的dof在仿真环境里是看不见的,要想看得见,dof必须带有仿真可见的孩子。
努力挣钱,快乐生活!
Jasmin 评论于2019-5-20 10:25:54
sichuanwww 发表于 2019-5-20 08:03 AM
你这只是获取dof的坐标,
设置坐标,直接用setTranslate(x,y,z,h,p,r)。
单纯的dof在仿真环境里是看不见 ...

谢谢回答。我的dof节点下面是有子模型

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

GMT+8, 2023-3-29 09:06 PM

返回顶部