查看: 1071|回复: 6

用MatrixTransform如何同时实现translate 和 scale调整

[复制链接]

该用户从未签到

发表于 2015-1-14 22:15:31 | 显示全部楼层 |阅读模式
似乎总是一个覆盖另一个
已经尝试过的方法
Matrix m = MtNode->getMatrix();
m = m*osg::matrix::translate(vec3(1, 2, 3));
MtNode->setMatrix(m);

Matrix m = MtNode->getMatrix();
m = m*osg::matrix::rotate(vec3(1, 2, 3));
MtNode->setMatrix(m);

这样不行,两个调整效果不能一起体现出来。

MtNode->setMatrix(osg::matrix::rotate(vec3(1, 2, 3))* osg::matrix::translate(vec3(1, 2, 3)));
也是不行

甚至在osg文件里 找到节点下面的矩阵 设置成这样
scale 0 0 0
0 scale 0 0
0 0 scale 0
trans trans trans 1
也不行

请问一下这到底是怎么回事 有什么问题我没有注意到吗

该用户从未签到

 楼主| 发表于 2015-1-14 22:23:59 | 显示全部楼层
我是在这篇帖子的基础上继续做的http://bbs.osgchina.org/forum.ph ... tid=9230&extra=
可能是这个模型比较怪 需要做一个translate,这样套在外面的碰撞体才能在旋转的时候紧贴模型。同时这个模型还需要做一个scale,要不然和其他零件装配不到一起。
现在尝试了以上的各种方法都不能同时translate 和scale

该用户从未签到

发表于 2015-1-15 09:16:42 | 显示全部楼层
矩阵左乘  scale*translate 或 translate*scale  然后再setMatrix

该用户从未签到

发表于 2015-1-15 09:47:17 | 显示全部楼层
矩阵变换最好遵守s*r*t的级联规律,要不很容易把自己搞蒙

该用户从未签到

 楼主| 发表于 2015-1-15 10:42:30 | 显示全部楼层
我觉得是模型的原因
我这个模型是从3dMax里面 用osgexp的那个插件导出 成为.osg格式的

因为我昨天晚上用cow.osg试了一下,不管怎么变换都没有问题 应该不是命令调用的问题

有没有谁知道 在3dMax导出.osg文件时候 设置等等方面 应该注意一些什么呢

该用户从未签到

发表于 2015-1-15 14:50:03 | 显示全部楼层
两次矩阵变换的矩阵写在一次计算里,具体的看书上吧,矩阵变换的顺序有规定

该用户从未签到

发表于 2015-4-7 15:55:48 | 显示全部楼层
Matrix m = MtNode->getMatrix();
m = m*(osg::matrix::rotate(vec3(1, 2, 3))*osg::matrix::translate(vec3(1, 2, 3)));
MtNode->setMatrix(m);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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