查看: 1785|回复: 3

地球定位不准确

[复制链接]

该用户从未签到

发表于 2009-4-24 10:27:39 | 显示全部楼层 |阅读模式
现在渲染了一个地球,打算在北京的位置放一个飞机模型,可是利用经纬度转换后竟然不是那个位置,不知道是参数转换的问题还是矩阵变换的问题,如下是效果图和代码: earth.JPG

#include "stdafx.h"
#include <osg/Geode>
#include <osg/Group>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osgViewer/Viewer>
#include <osgText/Text>
#include <osg/CoordinateSystemNode>
#include <osg/MatrixTransform>
//#include <osgUtil/>
int _tmain(int argc, _TCHAR* argv[])
{
        osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
        osg::ref_ptr<osg::CoordinateSystemNode> csn = new osg::CoordinateSystemNode();
        csn->setEllipsoidModel(new osg::EllipsoidModel());
        //读取地球模型
        osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("F:/osgtemp/earth.osg");
        csn->addChild(node.get());

        //读取飞机模型
        osg::Node* cessna = osgDB::readNodeFile("cessna.osg");
        osg::MatrixTransform* mt = new osg::MatrixTransform();
        osg::MatrixTransform* scaler = new osg::MatrixTransform();

        //缩放飞机模型到合适的尺寸
        if (cessna)
        {
                double s = 200000.0 / cessna->getBound().radius();
                scaler->addChild(cessna);
                scaler->setMatrix(osg::Matrixd::scale(s,s,s));
                scaler->getOrCreateStateSet()->setMode(GL_RESCALE_NORMAL,osg::StateAttribute::ON);               
        }
        mt->addChild(scaler);

       
        //好像下面的是设置飞机的模型位置
        osg:uat rotation;
        rotation.makeRotate(osg:egreesToRadians(90.0),0.0,0.0,1.0);

        osg::EllipsoidModel* ellipsoid = csn->getEllipsoidModel();
        if (ellipsoid)
        {
                osg::Matrix inheritedMatrix;
                inheritedMatrix.makeIdentity();
                osg::Matrixd matrix(inheritedMatrix);

                //osg::Matrixd matrix;
                ellipsoid->computeLocalToWorldTransformFromLatLongHeight(39.9,116.3,100000,matrix);

                matrix.preMultRotate(rotation);
                mt->setMatrix(matrix);
        }
        csn->addChild(mt);
       
        viewer->setSceneData(csn.get());
        viewer->realize();
        viewer->run();

        return 0;
}
对于上面的代码还有一处疑问,ellipsoid->computeLocalToWorldTransformFromLatLongHeight(39.9,116.3,100000,matrix);中的第三个参数是什么意思  当我把这个值设置小一点的时候,当相机拉近的时候飞机的模型就会消失,不知道是什么原因。

该用户从未签到

 楼主| 发表于 2009-4-24 11:41:26 | 显示全部楼层
结贴,原来是经纬度转换为DD型后还要转换为弧度制而不是角度制  汗!

该用户从未签到

发表于 2009-9-8 11:56:20 | 显示全部楼层
不明白啥意思

该用户从未签到

发表于 2009-9-9 00:39:22 | 显示全部楼层
角度与弧度的转换,呵呵~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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