DOF 主要用来控制围绕某一点进行旋转,当然也可以进行平移操作。在很多时候,都希望得到某个DOF 点的坐标。首先要认识到,对于坐标来说,包含本地坐标和世界坐标。本地坐标,就是DOF 相对于物体本身而言;绝对坐标,是DOF 相对于场景而言。
对于DOF的操作,首先要找到DOF所在的物体,在上一节已经使用了这样的代码,找到名称为“m1_tank”的物体“tank”:
vpObject * tank=vpObject::find("m1_tank");
找到“tank”上名称为“barrelDOF”的DOF,同时加以引用:
m_barrel=static_cast<vsDOF *>(tank->find_named("barrelDOF"));
m_barrel->ref();
创建一个转换m_mainGunTransform:
vsTransform * m_mainGunTransform=new vsTransform();
m_mainGunTransform->setTranslate(0.14,3.22,0.0);
使转换m_mainGunTransform 成为m_barrel的“孩子”:
m_barrel->push_back_child(m_mainGunTransform);
找到名称为“maingunflash”的特效,同时加以引用:
m_mainGunFlash=vpFxParticleSystem::find("maingunflash");
m_mainGunFlash->ref();
使特效m_mainGunFlash 成为转换m_mainGunTransform的孩子:(www.daowen.com)
m_mainGunTransform->push_back_child(m_mainGunFlash);
这样,实际上就完成了利用转换把火焰特效放到炮管尾部的功能。
编写了一个静态函数获取DOF的绝对坐标:
其中,pDOF 为目标DOF 指针,另外分别设置了3个double 类型的指针变量,用来返回获取的坐标值。其详细代码如图6.20.1所示。
图6.20.1 获取DOF的绝对坐标
编写了一个静态函数,获取DOF的相对坐标:
void PublicMember::CTS_GetRelativePositionFromDOF(vsDOF * pDOF,
double *x,double *y,double *z,double *h,double *p,double *r);
其中,pDOF 为目标DOF 指针,另外分别设置了6个double 类型的指针变量,用来返回获取的坐标值。其详细代码如图6.20.2所示。
图6.20.2 获取DOF的相对坐标
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。