I had the mode set to GEOMETRY and each object had its own Appearance
and Material objects, so they weren't the problem. I've since
done a bit more fiddling with the program, and it seems that if I
use the pickAllSorted() method from PickTool, rather than just pickAll(),
the problem disappears. If I've understood the documentation correctly,
these two methods should return the same list of PickResults; the only
difference is that pickAllSorted() sorts them by distance from the
viewpoint.
In other words, there does appear to be a bug in the pickAll() method.
Can anyone from the Sun development team confirm this?
Thanx.
>
> Two possible reasons:
>
> 1) Do you use USE_BOUNDS or USE_GEOMETRY pickMode?
> Try using USE_GEOMETRY, it will give you better presission
> in piking.
>
> 2) Do you use the same appearance (or Material, or Coloring attributes)
> for diffrent objects? In that case if you change values inside one of
> them it will affect all objects that use it.
>
>
>
> On Wed, 6 Sep 2000, Glenn Rowe wrote:
>
> > I've been experimenting with picking and have come across
> > some odd behaviour - just wondering if anyone else has found something
> > similar.
> >
> > Basically, I've defined a picking behaviour class that selects
> > a list of all objects along a ray from the mouseposition,
> > and changes the diffuse colour of all picked objects from white
> > to red:
> >
> > //=====================================================
> > public class MousePick extends PickMouseBehavior
> > {
> > Material redSurface = new Material();
> >
> > public MousePick(Canvas3D canvas, BranchGroup branch, Bounds bounds)
> > {
> > super(canvas, branch, bounds);
> > setSchedulingBounds(bounds);
> > pickCanvas.setMode(PickTool.GEOMETRY);
> > setTolerance(0.0f);
> > redSurface.setDiffuseColor(1.0f, 0.0f, 0.0f);
> > }
> >
> > public void updateScene(int xPos, int yPos)
> > {
> > // randSpheres is an object that contains several random spheres
> >
> > randSpheres.resetColors(); // Resets all objects to white
> > pickCanvas.setShapeLocation(xPos, yPos);
> > PickShape pickShape = pickCanvas.getPickShape();
> > PickResult[] results = pickCanvas.pickAll();
> > if (results != null) {
> > for (int i = 0; i < results.length; i++) {
> > Shape3D shape =
> (Shape3D)results[i].getNode(PickResult.SHAPE3D);
> > shape.getAppearance().setMaterial(redSurface);
> > }
> > }
> > }
> > //=========================================
> >
> > I then generated several Sphere objects of varying size and position,
> > and test the MousePick class by clicking on the spheres in various
> > places. Since the tolerance has been set to zero, a sphere should turn
> > red only if the ray from the mouse into the scene actually intersects
> > the sphere. In most places, this is true, but in some cases, a sphere
> > will turn red when it is definitely NOT cut by the ray.
> >
> > If the mouse is clicked outside all the spheres, no sphere is ever
> > selected, but occasionally when clicking on one sphere, the
> selected sphere
> > and another one that is nowhere near the picked ray will turn red.
> > Thus it seems that the picking is always able to determine
> whether or not
> > the mouse is clicked over an object, but sometimes mistakenly
> > includes objects in the picked list that shouldn't be there.
> >
> > Just in case there was something odd about the geometric primitives,
> > I tried the same experiment using a Cube class that I wrote from scratch
> > using QuadArrays, and the same thing happened.
> >
> > Is this a bug in the picking behaviour classes, or am I doing something
> > wrong?
> >
> >
> ==================================================================
> =========
> > To unsubscribe, send email to [EMAIL PROTECTED] and include
> in the body
> > of the message "signoff JAVA3D-INTEREST". For general help,
> send email to
> > [EMAIL PROTECTED] and include in the body of the message "help".
> >
>
> ==================================================================
> =========
> To unsubscribe, send email to [EMAIL PROTECTED] and include
> in the body
> of the message "signoff JAVA3D-INTEREST". For general help, send email to
> [EMAIL PROTECTED] and include in the body of the message "help".
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".