查看: 803|回复: 2

谁能给个思路

[复制链接]

该用户从未签到

发表于 2012-3-10 11:03:31 | 显示全部楼层 |阅读模式
现在我做魔方,已经把所有模型按照相应的位置摆放整齐,我想按照整个立方体,分成九个切面,每次事件相应可以转动整个切面,现在问题是,我不太知道怎样可以控制每个模型的转动,因为我使用,下载一共再场景里面摆放了26个方块,用MatrixTransform方法设置了位置。之后再事件里面,比如说我想让最下面一面向左顺时针旋转90度,需要用什么函数进行操作,并且需要操作哪个对象。
  1. #pragma region 初始化魔方
  2. osg::ref_ptr<osg::Node> InitCube()
  3. {
  4.         osg::ref_ptr<osg::Group> group =new osg::Group;
  5.         osg::ref_ptr<osg::Node> node;
  6.         osg::ref_ptr<osg::Node> node111=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf111.IVE");
  7.         osg::ref_ptr<osg::Node> node112=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf112.IVE");
  8.         osg::ref_ptr<osg::Node> node113=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf113.IVE");
  9.         osg::ref_ptr<osg::Node> node121=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf121.IVE");
  10.         osg::ref_ptr<osg::Node> node122=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf122.IVE");
  11.         osg::ref_ptr<osg::Node> node123=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf123.IVE");
  12.         osg::ref_ptr<osg::Node> node131=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf131.IVE");
  13.         osg::ref_ptr<osg::Node> node132=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf132.IVE");
  14.         osg::ref_ptr<osg::Node> node133=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf133.IVE");

  15.         osg::ref_ptr<osg::Node> node211=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf211.IVE");
  16.         osg::ref_ptr<osg::Node> node212=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf212.IVE");
  17.         osg::ref_ptr<osg::Node> node213=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf213.IVE");
  18.         osg::ref_ptr<osg::Node> node221=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf221.IVE");
  19.         osg::ref_ptr<osg::Node> node223=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf223.IVE");
  20.         osg::ref_ptr<osg::Node> node231=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf231.IVE");
  21.         osg::ref_ptr<osg::Node> node232=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf232.IVE");
  22.         osg::ref_ptr<osg::Node> node233=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf233.IVE");

  23.         osg::ref_ptr<osg::Node> node311=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf311.IVE");
  24.         osg::ref_ptr<osg::Node> node312=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf312.IVE");
  25.         osg::ref_ptr<osg::Node> node313=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf313.IVE");
  26.         osg::ref_ptr<osg::Node> node321=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf321.IVE");
  27.         osg::ref_ptr<osg::Node> node322=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf322.IVE");
  28.         osg::ref_ptr<osg::Node> node323=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf323.IVE");
  29.         osg::ref_ptr<osg::Node> node331=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf331.IVE");
  30.         osg::ref_ptr<osg::Node> node332=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf332.IVE");
  31.         osg::ref_ptr<osg::Node> node333=osgDB::readNodeFile("E:/OSGMofan/OSGMofan/model/mf333.IVE");


  32.         osg::ref_ptr<osg::MatrixTransform> matrix111=new osg::MatrixTransform;
  33.         osg::ref_ptr<osg::MatrixTransform> matrix112=new osg::MatrixTransform;
  34.         osg::ref_ptr<osg::MatrixTransform> matrix113=new osg::MatrixTransform;
  35.         osg::ref_ptr<osg::MatrixTransform> matrix121=new osg::MatrixTransform;
  36.         osg::ref_ptr<osg::MatrixTransform> matrix122=new osg::MatrixTransform;
  37.         osg::ref_ptr<osg::MatrixTransform> matrix123=new osg::MatrixTransform;
  38.         osg::ref_ptr<osg::MatrixTransform> matrix131=new osg::MatrixTransform;
  39.         osg::ref_ptr<osg::MatrixTransform> matrix132=new osg::MatrixTransform;
  40.         osg::ref_ptr<osg::MatrixTransform> matrix133=new osg::MatrixTransform;

  41.         osg::ref_ptr<osg::MatrixTransform> matrix211=new osg::MatrixTransform;
  42.         osg::ref_ptr<osg::MatrixTransform> matrix212=new osg::MatrixTransform;
  43.         osg::ref_ptr<osg::MatrixTransform> matrix213=new osg::MatrixTransform;
  44.         osg::ref_ptr<osg::MatrixTransform> matrix221=new osg::MatrixTransform;
  45.         osg::ref_ptr<osg::MatrixTransform> matrix223=new osg::MatrixTransform;
  46.         osg::ref_ptr<osg::MatrixTransform> matrix231=new osg::MatrixTransform;
  47.         osg::ref_ptr<osg::MatrixTransform> matrix232=new osg::MatrixTransform;
  48.         osg::ref_ptr<osg::MatrixTransform> matrix233=new osg::MatrixTransform;

  49.         osg::ref_ptr<osg::MatrixTransform> matrix311=new osg::MatrixTransform;
  50.         osg::ref_ptr<osg::MatrixTransform> matrix312=new osg::MatrixTransform;
  51.         osg::ref_ptr<osg::MatrixTransform> matrix313=new osg::MatrixTransform;
  52.         osg::ref_ptr<osg::MatrixTransform> matrix321=new osg::MatrixTransform;
  53.         osg::ref_ptr<osg::MatrixTransform> matrix322=new osg::MatrixTransform;
  54.         osg::ref_ptr<osg::MatrixTransform> matrix323=new osg::MatrixTransform;
  55.         osg::ref_ptr<osg::MatrixTransform> matrix331=new osg::MatrixTransform;
  56.         osg::ref_ptr<osg::MatrixTransform> matrix332=new osg::MatrixTransform;
  57.         osg::ref_ptr<osg::MatrixTransform> matrix333=new osg::MatrixTransform;


  58.         matrix111->addChild(node111);
  59.         matrix111->setMatrix(osg::Matrix::translate(0.0,0.0,0.0));
  60.         matrix112->addChild(node112);
  61.         matrix112->setMatrix(osg::Matrix::translate(0.0,0.0,20.0));
  62.         matrix113->addChild(node113);
  63.         matrix113->setMatrix(osg::Matrix::translate(0.0,0.0,40.0));
  64.         matrix121->addChild(node121);
  65.         matrix121->setMatrix(osg::Matrix::translate(0.0,20.0,0.0));
  66.         matrix122->addChild(node122);
  67.         matrix122->setMatrix(osg::Matrix::translate(0.0,20.0,20.0));
  68.         matrix123->addChild(node123);
  69.         matrix123->setMatrix(osg::Matrix::translate(0.0,20.0,40.0));
  70.         matrix131->addChild(node131);
  71.         matrix131->setMatrix(osg::Matrix::translate(0.0,40.0,0.0));
  72.         matrix132->addChild(node132);
  73.         matrix132->setMatrix(osg::Matrix::translate(0.0,40.0,20.0));
  74.         matrix133->addChild(node133);
  75.         matrix133->setMatrix(osg::Matrix::translate(0.0,40.0,40.0));

  76.         matrix211->addChild(node211);
  77.         matrix211->setMatrix(osg::Matrix::translate(20.0,0.0,0.0));
  78.         matrix212->addChild(node212);
  79.         matrix212->setMatrix(osg::Matrix::translate(20.0,0.0,20.0));
  80.         matrix213->addChild(node213);
  81.         matrix213->setMatrix(osg::Matrix::translate(20.0,0.0,40.0));
  82.         matrix221->addChild(node221);
  83.         matrix221->setMatrix(osg::Matrix::translate(20.0,20.0,0.0));
  84.         matrix223->addChild(node223);
  85.         matrix223->setMatrix(osg::Matrix::translate(20.0,20.0,40.0));
  86.         matrix231->addChild(node231);
  87.         matrix231->setMatrix(osg::Matrix::translate(20.0,40.0,0.0));
  88.         matrix232->addChild(node232);
  89.         matrix232->setMatrix(osg::Matrix::translate(20.0,40.0,20.0));
  90.         matrix233->addChild(node233);
  91.         matrix233->setMatrix(osg::Matrix::translate(20.0,40.0,40.0));

  92.         matrix311->addChild(node311);
  93.         matrix311->setMatrix(osg::Matrix::translate(40.0,0.0,0.0));
  94.         matrix312->addChild(node312);
  95.         matrix312->setMatrix(osg::Matrix::translate(40.0,0.0,20.0));
  96.         matrix313->addChild(node313);
  97.         matrix313->setMatrix(osg::Matrix::translate(40.0,0.0,40.0));
  98.         matrix321->addChild(node321);
  99.         matrix321->setMatrix(osg::Matrix::translate(40.0,20.0,0.0));
  100.         matrix322->addChild(node322);
  101.         matrix322->setMatrix(osg::Matrix::translate(40.0,20.0,20.0));
  102.         matrix323->addChild(node323);
  103.         matrix323->setMatrix(osg::Matrix::translate(40.0,20.0,40.0));
  104.         matrix331->addChild(node331);
  105.         matrix331->setMatrix(osg::Matrix::translate(40.0,40.0,0.0));
  106.         matrix332->addChild(node332);
  107.         matrix332->setMatrix(osg::Matrix::translate(40.0,40.0,20.0));
  108.         matrix333->addChild(node333);
  109.         matrix333->setMatrix(osg::Matrix::translate(40.0,40.0,40.0));


  110.         group->addChild(matrix111);
  111.         group->addChild(matrix112);
  112.         group->addChild(matrix113);
  113.         group->addChild(matrix121);
  114.         group->addChild(matrix122);
  115.         group->addChild(matrix123);
  116.         group->addChild(matrix131);
  117.         group->addChild(matrix132);
  118.         group->addChild(matrix133);

  119.         group->addChild(matrix211);
  120.         group->addChild(matrix212);
  121.         group->addChild(matrix213);
  122.         group->addChild(matrix221);
  123.         group->addChild(matrix223);
  124.         group->addChild(matrix231);
  125.         group->addChild(matrix232);
  126.         group->addChild(matrix233);

  127.         group->addChild(matrix311);
  128.         group->addChild(matrix312);
  129.         group->addChild(matrix313);
  130.         group->addChild(matrix321);
  131.         group->addChild(matrix322);
  132.         group->addChild(matrix323);
  133.         group->addChild(matrix331);
  134.         group->addChild(matrix332);
  135.         group->addChild(matrix333);

  136.         return group;
  137. }
  138. #pragma endregion 初始化


  139. void main()
  140. {
  141.         osg::ref_ptr<osgViewer::Viewer> viewer=new osgViewer::Viewer;
  142.        

  143.         viewer->setSceneData(InitCube());
  144.         //viewer->addEventHandler(new osgViewer::HelpHandler());
  145.         viewer->realize();
  146.         viewer->run();

  147. }
复制代码

该用户从未签到

发表于 2012-3-12 10:05:26 | 显示全部楼层
使用四元数旋转

该用户从未签到

 楼主| 发表于 2012-3-12 10:40:05 | 显示全部楼层
array 发表于 2012-3-12 10:05
使用四元数旋转

谢谢array
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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