查看: 3410|回复: 12

求教:osg::PositionAttitudeTransform类的函数setPosition(Vec3&)??

[复制链接]

该用户从未签到

发表于 2010-4-17 00:03:35 | 显示全部楼层 |阅读模式
求教:osg:ositionAttitudeTransform类的函数setPosition(Vec3d&)??

这个函数setPosition(const Vec3d&) 中的 vec 是节点在空间中平移的位移,还是节点在空间中新位置的坐标呢?
我看书上写的是 该函数是设置空间中平移的距离;
而我自己在测试实现中,将Vec3设置为(newPos-Pos)时候,节点会空间中来回原地晃动;而当我将Vec3直接设置为(newPos)的时候,节点就正常运动了??
不解???求教~~~

该用户从未签到

发表于 2010-4-17 09:10:18 | 显示全部楼层
我也觉得是新位置,不是相对位置 = =

该用户从未签到

 楼主| 发表于 2010-4-17 18:18:33 | 显示全部楼层
不好意思,我错了,这个setPosition()中的Vec3d&设置的确实是在空间中的平移距离,并不是新位置的空间坐标,是小弟学识浅薄。

该用户从未签到

发表于 2010-4-19 08:37:15 | 显示全部楼层
不好意思,我错了,这个setPosition()中的Vec3d&设置的确实是在空间中的平移距离
现在您才是真的错了……setPosition()设置的是位置,而非移动距离

该用户从未签到

发表于 2010-4-19 11:50:41 | 显示全部楼层

该用户从未签到

发表于 2010-4-19 19:18:08 | 显示全部楼层
PositionTransform节点pat1的setPosition是设置位置坐标,那如果在其之下挂载其他节点时,如挂载另一个PositionTransform节点pat2,则pat2的坐标系是相对于父节点pat1的吗?

还有,就是如果我在PositionTransform节点pat1下挂载一个Geode节点g1,而g1中挂载的是一个Geomery对象,假设是一个Quad,那调用pat1的setPosition(pos)时,那Quad是不就放置在pos上?如果是,那具体Quad上的哪个点对应这个pos呢?

我昨天试着写一个魔兽世界里面那个地图导航功能,就是场景中视点位置变化和旋转后,在导航小图中显示相应的变化状态,在导航小图中,视点就是用一个箭头来表示,进行移动和旋转,在做旋转时,我是先获取场景中视点的旋转角度,然后在导航小图中设置箭头(用PositionTransform节点表示)的setAttitude,而旋转轴就是先getPosition获取到箭头的位置,然后向外延伸至一个定点,这样实现时箭头一下就转出导航图并最终消失了。
对相对位置及旋转轴不解,望请教!

该用户从未签到

 楼主| 发表于 2010-4-19 22:04:38 | 显示全部楼层
4# array 《OSG三维引擎设计与实践》中P77页写的是设置位移的距离啊,而且我按书上例子测试了,现在完全晕了,麻烦您在这里给讲一下吧~~~
谢谢哈

该用户从未签到

发表于 2010-4-20 08:31:11 | 显示全部楼层
《OSG三维引擎设计与实践》中P77页写的是设置位移的距离啊,而且我按书上例子测试了,现在完全晕了,麻烦您在这里给讲一下吧
那句话写得不准确,呵呵;3个月要写600页,所以未斟酌肯定很多,抱歉了。PAT节点相当于设立了一个局部坐标系,它的子节点都位于这个局部坐标系下。如果您要将子节点的顶点换算到世界坐标系中,那么可以说“将这些顶点平移getPosition()的距离,得到它们的世界坐标”,但是并不能这么简单地理解

至于例子倒是没什么问题,pat节点被置于(5,0,0)这个位置上~~

该用户从未签到

发表于 2010-4-20 08:32:51 | 显示全部楼层
PositionTransform节点pat1的setPosition是设置位置坐标,那如果在其之下挂载其他节点时,如挂载另一个PositionTransform节点pat2,则pat2的坐标系是相对于父节点pat1的吗?

是的

还有,就是如果我在PositionTransform节点pat1下挂载一个Geode节点g1,而g1中挂载的是一个Geomery对象,假设是一个Quad,那调用pat1的setPosition(pos)时,那Quad是不就放置在pos上?如果是,那具体Quad上的哪个点对应这个pos呢?

不是这么简单的理解,事实上可以说Quad处于pat局部坐标系下,如果pat节点直接位于场景根节点下,那么Quad每一个顶点的局部坐标 * pat坐标系过渡矩阵 = Quad顶点的世界坐标

该用户从未签到

 楼主| 发表于 2010-4-20 09:59:41 | 显示全部楼层
8# array 要仔细体会一下,谢谢您了,希望您能再出个更详尽的书,为广大OSG爱好者谋福利啊~~~哈哈

该用户从未签到

发表于 2010-4-20 12:30:45 | 显示全部楼层
感谢赐教,明白了,在做相测试时的坐标我应该是取得局部坐标系里的,看来得通过NodePath换成全局坐标系,然后进行求交并旋转

该用户从未签到

发表于 2010-4-20 12:36:24 | 显示全部楼层
看来得通过NodePath换成全局坐标系,然后进行求交并旋转
不用这样,做相交检测时,如果您设置根节点node->accept(iv),那么各层子节点的局部坐标系会被自动级联加入计算,不需要手动转换

该用户从未签到

发表于 2010-4-20 13:33:32 | 显示全部楼层
哦,谢谢指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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