查看: 1546|回复: 4

osg中怎么得到摄像机当前的屏幕坐标

[复制链接]

该用户从未签到

发表于 2010-12-17 23:53:29 | 显示全部楼层 |阅读模式
osg中怎么得到摄像机当前的屏幕坐标

该用户从未签到

 楼主| 发表于 2010-12-18 14:03:17 | 显示全部楼层
osg::Vec3 x(0,0,0);
        osg::Camera *ca=viewer->getCamera();
//ca->getViewMatrixAsLookAt(x,y,z);
x=x*ca->getProjectionMatrix()*ca->getViewport()->computeWindowMatrix();

对吗?

该用户从未签到

发表于 2010-12-20 11:12:49 | 显示全部楼层
由于观察坐标系下人眼的位置始终为原点,因此可以直接与projection和window矩阵进行操作,即osg::Vec3(0,0,0) * ProjectionMatrix * WindowMatrix

该用户从未签到

 楼主| 发表于 2010-12-20 14:38:40 | 显示全部楼层
但是这样算下来结果都是-1.#ind,-1/#ind,-1.#inf  是不是视点根本对应不到屏幕上呢?

还有一个问题ca->getViewMatrixAsLookAt(x,y,z);中得到的x应该是视点在世界坐标系下的坐标吧?
如果是的话 那么它乘以ca->getViewMatrix()的结果应该是vec3(0,0,0)吧,但是我在程序中得到的确不是,难道是因为浮点运算的精度问题?如果是,怎么保证精度误差呢?
如果我上面理解的不对,那么请告诉我是什么?谢谢

该用户从未签到

发表于 2010-12-20 15:41:44 | 显示全部楼层
但是这样算下来结果都是-1.#ind,-1/#ind,-1.#inf  是不是视点根本对应不到屏幕上呢?
这说明您所用的某个矩阵有问题

ca->getViewMatrixAsLookAt(x,y,z);中得到的x应该是视点在世界坐标系下的坐标吧
对,可能是精度产生的误差,不过通常不会有太大的影响
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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