查看: 1471|回复: 12

设计与实践 书中的一个问题

[复制链接]

该用户从未签到

发表于 2011-1-6 18:02:17 | 显示全部楼层 |阅读模式
书中72也关于COW模型旋转会中 用了PositionAttitudeTransform节点 代码osg::ref_ptr < osg:ositionAttitudeTransform > mt
     = dynamic_cast<osg::PositionAttitudeTransform*> (node);
if(pat){
}
if(pat)这个语句用途是什么呢?

该用户从未签到

发表于 2011-1-6 18:22:36 | 显示全部楼层
判断强制转换节点是否为空,如果为空就不进行了,这样保险,也是编码应该的习惯,哈哈~~~~

该用户从未签到

 楼主| 发表于 2011-1-6 19:08:17 | 显示全部楼层
我想知道 如果我用鼠标旋转模型 那怎么获得此时的姿态 书中的代码我试了好像做不到这一点 ?

该用户从未签到

发表于 2011-1-6 20:45:18 | 显示全部楼层
pat.getAttitude()

该用户从未签到

 楼主| 发表于 2011-1-6 21:07:14 | 显示全部楼层
我在回调类里用了pat.getAttitude()函数 但是用鼠标旋转模型时 pat.getAttitude()的值还不变 用鼠标操作时这个函数不能获取模型姿态吗?

该用户从未签到

发表于 2011-1-6 21:14:28 | 显示全部楼层
事件回调里获得pat,然后pat.setAttitude()即可改变姿态

该用户从未签到

 楼主| 发表于 2011-1-6 21:49:20 | 显示全部楼层
OK 我会按照您说到实验 希望可以解决这个问题

该用户从未签到

 楼主| 发表于 2011-1-7 12:51:04 | 显示全部楼层
我用事件回调了 但是一按左键就自动退出不知道为什么代码如下
bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) { osg::ref_ptr viewer = dynamic_cast(&aa);
osg::ref_ptr < osg:ositionAttitudeTransform > mt = dynamic_cast (viewer->getSeceneData());
if (ea.getEventType() == osgGA::GUIEventAdapter::PUSH)
{ if (ea.getButton() == 1) {
double an = 0.0;
osg::Vec3 axis;
mt->getAttitude().getRotate(an, axis);
cout << osg::RadiansToDegrees(an) << endl;
}
}
不知道问题出在哪里了

该用户从未签到

发表于 2011-1-7 13:06:04 | 显示全部楼层
你设置回调节点为动态变度没~~DYNAMIC

该用户从未签到

 楼主| 发表于 2011-1-7 13:18:48 | 显示全部楼层
不还意思纠正下 osg::ref_ptr <osgViewer::Viewer> viewer = dynamic_cast<osgViewer::Viewer*>(&aa);这行代码是这样的 我拷贝错了

该用户从未签到

 楼主| 发表于 2011-1-7 13:32:28 | 显示全部楼层
你设置回调节点为动态变度没~~DYNAMICkingjone 发表于 2011-1-7 13:18
我没明白您的意思 可以说的具体点吗 我对OSG也是初期阶段

该用户从未签到

发表于 2011-1-7 14:19:53 | 显示全部楼层
Node.setDataVarience(DYNAMIC);

该用户从未签到

发表于 2011-1-10 08:40:44 | 显示全部楼层
osg::ref_ptr < osg:: PositionAttitudeTransform > mt = dynamic_cast (viewer->getSceneData());
您需要首先确认,这里是否能得到您所希望的节点,您如何保证getSceneData()肯定为PositionAttitudeTransform类型
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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