查看: 1721|回复: 12

矩阵操作为何只有最后一个起作用?

[复制链接]

该用户从未签到

发表于 2012-3-6 21:56:46 | 显示全部楼层 |阅读模式
在给一个变换节点增加子节点前,我新生成了一个 矩阵M ,然后依次调用
M.MAKETRANSTLAT(**);
M.MAKEROTATE(***);
M.MAKESCALE(**);
再使用节点的 setmatrix(m)。
运行发现只有最后的缩放起作用,随便注释一个或者调换顺序,发现每次都只有最后一个变换起作用,为什么呢?难道每次变换后M会自动单位化?

该用户从未签到

发表于 2012-3-7 08:38:25 | 显示全部楼层
我也遇到同样的问题
书上的例子可以几句同时起作用
同求教

该用户从未签到

发表于 2012-3-7 09:18:55 | 显示全部楼层
本帖最后由 CWorld 于 2012-3-7 09:19 编辑

   仔细看代码尤其是源代码,在Matrix_implimetation.cpp里面,

   M.MAKETRANSTLAT(**);这些操作都是同一个矩阵,你没有连乘,它怎么会起作用呢?

该用户从未签到

发表于 2012-3-7 09:43:29 | 显示全部楼层
每一个矩阵设置一个matrix,比如rotate,location。。
然后setmatrix(rotate*location)

该用户从未签到

发表于 2012-3-7 09:56:02 | 显示全部楼层
4楼正解

该用户从未签到

发表于 2012-3-7 09:56:05 | 显示全部楼层
4楼正解

该用户从未签到

 楼主| 发表于 2012-3-7 19:12:27 | 显示全部楼层
额 我以为这个和一些别的c++库(如QT)矩阵类一样
MAKE*** 会将当前代表的变换矩阵进行make***变换后保存起来呢。
谢谢各位。
顺便问一个问题,当我们在编辑器按住 CTRL+鼠标左键 的时候,可以直接定位到该函数或者变量的申明处,然后在头文件和CPP文件之间来回切换就可以看源代码了。
可我编译的osg后一般将lib bin include目录分别install出来,这样的话我就不能方便的切换到CPP文件了。想问下要实现那个效果是个什么机理,该如何去做呢。 谢谢

该用户从未签到

发表于 2012-3-10 10:52:45 | 显示全部楼层
rcyboom 发表于 2012-3-7 19:12
额 我以为这个和一些别的c++库(如QT)矩阵类一样
MAKE*** 会将当前代表的变换矩阵进行make***变换后保存起 ...

转到定义,和查看该对象的所有引用,不知道你说的是这个吗?

该用户从未签到

发表于 2012-3-12 10:05:08 | 显示全部楼层
make*()表示重新构建矩阵,同时去除之前的设置。所以反复设置当然只能最后一次起作用

该用户从未签到

 楼主| 发表于 2012-3-16 22:28:11 | 显示全部楼层
diorlv2010 发表于 2012-3-10 10:52
转到定义,和查看该对象的所有引用,不知道你说的是这个吗?

恩 就是这个。
我使用qtcreator,查看qt自带的库时可以自动定位到cpp的定义处,osg我想可能是因为目录不对,所以找不到定义,只能看到声明,该如何设置呢?不可能全部单独找出来放H目录下吧?

该用户从未签到

 楼主| 发表于 2012-3-16 22:30:43 | 显示全部楼层
array 发表于 2012-3-12 10:05
make*()表示重新构建矩阵,同时去除之前的设置。所以反复设置当然只能最后一次起作用

恩 谢谢,已经理解了。请问除了手动连乘之外,osg中有没有提供我问题中说的函数呢?
比如对一个单位矩阵依次进行平移、缩放、旋转,我只需使用M.***操作三次即可?

该用户从未签到

发表于 2012-3-18 14:09:05 | 显示全部楼层
rcyboom 发表于 2012-3-16 22:28
恩 就是这个。
我使用qtcreator,查看qt自带的库时可以自动定位到cpp的定义处,osg我想可能是因为目录不 ...

你用的什么编译器,我用vs2010,可以正常查看

该用户从未签到

发表于 2012-3-20 09:20:01 | 显示全部楼层
可以直接用operator*
例如M1 * M2 * M3
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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