查看: 1869|回复: 12

如果一个node节点不是tramform型的,有什么方法可以变换他的matrix

[复制链接]

该用户从未签到

发表于 2011-9-20 13:20:21 | 显示全部楼层 |阅读模式
如果一个node节点不是tramform型的,有什么方法可以变换他的matrix

该用户从未签到

发表于 2011-9-20 13:24:34 | 显示全部楼层
node->asTransform()

该用户从未签到

发表于 2011-9-20 13:49:58 | 显示全部楼层
你直接将node加到MT下替换就好了~~~~~~~~~~~

该用户从未签到

 楼主| 发表于 2011-9-20 15:48:25 | 显示全部楼层
替换掉??比如?

该用户从未签到

发表于 2011-9-20 16:55:20 | 显示全部楼层
本帖最后由 x_wp 于 2011-9-20 16:57 编辑

动态类型转换不可以吗?比如:
  1. dynamic_cast<osg::MatrixTransform*>(node)
复制代码

海军教程中就是这样做的呀:
  1. osgSim::DOFTransform * gunDOF =
  2.       dynamic_cast<osgSim::DOFTransform *> (findGunNode.getFirst()) ;
复制代码

其中findGunNode.getFirst()的返回值就是node。

该用户从未签到

发表于 2011-9-20 17:55:21 | 显示全部楼层
动态类型转换需要源类型包含转换类型,C++的概念啊!

node加到MT下,很基本的OSG节点操作啊:、
MT->addChild(node);
root->addChild(MT);

该用户从未签到

发表于 2011-9-21 09:03:01 | 显示全部楼层
简单来说您必须添加一个Transform节点,否则这个节点根本就不存在matrix的概念

该用户从未签到

发表于 2011-9-21 11:52:31 | 显示全部楼层

标题

回复 6# tianxiao888

从osg节点的继承关系来看:
Node<-Group<-Transform<-MatrixTransform
DOFTransform也继承自Transform,所以从Node动态转型为Transform或DOFTransform是可以的,但是反过来转换则不行,这就是C++的概念啊!
不喜欢场景图中有那么多多余的节点,所以通过动态转型把部分节点转成希望的类型,使场景图更简洁,这样不好吗?

该用户从未签到

发表于 2011-9-21 13:28:07 | 显示全部楼层
不喜欢场景图中有那么多多余的节点?
场景图的结构是必须的,不可能node动态转换为MT,你概念理解反了~~

该用户从未签到

发表于 2011-9-21 16:06:30 | 显示全部楼层
不好意思,我的确理解错了,刚刚补习了一下,dynamic_cast主要用于类层次间的上行转换和下行转换。上行转换一般没问题,下行转换是有条件的——基类必须有虚函数,如果转换指针出错,则返回为null,所以转换完成后应该检查不为null则进行转换后的操作,海军教程中也是这样做的。
在楼主的例子中实际上就是向下转型,应该是可以做到的呀,可是经过编代码测试,的确行不通,编译可以通过但是运行时转换失败。那为什么海军教程中的例子没问题呢?

场景图结构的确是必须的,我的意思并不是不想遵循它,而是希望结构更简洁。

该用户从未签到

 楼主| 发表于 2011-9-21 16:45:43 | 显示全部楼层
那个MT我需要怎样操作才能从新标定他旋转时所依靠的参考点

该用户从未签到

发表于 2011-9-22 08:41:52 | 显示全部楼层
对于Matrix来说,设置轴心点可以简单地使用:
translate(-pivot) * rotMatrix * translate(pivot)

该用户从未签到

发表于 2011-9-23 07:24:35 | 显示全部楼层

标题

回复 10# x_wp

自己回复吧,呵呵!
osg在读取flt模型时己经把模型中的dof节点设为DOFTransform了,在程序中按名称查找到节点后是把它当作node返回的,也就是说,返回的节点本来就是个DOFTransform,所以动态转换当然没问题,这一点也通过简单的代码测试的确如此。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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