查看: 1709|回复: 7

模型矩阵保存从新加载问题

[复制链接]

该用户从未签到

发表于 2012-11-23 10:14:44 | 显示全部楼层 |阅读模式
我在程序中首先获得node结点的matrixList,然后将list最后一个matrix保存到文本文件中
osg::MatrixList list = node->getWorldMatrices();
osg::Matrixf matrix = list.at(list.size() - 1);(实验的时候list里面有两个矩阵,但是两个矩阵里面的内容一模一样,所以只保存了一个)
但是我在重新打开模型读取已保存的矩阵,用如下方式恢复时
osg::ref_ptr<osg::MatrixTransform> trans = new osg::MatrixTransform();
trans->setMatrix(matrix);
trans->addChild(node.get());
却发现模型的位置、旋转角度和缩放比例不是我保存前的样子,有人知道是什么原因么?@array 大牛……求指教啊!

该用户从未签到

发表于 2012-11-23 10:35:24 | 显示全部楼层
我觉得应该用computeLocalToWorld获取在世界坐标系下的变换矩阵

该用户从未签到

发表于 2012-11-23 13:38:20 | 显示全部楼层
1:确认在你存储的时候是否删除了已经存储了的这个矩阵
2:确保读取进来的矩阵添加到了正确的位置,而不是原节点的父节点或子节点
3:看你的设置明显存在一个问题,直接将矩阵设置到了该模型的上层,原有继承关系已经错了

该用户从未签到

发表于 2012-11-23 16:36:35 | 显示全部楼层
node 多算了一次

该用户从未签到

 楼主| 发表于 2012-11-25 16:05:45 | 显示全部楼层
小手一拿 发表于 2012-11-23 10:35
我觉得应该用computeLocalToWorld获取在世界坐标系下的变换矩阵

你好……我用computeLocalToWorld尝试了……还是不对!

该用户从未签到

 楼主| 发表于 2012-11-25 16:07:52 | 显示全部楼层
gis_wudi 发表于 2012-11-23 13:38
1:确认在你存储的时候是否删除了已经存储了的这个矩阵
2:确保读取进来的矩阵添加到了正确的位置,而不是原节 ...

矩阵添加的位置是真确的……原来的node结点其实也是一个MatrixTransform结点……层次关系也是对的……跟第一次加载时一模一样……到现在还是没有找到问题所在!

该用户从未签到

发表于 2012-11-26 10:04:18 | 显示全部楼层
osg::Matrixf matrix 应该保存的是 它的父节点到根节点的矩阵 node->getWorldMatrices();这个计算已经包含一次node

该用户从未签到

 楼主| 发表于 2012-11-26 11:46:08 | 显示全部楼层
liuzhiyu123 发表于 2012-11-26 10:04
osg::Matrixf matrix 应该保存的是 它的父节点到根节点的矩阵 node->getWorldMatrices();这个计算已经包含一 ...

求指点……那我要怎么做呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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