Re: [osg-users] Placing Text Labels in Geodetic Projection

2008-03-18 Thread Robert Osfield
Hi Jason,

This is a bit of long shot, but you could try using osg::AutoTransform
instead of the scaling functionality in osgText, just decorate the
Text with an AutoTransform that has auto scale and rotate enabled.
The AutoTransform can position the text as well.

Robert.

On Tue, Mar 18, 2008 at 6:35 PM, Jason Beverage <[EMAIL PROTECTED]> wrote:
> Hi Robert,
>
> I would have hoped just using a MatrixTransform on top and SCREEN_COORDS for
> characterSize would have worked as well, but it doesn't at very zoomed in
> levels in my case.  This  is due to to the fact that osgText is resizing the
> glpyh quads to maintain the character size onscreen instead of drawing the
> text in an orthographic projection.  Actually, if you simply set the text to
> SCREEN_COORDS and zoom as far as you can to the text, the text will actually
> disappear completely and never re-appear even if you zoom back out b/c the
> size of the quads has went to zero.
>
> I believe the intersection problem is due to the use of floats in Text.cpp
> to compute the glyph positions and also that PrimitiveFunctor is using
> floats internally to compute the intersections.  I could be wrong about
> PrimitiveFunctor b/c I believe I saw a recent change that added double
> support.
>
> Thanks!
>
> Jason
>
>
>
> On Tue, Mar 18, 2008 at 12:56 PM, Robert Osfield <[EMAIL PROTECTED]>
> wrote:
> >
> >
> >
> >
> > On Tue, Mar 18, 2008 at 4:42 PM, Jason Beverage <[EMAIL PROTECTED]>
> wrote:
> > > Overall though, does the approach I'm suggesting with using the
> > > UpdateCallback and the Hud Camera to get around my intersection problems
> > > sound reasonable or am I overcomplicating things?
> >
> > It sounds like overcomplicating to me, the more complicated the more
> > difficult it'll be to debug, and even harder for anyone else to be
> > able to try and get their head around what you are doing.  Given you
> > are using an older version of the OSG it makes it a next to impossible
> > task to support.
> >
> > OSG-1.2 does support double Matrices by default, so I would have
> > though  as MatrixTransform above the text labels
> > would get you most of the way.  You could try look for where the
> > precision issue is arising and tweaking the OSG to use doubles to help
> > out.
> >
> > Robert.
> >
> >
> >
> >
> > ___
> > osg-users mailing list
> > osg-users@lists.openscenegraph.org
> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >
>
>
> ___
>  osg-users mailing list
>  osg-users@lists.openscenegraph.org
>  http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Placing Text Labels in Geodetic Projection

2008-03-18 Thread Jason Beverage
Hi Robert,

I would have hoped just using a MatrixTransform on top and SCREEN_COORDS for
characterSize would have worked as well, but it doesn't at very zoomed in
levels in my case.  This  is due to to the fact that osgText is resizing the
glpyh quads to maintain the character size onscreen instead of drawing the
text in an orthographic projection.  Actually, if you simply set the text to
SCREEN_COORDS and zoom as far as you can to the text, the text will actually
disappear completely and never re-appear even if you zoom back out b/c the
size of the quads has went to zero.

I believe the intersection problem is due to the use of floats in
Text.cppto compute the glyph positions and also that PrimitiveFunctor
is using
floats internally to compute the intersections.  I could be wrong about
PrimitiveFunctor b/c I believe I saw a recent change that added double
support.

Thanks!

Jason

On Tue, Mar 18, 2008 at 12:56 PM, Robert Osfield <[EMAIL PROTECTED]>
wrote:

> On Tue, Mar 18, 2008 at 4:42 PM, Jason Beverage <[EMAIL PROTECTED]>
> wrote:
> > Overall though, does the approach I'm suggesting with using the
> > UpdateCallback and the Hud Camera to get around my intersection problems
> > sound reasonable or am I overcomplicating things?
>
> It sounds like overcomplicating to me, the more complicated the more
> difficult it'll be to debug, and even harder for anyone else to be
> able to try and get their head around what you are doing.  Given you
> are using an older version of the OSG it makes it a next to impossible
> task to support.
>
> OSG-1.2 does support double Matrices by default, so I would have
> though  as MatrixTransform above the text labels
> would get you most of the way.  You could try look for where the
> precision issue is arising and tweaking the OSG to use doubles to help
> out.
>
> Robert.
> ___
> osg-users mailing list
> osg-users@lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Placing Text Labels in Geodetic Projection

2008-03-18 Thread Robert Osfield
On Tue, Mar 18, 2008 at 4:42 PM, Jason Beverage <[EMAIL PROTECTED]> wrote:
> Overall though, does the approach I'm suggesting with using the
> UpdateCallback and the Hud Camera to get around my intersection problems
> sound reasonable or am I overcomplicating things?

It sounds like overcomplicating to me, the more complicated the more
difficult it'll be to debug, and even harder for anyone else to be
able to try and get their head around what you are doing.  Given you
are using an older version of the OSG it makes it a next to impossible
task to support.

OSG-1.2 does support double Matrices by default, so I would have
though  as MatrixTransform above the text labels
would get you most of the way.  You could try look for where the
precision issue is arising and tweaking the OSG to use doubles to help
out.

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


Re: [osg-users] Placing Text Labels in Geodetic Projection

2008-03-18 Thread Jason Beverage
Hi Robert,

I've been using the 2.x branch in personal projects and test projects and
have kept up to date with the SVN version for the most part (it's tough with
so much going on so fast!) and I'm REALLY happy with the way 2.x has
progressed.  It's much easier to use and feels *right* to me in nearly every
aspect.  The osgViewer project has made things much easier in 2.x and things
are much more consistent.

The issue with us moving to 2.x is that our application is in C# and is
based on hand rolled Managed C++ OSG 1.2 wrappers.  I don't want to hand
update these wrappers as I feel this really adds an uneeded layer of
maintainance.  Sadly, the osgDotNet project started off great, but still has
unresolved crashes that keep us from using it and it appears that
development has all but stopped on it.  The recent discussions on the
mailing list about using C++/CLI directly with OSG by hesicong and others
seem extremely promising though.

Overall though, does the approach I'm suggesting with using the
UpdateCallback and the Hud Camera to get around my intersection problems
sound reasonable or am I overcomplicating things?

Thanks!

Jason



On Tue, Mar 18, 2008 at 12:03 PM, Robert Osfield <[EMAIL PROTECTED]>
wrote:

> Hi Jason,
>
> 2.x is generally more consistent w.r.t use of doubles internally so
> will tend to suffer less from precision issues.  However, without
> testing you exact setup I can't say whether these general improvements
> will help with this specific problem you have.
>
> W.r.t. porting from OSG-1.x to OSG-2.x, it might not actually be as
> bad as you feel, in you are using osgUtil::SceneView you'll find the
> majority of the OSG will just recompile with no changes.   There is a
> few changes in API that might catch you out, but substantially the OSG
> is still the same scene graph.
>
> The biggest change between OSG-1.x and OSG-2.x is the osgProducer
> replaced by osgViewer  and the new CMake build system, since you don't
> use osgProducer then the build system is the biggest change.  It is
> however, a big improvement in terms of cross platform support, so
> while a bit of learning curve is well worth it.
>
> Robert.
>
> On Tue, Mar 18, 2008 at 3:54 PM, Jason Beverage <[EMAIL PROTECTED]>
> wrote:
> > Hi all,
> >
> > I've written a 2D viewer that displays geospatial imagery in an
> orthographic
> > projection using a WGS-1984 geodetic projection so the units are in
> degrees.
> >
> > I am placing text labels with their character size specified in
> > SCREEN_COORDS.  When I zoom in very close, the quality of the text
> starts to
> > suffer b/c the glyph quads are so small that they are losing precision
> when
> > rendering.  Placing a MatrixTransform above the text to position it
> locally
> > reduces the visual problems but there are still some present.
> >
> > The main problem I have is that the text cannot be selected if I zoom in
> > close.  I can see the text fine, but clicking on it doesn't result in a
> hit
> > b/c the intersections are all done using floats and the text glyphs are
> > extermely small because of the autosizing.
> >
> > I found a potential solution using the latest version of OpenSceneGraph
> > which places the text in an orthographic HUD camera and positions it at
> the
> > correct space on the earth using the callback at the end of this email.
> > Intersections work well and the text looks very crisp.
> >
> > We are currently using OpenSceneGraph 1.2 and are rolling our own viewer
> > using SceneView and IntersectVisitor (NOT IntersectionVisitor) in our
> > application and cannot update this spiral due to time constraints.
> > IntersectVisitor does not seem to work correctly in picking items placed
> in
> > a CameraNode in the 1.2 version.
> >
> > Does anyone have any suggestions on how I could fix this issue using
> > OpenSceneGraph 1.2 and does the solution I found for using the latest
> > version of OSG make sense or I am missing something painfully obvious?
> >
> >  Thanks!
> >
> > Jason
> >
> > struct HudTextUpdateCallback : public osg::Drawable::UpdateCallback
> > {
> > public:
> >   HudTextUpdateCallback(double lon, double lat, Viewer* viewer)
> >   {
> > _viewer = viewer;
> > _lon = lon;
> >  _lat = lat;
> >   }
> >
> >   virtual void update(osg::NodeVisitor* nv, osg::Drawable* drawable)
> >   {
> > Text* text = dynamic_cast(drawable);
> > if (text)
> > {
> >   CameraHelper h;
> >   h.setCamera(_viewer->getCamera());
> >
> >   osg::Vec3 object(_lon,0,_lat);
> >   osg::Vec3 window;
> >
> >   h.projectObjectIntoWindow(object, window);
> >   text->setPosition(osg::Vec3(window.x(), window.y(), 0.0));
> > }
> >   }
> >
> >   double _lon;
> >double _lat;
> >   Viewer *_viewer;
> > };
> >
> > ___
> >  osg-users mailing list
> >  osg-users@lists.openscenegraph.org
> >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >
> >
> ___

Re: [osg-users] Placing Text Labels in Geodetic Projection

2008-03-18 Thread Robert Osfield
Hi Jason,

2.x is generally more consistent w.r.t use of doubles internally so
will tend to suffer less from precision issues.  However, without
testing you exact setup I can't say whether these general improvements
will help with this specific problem you have.

W.r.t. porting from OSG-1.x to OSG-2.x, it might not actually be as
bad as you feel, in you are using osgUtil::SceneView you'll find the
majority of the OSG will just recompile with no changes.   There is a
few changes in API that might catch you out, but substantially the OSG
is still the same scene graph.

The biggest change between OSG-1.x and OSG-2.x is the osgProducer
replaced by osgViewer  and the new CMake build system, since you don't
use osgProducer then the build system is the biggest change.  It is
however, a big improvement in terms of cross platform support, so
while a bit of learning curve is well worth it.

Robert.

On Tue, Mar 18, 2008 at 3:54 PM, Jason Beverage <[EMAIL PROTECTED]> wrote:
> Hi all,
>
> I've written a 2D viewer that displays geospatial imagery in an orthographic
> projection using a WGS-1984 geodetic projection so the units are in degrees.
>
> I am placing text labels with their character size specified in
> SCREEN_COORDS.  When I zoom in very close, the quality of the text starts to
> suffer b/c the glyph quads are so small that they are losing precision when
> rendering.  Placing a MatrixTransform above the text to position it locally
> reduces the visual problems but there are still some present.
>
> The main problem I have is that the text cannot be selected if I zoom in
> close.  I can see the text fine, but clicking on it doesn't result in a hit
> b/c the intersections are all done using floats and the text glyphs are
> extermely small because of the autosizing.
>
> I found a potential solution using the latest version of OpenSceneGraph
> which places the text in an orthographic HUD camera and positions it at the
> correct space on the earth using the callback at the end of this email.
> Intersections work well and the text looks very crisp.
>
> We are currently using OpenSceneGraph 1.2 and are rolling our own viewer
> using SceneView and IntersectVisitor (NOT IntersectionVisitor) in our
> application and cannot update this spiral due to time constraints.
> IntersectVisitor does not seem to work correctly in picking items placed in
> a CameraNode in the 1.2 version.
>
> Does anyone have any suggestions on how I could fix this issue using
> OpenSceneGraph 1.2 and does the solution I found for using the latest
> version of OSG make sense or I am missing something painfully obvious?
>
>  Thanks!
>
> Jason
>
> struct HudTextUpdateCallback : public osg::Drawable::UpdateCallback
> {
> public:
>   HudTextUpdateCallback(double lon, double lat, Viewer* viewer)
>   {
> _viewer = viewer;
> _lon = lon;
>  _lat = lat;
>   }
>
>   virtual void update(osg::NodeVisitor* nv, osg::Drawable* drawable)
>   {
> Text* text = dynamic_cast(drawable);
> if (text)
> {
>   CameraHelper h;
>   h.setCamera(_viewer->getCamera());
>
>   osg::Vec3 object(_lon,0,_lat);
>   osg::Vec3 window;
>
>   h.projectObjectIntoWindow(object, window);
>   text->setPosition(osg::Vec3(window.x(), window.y(), 0.0));
> }
>   }
>
>   double _lon;
>double _lat;
>   Viewer *_viewer;
> };
>
> ___
>  osg-users mailing list
>  osg-users@lists.openscenegraph.org
>  http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


[osg-users] Placing Text Labels in Geodetic Projection

2008-03-18 Thread Jason Beverage
Hi all,

I've written a 2D viewer that displays geospatial imagery in an orthographic
projection using a WGS-1984 geodetic projection so the units are in degrees.

I am placing text labels with their character size specified in
SCREEN_COORDS.  When I zoom in very close, the quality of the text starts to
suffer b/c the glyph quads are so small that they are losing precision when
rendering.  Placing a MatrixTransform above the text to position it locally
reduces the visual problems but there are still some present.

The main problem I have is that the text cannot be selected if I zoom in
close.  I can see the text fine, but clicking on it doesn't result in a hit
b/c the intersections are all done using floats and the text glyphs are
extermely small because of the autosizing.

I found a potential solution using the latest version of OpenSceneGraph
which places the text in an orthographic HUD camera and positions it at the
correct space on the earth using the callback at the end of this email.
Intersections work well and the text looks very crisp.

We are currently using OpenSceneGraph 1.2 and are rolling our own viewer
using SceneView and IntersectVisitor (NOT IntersectionVisitor) in our
application and cannot update this spiral due to time constraints.
IntersectVisitor does not seem to work correctly in picking items placed in
a CameraNode in the 1.2 version.

Does anyone have any suggestions on how I could fix this issue using
OpenSceneGraph 1.2 and does the solution I found for using the latest
version of OSG make sense or I am missing something painfully obvious?

Thanks!

Jason

struct HudTextUpdateCallback : public osg::Drawable::UpdateCallback
{
public:
  HudTextUpdateCallback(double lon, double lat, Viewer* viewer)
  {
_viewer = viewer;
_lon = lon;
_lat = lat;
  }

  virtual void update(osg::NodeVisitor* nv, osg::Drawable* drawable)
  {
Text* text = dynamic_cast(drawable);
if (text)
{
  CameraHelper h;
  h.setCamera(_viewer->getCamera());

  osg::Vec3 object(_lon,0,_lat);
  osg::Vec3 window;

  h.projectObjectIntoWindow(object, window);
  text->setPosition(osg::Vec3(window.x(), window.y(), 0.0));
}
  }

  double _lon;
  double _lat;
  Viewer *_viewer;
};
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org