查看: 6550|回复: 10

求助:旋转和平移

[复制链接]

该用户从未签到

发表于 2008-7-23 14:48:36 | 显示全部楼层 |阅读模式
做旋转和平移有
        osg::Matrix t;
        t.makeTranslate(0.,0.,0.);
        t.makeScale(1.f, 1.f, 1.f);
        rotate.makeRotate(RADIAN*(0), osg::Vec3(1,0,0));
        t.set(        1.0,        0.0,        0.0,        0.0,
                0.0,        1.0,        0.0,        0.0,
                0.0,        0.0,        1.0,        0.0,
                0.0,        0.0,        0.0,        1.0        );
但是,好像都是在世界坐标系中旋转平移,
怎样才能让物体在物体坐标系中旋转平移啊?
我想在空间指定物体的旋转轴。

我知道,用rotation matirix, 和traslation matrix 能算出和确定想要的轴。
osg有这样的功能吗?怎么做啊?

该用户从未签到

发表于 2008-7-23 18:27:56 | 显示全部楼层
最好是使用MatrixTransform或者PositionAttitudeTransform节点,直接设置物体的局部坐标系或者执行旋转和平移操作

该用户从未签到

 楼主| 发表于 2008-8-1 11:24:44 | 显示全部楼层
a                          b
|----------------------|

如果和上面一样的物体,有时要以 a 为旋转轴旋转,有时要以 b 为旋转轴旋转

[ 本帖最后由 haicong 于 2008-8-1 11:27 编辑 ]

该用户从未签到

发表于 2008-8-1 13:14:52 | 显示全部楼层
原帖由 haicong 于 2008-8-1 11:24 发表
a                          b
|----------------------|

如果和上面一样的物体,有时要以 a 为旋转轴旋转,有时要以 b 为旋转轴旋转


试一试
osg:: PositionAttitudeTransform::setPivotPoint

该用户从未签到

发表于 2008-8-1 21:43:16 | 显示全部楼层
最好把模型的几何中心与原点重合 检查一下模型是不是?
要不然就使用DOF

该用户从未签到

 楼主| 发表于 2008-8-25 16:45:41 | 显示全部楼层
我在 callback里面用的 如下

osg::PositionAttitudeTransform* mt =dynamic_cast<osg::PositionAttitudeTransform*>(node);
osg::Vec3 axis(0.,0.,0.);
osg::Vec3 position(0., 0., 0.);
mt->setPivotPoint(axis);
mt->setPosition(position);

mt->setAttitude(
osg::Quat(
osg::DegreesToRadians(0.0),
osg::Vec3d(1.0, 0.0, 0.0),
osg::DegreesToRadians(0.0),
osg::Vec3d(0.0, 1.0, 0.0),
osg::DegreesToRadians(0.0),
osg::Vec3d(0.0, 0.0, 1.0)
        )
);

旋转轴是能控制了,但是物体的位置怎么乱七八糟的,搞不懂啊 ~

[ 本帖最后由 haicong 于 2008-8-25 16:48 编辑 ]

该用户从未签到

发表于 2008-8-25 16:56:18 | 显示全部楼层
您看到的屏幕中心不一定是世界的原点,这跟漫游器与摄像机的观察矩阵都有关

该用户从未签到

发表于 2009-7-13 21:50:25 | 显示全部楼层
也是有同样的问题
是不是osg:ositionAttitudeTransform* mt =dynamic_cast<osg::PositionAttitudeTransform*>(node);
mt->setPivotPoint(axis);
设置节点的位置
节点的旋转中心点就到axis?

该用户从未签到

发表于 2009-7-13 22:55:47 | 显示全部楼层
setPivotPoint用来设置旋转和缩放的中心点

该用户从未签到

发表于 2009-7-29 15:54:05 | 显示全部楼层
1.好像这个问题好普遍了。我现在也在想实现一个物体旋转,可是楼上的回答都是指定数值的轴。如果鼠标选中一个要旋转的物体,要以这个物体的中心(物体中心和场景中心不重合)来旋转怎么办?阿锐可否详细解答一下。还有osg:: PositionAttitudeTransform::setPivotPoint设置的是绝对的还是相对的。
2.setScale好像使得材质变化,变得白亮状态。不知道为什么?有贴图的不受影响。

该用户从未签到

发表于 2009-7-30 00:53:40 | 显示全部楼层
抱歉我最近没有足够的事件来详细回答问题,简单说的话,绕某个向量v旋转就是先平移到v、旋转、然后平移到-v的过程。可以直接参看PositionAttitudeTransform地实现代码,写得非常清楚
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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