|
楼主 |
发表于 2009-12-6 20:50:42
|
显示全部楼层
本帖最后由 口口广大 于 2009-12-6 23:10 编辑
意思是地形模型其实是椭球体的近似方格,你先转换为X,Y,Z,你再使用osg::Vec3d computeLocalUpVector (double X, double Y, double Z) const 就可以了~~~~
FlySky 发表于 2009-12-6 11:58 -
- osg::Vec3d m_center;
- csn->getEllipsoidModel()->convertLatLongHeightToXYZ(osg::inDegrees(40.0f),osg::inDegrees(120.0f),0.0f,double(m_center.x()),double(m_center.y()),double(m_center.z()));
- osg::Vec3d center;
- center.set(csn->getEllipsoidModel()->computeLocalUpVector(m_center.x(),m_center.y(),m_center.z()));
复制代码 是这样用吗?怎么osg::Vec3d center得出来的结果是三个小于1的数?
还有一个问题,在地心坐标系如何设置一个模型的方位向量(pitch,row,yaw)?比如我想放一个房子在东经120,北纬40的地方,如果是在平面坐标系下,我只要让房子的坐标轴和平面的坐标轴一致就可以了,因为平面坐标系的Z轴始终指向一个方向。但在地心坐标系下,就不知如何计算方位了。
我知道用以上computeLocalUpVector算出的向量可以设置该模型的方位,但不知道该怎麽用。
我是用一个PositionAttitudeTransform来设置模型的位置和方位
不知以下的代码对不对?
- osg::Quat rotation =(osg::Quat(center.x(),osg::Vec3(1.0,0.0,0.0))*osg::Quat(center.y(),osg::Vec3(0.0,1.0,0.0))*osg::Quat(center.z(),osg::Vec3(0.0,0.0,1.0)));
- myObject->PositionAttitudeTransform->setAttitude(rotation);
-
复制代码
|
|