|
为什么我的地球定位相差很大,下面的经纬度是北京的经纬度小数形式,应该在该位置显示一个飞机模型,可是在地球上显示的压根就不是北京的位置,边缘都算不上,自己感觉是下面设置飞机模型的位置矩阵不正确,可是又不知道如何不正确了,希望达人们能帮忙下,万分感激,谢谢。
#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>
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::EllipsoidModel* ellipsoid = csn->getEllipsoidModel();
if (ellipsoid)
{
osg::Matrix inheritedMatrix;
inheritedMatrix.makeIdentity();
osg::Matrixd matrix(inheritedMatrix);
//osg::Matrixd matrix;
ellipsoid->computeLocalToWorldTransformFromLatLongHeight(39.905555556,116.391388889,100000,matrix);
mt->setMatrix(matrix);
}
csn->addChild(mt);
viewer->setSceneData(csn.get());
viewer->realize();
viewer->run();
return 0;
} |
|