查看: 3856|回复: 4

关于坐标转换问题!!

[复制链接]

该用户从未签到

发表于 2008-3-19 09:29:47 | 显示全部楼层 |阅读模式
我现在有一个二维平面物体轮廓的点集,我想在三维空间中把这个轮廓画出来,
用OSG怎么将这些二维的坐标转换成三维空间的坐标??

有哪位知道,指点一下! 先谢谢了!

该用户从未签到

发表于 2008-3-19 12:43:26 | 显示全部楼层
既然是平面点,你想画一个立体的三维的物体吗???

该用户从未签到

发表于 2008-3-19 13:22:50 | 显示全部楼层
如果只是想要生成平面图形轮廓:将二维点保存为Vec3类型(其中某个坐标为0),然后用Geometry的setVertexArray就可以了。

该用户从未签到

 楼主| 发表于 2008-3-19 14:20:00 | 显示全部楼层
有没有人用过 osgManipulator:laneProjector 中的 project() 函数,能不能解释一下,这里的投影函数主要是
用来实现什么功能的?? 谢了!

该用户从未签到

发表于 2008-3-19 15:57:42 | 显示全部楼层
原帖由 hzliang 于 2008-3-19 14:20 发表
有没有人用过 osgManipulator:laneProjector 中的 project() 函数,能不能解释一下,这里的投影函数主要是
用来实现什么功能的?? 谢了!


当我们用鼠标点击窗口的某一处时,它会在三维空间的近平面和远平面上各产生一个点。PlaneProjector类的作用就是计算这两个点连线与指定平面的交点坐标,也可以理解为:屏幕坐标投射在三维空间某个指定平面上的世界坐标。例如,下面的代码可以计算出屏幕坐标(0,10)在平面y=z上的世界坐标。(近/远平面是我随意指定的)
  1. osg::Vec3 rtn;
  2. osgManipulator::PointerInfo pi;
  3. pi.setNearFarPoints( osg::Vec3(0,-10000,10), osg::Vec3(0,10000,10) );
  4. osgManipulator::PlaneProjector* pp = new osgManipulator::PlaneProjector;
  5. pp->setPlane( osg::Plane(osg::Vec3(0,-1,1),osg::Vec3(0,0,0)) );
  6. if ( !pp->project( pi, rtn ) ) return 1;
  7. std::cout << "X" << rtn.x() << "Y" << rtn.y() << "Z" << rtn.z() << std::endl;
复制代码

[ 本帖最后由 array 于 2008-3-19 15:59 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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