查看: 1445|回复: 3

os例子程序 osgautocapture 坐标转换的代码

[复制链接]

该用户从未签到

发表于 2012-2-10 09:42:35 | 显示全部楼层 |阅读模式
本帖最后由 CWorld 于 2012-2-10 09:46 编辑

     众所周知,osgautoCapture的例子是截屏例子,其中在指定了相机的 位置(经度lon,纬度lat、高度alt)
    角度(heading,incline,roll)以后,有一段代码计算目标Target的位置和上方向,我想请教这段代码是如何根据位置和角度计算的目标Target的位置:

  这段代码类似于gluLookAt(),其中对于eye的位置还可以理解,但是如何计算切线和目标的位置,请大家帮忙看看。
  1. osg::Vec3d eye;
  2. csn->getEllipsoidModel()->convertLatLongHeightToXYZ(lat, lon, alt, eye.x(), eye.y(), eye.z());
  3. // Build matrix for computing target vector

  4. osg::Matrixd target_matrix = osg::Matrixd::rotate(-heading, osg::Vec3d(1,0,0),
  5.                                                           -lat,     osg::Vec3d(0,1,0),
  6.                                                           lon,      osg::Vec3d(0,0,1));
  7.   
  8.   // Compute tangent vector ...
  9.         osg::Vec3d tangent = target_matrix.preMult(osg::Vec3d(0, 0, 1));
  10.      
  11. // Compute non-inclined, non-rolled up vector ...
  12.         osg::Vec3d up(eye);
  13.         up.normalize();
  14.    
  15. // Incline by rotating the target- and up vector around the tangent/up-vector
  16.       
  17. // cross-product ...
  18.         osg::Vec3d up_cross_tangent = up ^ tangent;
  19.       
  20. osg::Matrixd incline_matrix = osg::Matrixd::rotate(incline, up_cross_tangent);

  21.   osg::Vec3d target = incline_matrix.preMult(tangent);
  22.      
  23. // Roll by rotating the up vector around the target vector ...
  24.         osg::Matrixd roll_matrix = incline_matrix * osg::Matrixd::rotate(roll, target);
  25.      up = roll_matrix.preMult(up);
  26.         
  27.         viewer.getCamera()->setViewMatrixAsLookAt(eye, eye+target, up);
复制代码

该用户从未签到

发表于 2012-2-13 10:03:12 | 显示全部楼层
请参考有关切线空间计算的数学知识

该用户从未签到

 楼主| 发表于 2012-2-14 09:48:57 | 显示全部楼层
    谢谢锐哥的回复和指点,我查了查切线空间的相关资料。网上的资料主要是用于各种贴图技术的。
  对于切线空间,切线,副切线等概念已经理解,但是具体的这段代码还是感觉似是而非,很迷糊。
    Target_matrix是怎么得来的呢?还应该在看看哪方面知识呢。

该用户从未签到

发表于 2012-2-19 13:03:32 | 显示全部楼层
target_matrix是一个欧拉角度转换得到的旋转矩阵。。。我想这是一个纯粹的数学问题了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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