Re: [osg-users] KDTree Picking (at an angle)

2008-12-04 Thread Sean Spicer
Robert,

I think I know why things go bad in KDTree,

I'm using KDTree to spoof the location of some actual geometry, which is
transformed in a vertex/geometry shader.

So, I compute a bounding box for where the geometry ought to be, and create
a dummy geometry from that - I then compute the KDTree for this dummy
geometry, and assign it to the actual geometry that will be sent down the
pipe, which is at the scene origin, not its final location.

When the line-segment intersector goes to pick, it first checks to see if
the line segment intersects the bounding box of the drawable, which as far
as I can tell is computed against the actual geometry (in this case the
geometry at the origin) and not the KDTree's bounding box.  When it doesn't
properly intersect, the line-segment intersector returns without hitting the
KDTree.

I think what is needed is to test against the KDTree bounding box, rather
than the geometry bounding box, if a KDTree is assigned.

Does this make any sense?

sean

On Wed, Dec 3, 2008 at 10:05 AM, Sean Spicer [EMAIL PROTECTED] wrote:

 Robert,

 I will see if I can repro the problem with osgpick and send you the osg
 file.  It may take me a week or two though as I've got a lot on my plate ;-)

 cheers,

 sean


 On Wed, Dec 3, 2008 at 3:28 AM, Robert Osfield [EMAIL PROTECTED]wrote:

 Hi Sean,

 This sounds like a bug, but without a dataset and example that
 reproduces the problem it's next to impossible to home in on a fix.
 Would it be possible for you to provide a problem dataset that
 illustrates the problem?  If it can be reproduced with one of the
 existing examples like osgpick then this will make it easier to track
 down.

 Robert.

 On Wed, Dec 3, 2008 at 12:00 AM, Sean Spicer [EMAIL PROTECTED]
 wrote:
  Hi Gang,
 
  I'm working on improving picking performance via KDTree, but I'm hitting
 an
  issue that is driving me nuts: If I pick a node from directly above
 (e.g. +
  Z axis) everything works great, and picking is *very* fast.  If I pick
 at an
  angle, (e.g. from eye(1,1,1)) then picking is fast, but not accurate -
 nodes
  to the left, right, top, or bottom get picked instead of what I'm after.
 
  Here is my KDTree Build function:
 
  #ifdef USE_KDTREE
 
  // Update the KDTree
  osg::KdTree::BuildOptions kdTreeBuildOptions;
  osg::ref_ptrosg::KdTree kdTree = new osg::KdTree();
 
  if(kdTree-build(kdTreeBuildOptions, geometry))
  {
  geometry-setShape(kdTree.get());
  }
  else
  {
  LOG_MSG(logERROR)  osg::KdTree::build() unsuccessful.;
  }
  #endif
 
  Any suggestions?
 
  cheers,
 
  sean
 
  ___
  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] KDTree Picking (at an angle)

2008-12-04 Thread Robert Osfield
Hi Sean,

Yes this makes sense.  There is a mechanism in Drawable that allows
you to define an inital bound that is used in the compute of the
geometry position, this was done quite a few years ago at begining of
the journey in the land of vertex shader.  These days I think a better
solution would be to just allow users to manually define it and
disable the automatic compute of the bounding volume.

So try using

  geometry-setInitialBound(bb);

Where bb is the max size you expect the goemetry to get to/or the
bound that you used for the KdTree.

If that works OK I can look at cleaning up the overriding of the computed bound.

Robert.

On Thu, Dec 4, 2008 at 6:30 PM, Sean Spicer [EMAIL PROTECTED] wrote:
 Robert,

 I think I know why things go bad in KDTree,

 I'm using KDTree to spoof the location of some actual geometry, which is
 transformed in a vertex/geometry shader.

 So, I compute a bounding box for where the geometry ought to be, and create
 a dummy geometry from that - I then compute the KDTree for this dummy
 geometry, and assign it to the actual geometry that will be sent down the
 pipe, which is at the scene origin, not its final location.

 When the line-segment intersector goes to pick, it first checks to see if
 the line segment intersects the bounding box of the drawable, which as far
 as I can tell is computed against the actual geometry (in this case the
 geometry at the origin) and not the KDTree's bounding box.  When it doesn't
 properly intersect, the line-segment intersector returns without hitting the
 KDTree.

 I think what is needed is to test against the KDTree bounding box, rather
 than the geometry bounding box, if a KDTree is assigned.

 Does this make any sense?

 sean

 On Wed, Dec 3, 2008 at 10:05 AM, Sean Spicer [EMAIL PROTECTED] wrote:

 Robert,

 I will see if I can repro the problem with osgpick and send you the osg
 file.  It may take me a week or two though as I've got a lot on my plate ;-)

 cheers,

 sean

 On Wed, Dec 3, 2008 at 3:28 AM, Robert Osfield [EMAIL PROTECTED]
 wrote:

 Hi Sean,

 This sounds like a bug, but without a dataset and example that
 reproduces the problem it's next to impossible to home in on a fix.
 Would it be possible for you to provide a problem dataset that
 illustrates the problem?  If it can be reproduced with one of the
 existing examples like osgpick then this will make it easier to track
 down.

 Robert.

 On Wed, Dec 3, 2008 at 12:00 AM, Sean Spicer [EMAIL PROTECTED]
 wrote:
  Hi Gang,
 
  I'm working on improving picking performance via KDTree, but I'm
  hitting an
  issue that is driving me nuts: If I pick a node from directly above
  (e.g. +
  Z axis) everything works great, and picking is *very* fast.  If I pick
  at an
  angle, (e.g. from eye(1,1,1)) then picking is fast, but not accurate -
  nodes
  to the left, right, top, or bottom get picked instead of what I'm
  after.
 
  Here is my KDTree Build function:
 
  #ifdef USE_KDTREE
 
  // Update the KDTree
  osg::KdTree::BuildOptions kdTreeBuildOptions;
  osg::ref_ptrosg::KdTree kdTree = new osg::KdTree();
 
  if(kdTree-build(kdTreeBuildOptions, geometry))
  {
  geometry-setShape(kdTree.get());
  }
  else
  {
  LOG_MSG(logERROR)  osg::KdTree::build() unsuccessful.;
  }
  #endif
 
  Any suggestions?
 
  cheers,
 
  sean
 
  ___
  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


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


Re: [osg-users] KDTree Picking (at an angle)

2008-12-04 Thread Sean Spicer
Will do, and I'll report back...

sean

On Thu, Dec 4, 2008 at 1:07 PM, Robert Osfield [EMAIL PROTECTED]wrote:

 Hi Sean,

 Yes this makes sense.  There is a mechanism in Drawable that allows
 you to define an inital bound that is used in the compute of the
 geometry position, this was done quite a few years ago at begining of
 the journey in the land of vertex shader.  These days I think a better
 solution would be to just allow users to manually define it and
 disable the automatic compute of the bounding volume.

 So try using

  geometry-setInitialBound(bb);

 Where bb is the max size you expect the goemetry to get to/or the
 bound that you used for the KdTree.

 If that works OK I can look at cleaning up the overriding of the computed
 bound.

 Robert.

 On Thu, Dec 4, 2008 at 6:30 PM, Sean Spicer [EMAIL PROTECTED]
 wrote:
  Robert,
 
  I think I know why things go bad in KDTree,
 
  I'm using KDTree to spoof the location of some actual geometry, which
 is
  transformed in a vertex/geometry shader.
 
  So, I compute a bounding box for where the geometry ought to be, and
 create
  a dummy geometry from that - I then compute the KDTree for this dummy
  geometry, and assign it to the actual geometry that will be sent down the
  pipe, which is at the scene origin, not its final location.
 
  When the line-segment intersector goes to pick, it first checks to see if
  the line segment intersects the bounding box of the drawable, which as
 far
  as I can tell is computed against the actual geometry (in this case the
  geometry at the origin) and not the KDTree's bounding box.  When it
 doesn't
  properly intersect, the line-segment intersector returns without hitting
 the
  KDTree.
 
  I think what is needed is to test against the KDTree bounding box, rather
  than the geometry bounding box, if a KDTree is assigned.
 
  Does this make any sense?
 
  sean
 
  On Wed, Dec 3, 2008 at 10:05 AM, Sean Spicer [EMAIL PROTECTED]
 wrote:
 
  Robert,
 
  I will see if I can repro the problem with osgpick and send you the osg
  file.  It may take me a week or two though as I've got a lot on my plate
 ;-)
 
  cheers,
 
  sean
 
  On Wed, Dec 3, 2008 at 3:28 AM, Robert Osfield 
 [EMAIL PROTECTED]
  wrote:
 
  Hi Sean,
 
  This sounds like a bug, but without a dataset and example that
  reproduces the problem it's next to impossible to home in on a fix.
  Would it be possible for you to provide a problem dataset that
  illustrates the problem?  If it can be reproduced with one of the
  existing examples like osgpick then this will make it easier to track
  down.
 
  Robert.
 
  On Wed, Dec 3, 2008 at 12:00 AM, Sean Spicer [EMAIL PROTECTED]
  wrote:
   Hi Gang,
  
   I'm working on improving picking performance via KDTree, but I'm
   hitting an
   issue that is driving me nuts: If I pick a node from directly above
   (e.g. +
   Z axis) everything works great, and picking is *very* fast.  If I
 pick
   at an
   angle, (e.g. from eye(1,1,1)) then picking is fast, but not accurate
 -
   nodes
   to the left, right, top, or bottom get picked instead of what I'm
   after.
  
   Here is my KDTree Build function:
  
   #ifdef USE_KDTREE
  
   // Update the KDTree
   osg::KdTree::BuildOptions kdTreeBuildOptions;
   osg::ref_ptrosg::KdTree kdTree = new osg::KdTree();
  
   if(kdTree-build(kdTreeBuildOptions, geometry))
   {
   geometry-setShape(kdTree.get());
   }
   else
   {
   LOG_MSG(logERROR)  osg::KdTree::build() unsuccessful.;
   }
   #endif
  
   Any suggestions?
  
   cheers,
  
   sean
  
   ___
   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
 
 
 ___
 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] KDTree Picking (at an angle)

2008-12-03 Thread Robert Osfield
Hi Sean,

This sounds like a bug, but without a dataset and example that
reproduces the problem it's next to impossible to home in on a fix.
Would it be possible for you to provide a problem dataset that
illustrates the problem?  If it can be reproduced with one of the
existing examples like osgpick then this will make it easier to track
down.

Robert.

On Wed, Dec 3, 2008 at 12:00 AM, Sean Spicer [EMAIL PROTECTED] wrote:
 Hi Gang,

 I'm working on improving picking performance via KDTree, but I'm hitting an
 issue that is driving me nuts: If I pick a node from directly above (e.g. +
 Z axis) everything works great, and picking is *very* fast.  If I pick at an
 angle, (e.g. from eye(1,1,1)) then picking is fast, but not accurate - nodes
 to the left, right, top, or bottom get picked instead of what I'm after.

 Here is my KDTree Build function:

 #ifdef USE_KDTREE

 // Update the KDTree
 osg::KdTree::BuildOptions kdTreeBuildOptions;
 osg::ref_ptrosg::KdTree kdTree = new osg::KdTree();

 if(kdTree-build(kdTreeBuildOptions, geometry))
 {
 geometry-setShape(kdTree.get());
 }
 else
 {
 LOG_MSG(logERROR)  osg::KdTree::build() unsuccessful.;
 }
 #endif

 Any suggestions?

 cheers,

 sean

 ___
 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] KDTree Picking (at an angle)

2008-12-03 Thread Sean Spicer
Robert,

I will see if I can repro the problem with osgpick and send you the osg
file.  It may take me a week or two though as I've got a lot on my plate ;-)

cheers,

sean

On Wed, Dec 3, 2008 at 3:28 AM, Robert Osfield [EMAIL PROTECTED]wrote:

 Hi Sean,

 This sounds like a bug, but without a dataset and example that
 reproduces the problem it's next to impossible to home in on a fix.
 Would it be possible for you to provide a problem dataset that
 illustrates the problem?  If it can be reproduced with one of the
 existing examples like osgpick then this will make it easier to track
 down.

 Robert.

 On Wed, Dec 3, 2008 at 12:00 AM, Sean Spicer [EMAIL PROTECTED]
 wrote:
  Hi Gang,
 
  I'm working on improving picking performance via KDTree, but I'm hitting
 an
  issue that is driving me nuts: If I pick a node from directly above (e.g.
 +
  Z axis) everything works great, and picking is *very* fast.  If I pick at
 an
  angle, (e.g. from eye(1,1,1)) then picking is fast, but not accurate -
 nodes
  to the left, right, top, or bottom get picked instead of what I'm after.
 
  Here is my KDTree Build function:
 
  #ifdef USE_KDTREE
 
  // Update the KDTree
  osg::KdTree::BuildOptions kdTreeBuildOptions;
  osg::ref_ptrosg::KdTree kdTree = new osg::KdTree();
 
  if(kdTree-build(kdTreeBuildOptions, geometry))
  {
  geometry-setShape(kdTree.get());
  }
  else
  {
  LOG_MSG(logERROR)  osg::KdTree::build() unsuccessful.;
  }
  #endif
 
  Any suggestions?
 
  cheers,
 
  sean
 
  ___
  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


[osg-users] KDTree Picking (at an angle)

2008-12-02 Thread Sean Spicer
Hi Gang,

I'm working on improving picking performance via KDTree, but I'm hitting an
issue that is driving me nuts: If I pick a node from directly above (e.g. +
Z axis) everything works great, and picking is *very* fast.  If I pick at an
angle, (e.g. from eye(1,1,1)) then picking is fast, but not accurate - nodes
to the left, right, top, or bottom get picked instead of what I'm after.

Here is my KDTree Build function:

#ifdef USE_KDTREE

// Update the KDTree
osg::KdTree::BuildOptions kdTreeBuildOptions;
osg::ref_ptrosg::KdTree kdTree = new osg::KdTree();

if(kdTree-build(kdTreeBuildOptions, geometry))
{
geometry-setShape(kdTree.get());
}
else
{
LOG_MSG(logERROR)  osg::KdTree::build() unsuccessful.;
}
#endif

Any suggestions?

cheers,

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