查看: 2077|回复: 4

请教:osg中如何获取导入的3dmax模型中虚拟体的世界坐标

[复制链接]

该用户从未签到

发表于 2012-3-14 11:25:04 | 显示全部楼层 |阅读模式
请教各位:程序如下:
osg::MatrixTransform *endpos;
……
//末端(endpos)坐标系初始位置(即3dmax模型中虚拟体的坐标系)
        findNodeVisitor foundNodeEndpos("endPos");
        mModel->accept(foundNodeEndpos);
        endpos = dynamic_cast<osg::MatrixTransform*>(foundNodeEndpos.getFirst());
        mEndpos = endpos->getMatrix();

调试发现endpos和mEndpos里存储的是他们的局部坐标位姿矩阵,如果想得到endpos的位置坐标,并且使在osg::Vec3d position;定义下
position能得到endpos的局部或世界位置坐标(不要姿态)该怎么写程序?谢谢


错误程序:
osg::Matrixd midTrans;               
midTrans = *getWorldCoords(endpos);       
osg::Vec3d position;
position = midTrans;出错行
报错如下:
1>error C2679: 二进制“=”: 没有找到接受“osg::Matrixd”类型的右操作数的运算符(或没有可接受的转换)
1>        d:\openscenegraph3.0vs2008\include\osg\vec3d(209): 可能是“osg::Vec3d &osg::Vec3d:perator =(const osg::Vec3d &)”

该用户从未签到

 楼主| 发表于 2012-3-14 12:01:10 | 显示全部楼层
问题补充:试过
position.x() = midTrans[3][0];
position.y() = midTrans[3][1];
position.z() = midTrans[3][2];
但是报错如下:
coreosg.cpp(1807) : error C2676: 二进制“[”: “osg::Matrixd”不定义该运算符或到预定义运算符可接收的类型的转换

该用户从未签到

 楼主| 发表于 2012-3-14 20:15:06 | 显示全部楼层
以上问题已经解决。

该用户从未签到

发表于 2012-4-8 18:56:32 | 显示全部楼层
请问,这个是怎么解决的?

该用户从未签到

 楼主| 发表于 2012-7-29 14:52:54 | 显示全部楼层
yangwangzu 发表于 2012-4-8 18:56
请问,这个是怎么解决的?

不好意思,好久没来论坛了,应该是类型定义错了,osg::Vec3d position;改为osg::Vec3f position;试试吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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