Hi David,
The problem is most likely that the IntersectVisitor is implemented
using floats.
The two solutions are:
1) Do the intersect in local coordinates of the terrain, i.e. below
the tiles matrix transform,
and then transform the local intersection into global coords
2) Implement a double intersect visitor.
Robert.
On 6/7/06, David Lascombe <[EMAIL PROTECTED]> wrote:
Actually the problem is that I don't have any transform node. I give my
tank's Lattitude Longitude Altitude coordinates (like 43.5°N 5.2°E 0.0m) and
I use a toolkit to convert these coordinates to earth centered ones. Then I
can directly create the scene with my earth centered tile and my tank being
in the same frame.
The code to compute intersection looks like this :
osg::LineSegment* tankLocationSeg=new osg::LineSegment();
osg::Vec3d coords(tank->getCoords());
tankLocationSeg->set(coords,osg::Vec3d(0.0,0.0,0.0)); // segment between
tank's position and Earth's center
osgUtil::IntersectVisitor findTankElevationVisitor;
findTankElevationVisitor.addLineSegment(tankLocationSeg);
terrainNode->accept(findTankElevationVisitor);
osgUtil::IntersectVisitor::HitList tankElevationLocatorHits;
tankElevationLocatorHits=findTankElevationVisitor.getHitList(tankLocationSeg);
osgUtil::Hit heightTestResults;
osg::Vec3d ground(tankElevationLocatorHits.front().getWorldInterectPoint());
tank->setPosition(ground);
I get a flying or underground tank depending on where on the map it is. And
this is a real problem...
Is there another way of getting the good intersection point?
Tanks again,
david
>Well, the idea is that you have surface tiles below a transform node, where
>the transform node is just a translation from the earth centered coordinate
>frame to a tile centered coordinate frame. That transformation should be
>done with doubles.
>In this case you need to transform your intersection start point to that
>tile centered coordinate frame (still in double values).
>If you have reasonable tile sizes, you should be near enough to continue
>with floats. At this point you can take the intersect visitor and use its
>hit values.
>
> Greetings
>
> Mathias
_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/
_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/