查看: 1401|回复: 3

点击Button移动节点的问题

[复制链接]

该用户从未签到

发表于 2012-10-15 17:48:49 | 显示全部楼层 |阅读模式
自己画了上下左右四个按钮,想实现节点上下左右的移动,不管怎么旋转,如果点击向上移动的按钮,整个节点都向屏幕上方移动,在事件处理里面怎么改变这个matrix才能使得始终向屏幕上方移动???在初始的时候,Z 轴和屏幕上方方向一致,但是旋转之后就不一致了,所以只改变Z轴就不对了。

该用户从未签到

发表于 2012-10-16 10:17:00 | 显示全部楼层
您用的HUD相机来管理这些按钮的么?那样的话可能是您的投影矩阵设置有问题吧

该用户从未签到

 楼主| 发表于 2012-10-16 11:15:30 | 显示全部楼层
array 发表于 2012-10-16 10:17
您用的HUD相机来管理这些按钮的么?那样的话可能是您的投影矩阵设置有问题吧

是的,是用HUD相机来管理这些按钮的。麻烦你帮我看一下,代码如下:
osg::MatrixTransform * modelview = new osg::MatrixTransform;
modelview->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
modelview->setMatrix(matrix);

//这个是以前的方式,用这种方式点击按钮检测不倒交线,然后liuzhiyu123给我指点之后,我用下边的那种方式
//previous method, can not pick
//osg:rojection * projection = new osg:rojection;
//projection->setMatrix(osg::Matrix:rtho2D(0,1280,0,1024)); // or whatever the OSG window res is
//projection->addChild(modelview);

//Current method, can pick 这是现在用的方式
osg::Camera* camera= new osg::Camera;
camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
camera->setProjectionMatrixAsOrtho2D(0,1280,0,1024);
camera->setViewMatrix(osg::Matrix::identity());
camera->setRenderOrder(osg::Camera:OST_RENDER);
camera->setClearMask(GL_DEPTH_BUFFER_BIT);
camera->addChild(modelview);

该用户从未签到

发表于 2012-10-19 16:01:11 | 显示全部楼层
这种参考系之下camera的观察矩阵是单位阵,也就意味着观察方向是从原点向Z-看去,您需要考虑好这是否是您所预期的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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