Here's a way to place models on the VPB terrain that works pretty good. The
drawback is that you must specify the highest point in the database region.
Using osgSim will ensure that the models will sit on the terrain at that
LOD...:)

double X,Y,Z;
double maxElevation = 13000.0 / 3.281; // feet to meters...
earth->convertLatLongHeightToXYZ(lat, lon, maxElevation, X, Y, Z);
double hat =
osgSim::HeightAboveTerrain::computeHeightAboveTerrain(terrain.get(),
osg::Vec3d(X,Y,Z), -1);
hot = maxElevation - hat;

-Shayne

-----Original Message-----
From: osg-users-boun...@lists.openscenegraph.org
[mailto:osg-users-boun...@lists.openscenegraph.org] On Behalf Of Lv Qing
Sent: Saturday, December 05, 2009 8:19 AM
To: osg-users@lists.openscenegraph.org
Subject: [osg-users] [vpb] convertLatLongHeightToXYZ problem with
ageocentric coordinate earth

Hi,

I have build a geocentric coordinate earth model using VPB and want to put a
simple model on the suface of the earth.

I use the convertLatLongHeightToXYZ function to convert the
BLH(Lat,Long,Height) of the simple model to XYZ of the 
geocentric coordinate system.The result of X and Y seems OK,but the Z
coordinate  is always a bit higher above the earth suface(about 5000 m).



Code:

// load the earth model
osg::CoordinateSystemNode* csn = new osg::CoordinateSystemNode;
csn->setEllipsoidModel(new osg::EllipsoidModel());
osg::Node* TerrainNode= osgDB::readNodeFile("earth.osga");
csn->addChild(TerrainNode);

//convert the BLH(50,130,0) to XYZ,I set height 0.
osg::Vec3d m_surface;
csn->getEllipsoidModel()->convertLatLongHeightToXYZ(osg:egreesToRadians(50.0
f),osg:egreesToRadians(130.0f),0.0f,double(m_surface.x()),double(m_surface.y
()),double(m_surface.z()));

//draw a simple yellow line from center of the earth (osg::Vec3(0,0,0)) to
the surface (osg::Vec3d m_surface);

osg::Geode *geode_line = new osg::Geode; 
osg::Geometry *geom = new osg::Geometry();
geode_line->addDrawable(geom);
csn->addChild(geode_line);
osg::Vec3Array *v = new osg::Vec3Array();
v->push_back(osg::Vec3(0,0,0));
v->push_back(m_center);
geom->setVertexArray(v);
osg::Vec4Array *vc = new osg::Vec4Array();
vc->push_back(osg::Vec4(1.0f,0.5f,0.0f,1.0f));
geom->setColorArray(vc);
geom->setColorBinding(osg::Geometry::BIND_PER_PRIMITIVE);    
geom->addPrimitiveSet(new osg:rawArrays(osg:rimitiveSet:INES,0,2));





As the result ,the end of the yellow line is obviously higher than the
surface.Please tell me where I am wrong,THX!
Thank you!

Cheers,
Lv

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=20950#20950




Attachments: 
http://forum.openscenegraph.org//files/getattachment1_418.jpg


_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to