查看: 1453|回复: 8

如何向转换矩阵里写数据

[复制链接]

该用户从未签到

发表于 2010-2-10 16:08:18 | 显示全部楼层 |阅读模式
上次我问过这个问题,版主老大说直接matrix.set(ptr)就可以了,我是这样用的
float  data[16];
osg::matrix m;
float* data_ptr=data;
m.set(data_ptr);
结果矩阵中的数据和data[16]中的不一样,这是怎么回事?难道是我理解有误?

该用户从未签到

发表于 2010-2-10 17:31:39 | 显示全部楼层
您至少得说一下,是如何不一样
注意OSG内部总是统一使用行矩阵,因此如果您保存的数组是列矩阵的话,那么需要手动变换一下

该用户从未签到

 楼主| 发表于 2010-2-11 08:12:10 | 显示全部楼层
是数据完全变了,我先将一个矩阵中的元素按照matrix.ptr()递加的方式写入xml,要用的时候先将数据按顺序读出来,写入float data[16],然后就是上面的步骤,最后再将得到的新矩阵写入xml发现数据完全对不上啊!

该用户从未签到

发表于 2010-2-11 11:26:17 | 显示全部楼层
我试验了您的代码,没有发现问题:
  1. float data[16];
  2. for ( int i=0; i<16; ++i ) data[i] = (float)i;
  3. osg::Matrix m;
  4. float* data_ptr=data;
  5. m.set(data_ptr);
  6. std::cout << m;
复制代码

该用户从未签到

 楼主| 发表于 2010-2-11 14:09:29 | 显示全部楼层
版主老大,您的std::cout << m;可以输出吗?我就是复制你以上的代码,输出只这样写的:
float* tem_data=(float*)m.ptr();
for(int i=0;i!=16;i++)
{
    cout<<*tem_data<<endl;
    tem_data++;
}
结果输出还是不对啊!

该用户从未签到

 楼主| 发表于 2010-2-11 14:09:42 | 显示全部楼层
版主老大,您的std::cout << m;可以输出吗?我就是复制你以上的代码,输出只这样写的:
float* tem_data=(float*)m.ptr();
for(int i=0;i!=16;i++)
{
    cout<<*tem_data<<endl;
    tem_data++;
}
结果输出还是不对啊!

该用户从未签到

 楼主| 发表于 2010-2-11 14:10:02 | 显示全部楼层
版主老大,您的std::cout << m;可以输出吗?我就是复制你以上的代码,输出只这样写的:
float* tem_data=(float*)m.ptr();
for(int i=0;i!=16;i++)
{
    cout<<*tem_data<<endl;
    tem_data++;
}
结果输出还是不对啊!

该用户从未签到

发表于 2010-2-11 14:28:19 | 显示全部楼层
  1. #include <osg/io_utils>
复制代码
这之后,您就可以用 << 操作符来调试输出Vec2/3/4,Matrix以及Quat的内容了,非常方便

至于您的输出为什么不对~~其实很简单,osg::Matrix是Matrixd而非Matrixf!!因此,只要改为:
  1. double* tem_data=(double*)m.ptr();
复制代码

此外烦请您不要重复发帖,谢谢

该用户从未签到

 楼主| 发表于 2010-2-11 14:34:09 | 显示全部楼层
哦~刚才是一不小心多点了两下,多发了两遍,不好意思啊~谢了啊老大~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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