Hello Elias,

since you have created your terrain using --geocentric in osgdem the terrain is indeed in ECEF coordinates, but there is no reason that your cessna model is. Looking at your code, the cessna is at the earth centre (0.0,0.0,0.0). If you want to have your cessna on your terrain you should load your cessna on a PositionAttitudeTransform and move it correctly onto earth surface, using the ellipsoid xyzFromLatLonEle. You should try to place your camera also using this and decomposing your matrix in order to find where is the problem( cam->setViewMatrix(translation * toYup * rotation);) Also you should use as much as possible the osg functionalities in order to use the same math constants (osg::PI_2 instead of _M_PI_2).

Regards,

Christian

Le 17/06/2015 10:39, Elias Tarasov a écrit :
Hello!
It seems i have a problem Deniz had faced previously.
My generated terrain viewed from osgviewer is here:
https://drive.google.com/file/d/0ByDDImhSolf6Szh5YW81MDdqV2M/view?usp=sharing

My gdalinfo for dem file used to generate terrain is here:

Driver: GTiff/GeoTIFF
Files: n30_w086_1arc_v3_conv.tif
        n30_w086_1arc_v3_conv.tif.aux.xml
Size is 58, 50
Coordinate System is:
GEOGCS["WGS 84",
     DATUM["WGS_1984",
         SPHEROID["WGS 84",6378137,298.257223563,
             AUTHORITY["EPSG","7030"]],
         AUTHORITY["EPSG","6326"]],
     PRIMEM["Greenwich",0],
     UNIT["degree",0.0174532925199433],
     AUTHORITY["EPSG","4326"]]
Origin = (-85.495972222222221,30.536250000000003)
Pixel Size = (0.000277777777778,-0.000277777777778)
Metadata:
   AREA_OR_POINT=Point
   DTED_CompilationDate=0002
   DTED_DataEdition=02
   DTED_DigitizingSystem=SRTM
   DTED_HorizontalAccuracy=0013
   DTED_HorizontalDatum=WGS84
   DTED_MaintenanceDate=0000
   DTED_MaintenanceDescription=0000
   DTED_MatchMergeDate=0000
   DTED_MatchMergeVersion=A
   DTED_NimaDesignator=DTED2
   DTED_OriginLatitude=0300000N
   DTED_OriginLongitude=0860000W
   DTED_Producer=USCNIMA
   DTED_RelHorizontalAccuracy=NA
   DTED_RelVerticalAccuracy=0004
   DTED_SecurityCode_DSI=U
   DTED_SecurityCode_UHL=U
   DTED_UniqueRef_DSI=H24 084
   DTED_UniqueRef_UHL=H24 084
   DTED_VerticalAccuracy_ACC=0005
   DTED_VerticalAccuracy_UHL=0005
   DTED_VerticalDatum=E96
Image Structure Metadata:
   INTERLEAVE=BAND
Corner Coordinates:
Upper Left  ( -85.4959722,  30.5362500) ( 85d29'45.50"W, 30d32'10.50"N)
Lower Left  ( -85.4959722,  30.5223611) ( 85d29'45.50"W, 30d31'20.50"N)
Upper Right ( -85.4798611,  30.5362500) ( 85d28'47.50"W, 30d32'10.50"N)
Lower Right ( -85.4798611,  30.5223611) ( 85d28'47.50"W, 30d31'20.50"N)
Center      ( -85.4879167,  30.5293056) ( 85d29'16.50"W, 30d31'45.50"N)
Band 1 Block=58x50 Type=Int16, ColorInterp=Gray
   Min=31.000 Max=61.000
   Minimum=31.000, Maximum=61.000, Mean=49.202, StdDev=6.253
   NoData Value=0
   Unit Type: m
   Metadata:
     STATISTICS_MAXIMUM=61
     STATISTICS_MEAN=49.202413793103
     STATISTICS_MINIMUM=31
     STATISTICS_STDDEV=6.2528388891449
                
Here, center of my terrain is:
Center      ( -85.4879167,  30.5293056) ( 85d29'16.50"W, 30d31'45.50"N)

Now i want to place a camera in the center of that terrain to use it from an 
app:

const double M_PI_2 = 1.57079632679489661923;

int main( int argc, char** argv ) {

        osg::ref_ptr<osg::Group> root = new osg::Group;
        osg::ref_ptr<osg::Node> cessna = 
osgDB::readNodeFile("c:/OpenSceneGraph/data/cessnafire.osg");
        osg::ref_ptr<osg::Node> map = 
osgDB::readNodeFile("c:/Terrain/FromUSGS/output/out.osgb");
        root->addChild( cessna.get() );
        root->addChild( map.get() );
                        
        osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
        viewer->setSceneData( root.get() );

        osg::Matrixd vm;
        osg::EllipsoidModel ellipsoid;
        
ellipsoid.computeLocalToWorldTransformFromLatLongHeight(osg::DegreesToRadians(-85.4877762),
 osg::DegreesToRadians(30.5292506), 100, vm);
        vm.invert(vm);

        osg::Matrixd rotation2YUp;
        rotation2YUp.makeRotate(-M_PI_2, osg::Vec3f(1.0, 0.0, 0.0));
        vm *= rotation2YUp;
        viewer->getCamera()->setViewMatrix(vm);

        return viewer->run();
}

But i don't see anything. Just empty screen.
Well, since terrain had been built in geocentric mode, i think app somehow 
moved terrain and cessna to the correct position in ECEF.
So, i just need to move a camera to that position.

I guess camera's position is wrong, but i don't know how to fix it.

Thank you!

Cheers,
Elias

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





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org




--
SCHULTE Christian
Ingénieur Recherche
Responsable du Laboratoire de Simulation
ONERA - DCSD/PSEV
Département Commande des Systèmes et Dynamique du Vol
ONERA - Centre de Salon de Provence
BA 701
13661 SALON AIR Cedex - France
Tel :04.90.17.01.45

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to