查看: 2235|回复: 2

如何用键盘方向键控制模型在场景中移动

[复制链接]

该用户从未签到

发表于 2012-4-16 13:06:21 | 显示全部楼层 |阅读模式
最近刚刚接触OSG,想实现如下效果:用键盘的上下左右键来控制加入到场景里面的模型做出相应的移动反应,求大神指教实现方法,谢谢!

该用户从未签到

发表于 2012-4-16 21:04:49 | 显示全部楼层
class CPlayHandler : public osgGA::GUIEventHandler
{
//构造和析构自己写

public:
virtual bool handle (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa, \
                osg::Object *object, osg::NodeVisitor *nv)
{
      osg::ref_ptr<osg:ositionAttitudeTransform> pat = dynamic_cast<osg::PositionAttitudeTransform*>(object); //假设您的模型是加载到PositionAttitudeTransform节点下面的

   switch (ea.getEventType())
                {
                case osgGA::GUIEventAdapter::KEYDOWN:
                        {
                                switch (ea.getKey())
                                {
                                case 'w':
                                      pat->setPosition(pat->getPosition() + osg::Vec3(0, 2, 0)); //按W键向Y轴正方向移动
                                break;
                               }
                        }
                 }

    return true;
}
}



void main()
{
     osg::ref_ptr<osg::PositionAttitudeTransform> pat = new osg::PositionAttitudeTransform;
        pat->addChild(osgDB::readNodeFile("XXXXX")).get()l); //加载模型

       pat->setEventCallback(new CPlayHandler); //事件回调函数


       //在把Pat节点加入到您的屏幕中去
      //一般是这样:
      osg::Group *root = new osg::Group();
     root->addChild(pat.get());

    osgViewer::Viewer viewer;
        viewer.setSceneData(root);
    viewer.realize();
        viewer.run();

}




上面是随手写的一段代码,具体的话,您看着修改嘛,反正这个思路是可以达到您的目的的~~~

该用户从未签到

 楼主| 发表于 2012-4-17 09:36:08 | 显示全部楼层
l917685120 发表于 2012-4-16 21:04
class CPlayHandler : public osgGA::GUIEventHandler
{
//构造和析构自己写

非常感谢~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表