理论教育 VegaPrime虚拟现实开发技术:操作DOF及火焰特效

VegaPrime虚拟现实开发技术:操作DOF及火焰特效

时间:2023-11-24 理论教育 版权反馈
【摘要】:需要注意的是,DOF的命名不能采用默认名称,即d1 等名称。否则,不能依据DOF的名称查找到该DOF。在此例中,命名为turretDOF。图6.19.1DOF 类继承图图6.19.2效果图首先,建立火焰特效,其具体代码如图6.19.3所示。图6.19.3建立火焰特效坦克拥有两个DOF:一个为turretDOF,控制炮塔水平旋转;另一个为barrelDOF,控制炮管上下旋转。

VegaPrime虚拟现实开发技术:操作DOF及火焰特效

需要注意的是,DOF的命名不能采用默认名称,即d1 等名称。否则,不能依据DOF的名称查找到该DOF。在此例中,命名为turretDOF。其次,必须引入DOF 类的头文件为:#include "vsDOF.h"。

类视图如图6.19.1所示。上一节把坦克作为汽车的“孩子”加进了场景,本节将建立一个火焰特效,利用DOF 操作坦克的炮管和炮塔,运行实例VPTestDialogDOF,其效果如图6.19.2所示。

图6.19.1 DOF 类继承图

图6.19.2 效果图

首先,建立火焰特效,其具体代码如图6.19.3所示。

图6.19.3 建立火焰特效

坦克拥有两个DOF:一个为turretDOF,控制炮塔水平旋转;另一个为barrelDOF,控制炮管上下旋转。为了使场景更加逼真,把火焰特效放到炮管末端,在发射炮弹时,火焰特效发生作用。为了应用开发方便,需要定义3个静态变量:2个DOF,1个火焰特效。

static vsDOF * m_turret;//炮塔DOF 指针

static vsDOF * m_barrel;//炮管DOF 指针

static vpFxParticleSystem *m_mainGunFlash;//火焰特效指针

定义完成后,记得要初始化

vsDOF * PublicMember::m_turret=NULL;

vsDOF * PublicMember::m_barrel=NULL;

vpFxParticleSystem *PublicMember::m_mainGunFlash=NULL;

操作DOF 之前,须先获得DOF 指针。而应用中的两个DOF 都在物体坦克上,则先应得到坦克的指针:

vpObject * tank=vpObject::find("m1_tank");

接着,获取坦克上的DOF:

//获取炮塔DOF

PublicMember::m_turret=static_cast<vsDOF *>(tank->find_named("turretDOF"));

PublicMember::m_turret->ref();

//获取炮管DOF

PublicMember::m_barrel=static_cast<vsDOF *>(tank->find_named("barrelDOF"));

PublicMember::m_barrel->ref();

炮管的上下旋转应该在一定范围之内,应该加上限制,才符合实际情况。在这里,限制炮管向下10°,向上25°。

//对炮管进行控制

vsDOF::Constraint constraint;(www.daowen.com)

constraint.m_enable=true;

constraint.m_min=-10.0;

constraint.m_max=25.0;

m_barrel->setConstraint(vsDOF::COMPONENT_ROTATE_P,constraint);

现在,建立一个转换,把火焰特效放到炮管的末端。其方法是让转换成为炮管的“孩子”,然后让火焰特效成为转换的“孩子”。

//创建一个转换,并且让转换成为炮管的“孩子”

vsTransform * m_mainGunTransform=new vsTransform();

m_mainGunTransform->setTranslate(0.14,3.22,0.0);

m_barrel->push_back_child(m_mainGunTransform);

//找到火焰特效,让火焰特效成为转换的“孩子”,这样就把火焰特效放到了炮管尾部

m_mainGunFlash=vpFxParticleSystem::find("maingunflash");

m_mainGunFlash->ref();

m_mainGunTransform->push_back_child(m_mainGunFlash);

详细代码位于主线程中,具体如图6.19.4所示。

图6.19.4 包含DOF 操作的主线程

主线程中的键盘函数需要进一步改造,定义了5个键:

(1)vrWindow::KEY_a:炮台左转;

(2)vrWindow::KEY_d:炮台右转;

(3)vrWindow::KEY_w:炮管向上;

(4)vrWindow::KEY_s:炮管向下;

(5)vrWindow::KEY_SPACE:发射炮弹。

具体的键盘函数如图6.19.5所示。

图6.19.5 键盘函数的一部分

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈