As far as I remember there is an option for the PickTool which activates
geometry-based picking. If you have a look in its sources it is documented
there.

Alternatively you can use a library which already implements collision
avoidance (or have a look into its sources):
http://www.3dchat.org/doc/com/vwp/j3d/utils/behaviors/keyboard/KeyNavigatorBehavior.html

> Thanks for the quick response.
>
>   Sounds like a great idea, how can I implement it? Below is part of the
> behavior I'm using to do the picking (some of the code is based on
> the j3d.ord site). And even lower I post the settings for the Branch
> englobing the collidable objets (my Quads).
>
>   Many thanks in advance.
>
>
> ========================================================================
> The behavoir
> ========================================================================
>
> class behavior2 extends Behavior
> {
>  private TransformGroup TG;
>  private Transform3D rot=new Transform3D();
>  private Transform3D rotation=new Transform3D();
>  private Vector3f vctTransl;
>   private Vector3f forward, backwards, left, right, forwLeft, forwRight,
>                    backwLeft, backwRight;
>
>   protected Transform3D viewTx = new Transform3D();
>   protected Transform3D worldEyeTransform = new Transform3D();
>   protected Vector3d oneFrameTranslation = new Vector3d();
>   protected TransformGroup viewTg;
>   protected Vector3d locationVector = new Vector3d();
>   protected Point3d locationPoint = new Point3d();
>
>   /** The vector along which we do collision detection */
>   private Vector3d collisionVector = new Vector3d();
>
>   private static final Vector3d COLLISION_DIRECTION = new Vector3d(0, 0, -
> 1);
>
>     /** Point 3D use to calculate the end point for collisions per frame
> */
>     private Point3d locationEndPoint = new Point3d();
>
>     /** Pick shape for collision detection */
>     private PickSegment collisionPicker = new PickSegment();
>
>   private float deltaStep;
>   protected BranchGroup collidables;
>
>  private WakeupOnAWTEvent keyEvent=new WakeupOnAWTEvent
> (KeyEvent.KEY_PRESSED);
>
>  behavior2(TransformGroup TG)
>  {
>   this.TG=TG;
>     this.viewTg=TG;
>       deltaStep = 0.2f;
>       forward   = new Vector3f(0.0f, 0.0f, deltaStep);
>       backwards  = new Vector3f(0.0f, 0.0f, -deltaStep);
>       left      = new Vector3f(deltaStep, 0.0f, 0.0f);
>       right     = new Vector3f(-deltaStep, 0.0f, 0.0f);
>       forwLeft  = new Vector3f(deltaStep, 0.0f, deltaStep);
>       forwRight = new Vector3f(-deltaStep, 0.0f, deltaStep);
>       backwLeft = new Vector3f(deltaStep, 0.0f, -deltaStep);
>       backwRight = new Vector3f(-deltaStep, 0.0f, -deltaStep);
>
>
>   vctTransl = new Vector3f();
>  }
>
>  public void initialize()
>  {
>   this.wakeupOn(keyEvent);
>  }
>
>  public void processStimulus(Enumeration criteria)
>  {
>
>     Transform3D td = new Transform3D();
>     viewTg.getTransform(td);
>     td.get(oneFrameTranslation);
>
>     viewTx.transform(oneFrameTranslation);
>
>     viewTg.getChild(0).getLocalToVworld(worldEyeTransform);
>
>     worldEyeTransform.mul(viewTx);
>
>     worldEyeTransform.get(locationVector);
>     locationPoint.set(locationVector);
>
>     worldEyeTransform.transform(COLLISION_DIRECTION, collisionVector);
>
>     collisionVector.scale(0.15f);
>
>
> oneFrameTranslation.set(0.0d, 0.0d, -0.15d);
>
>     locationEndPoint.add(locationVector, collisionVector);
>     locationEndPoint.add(oneFrameTranslation);
>
>     collisionPicker.set(locationPoint, locationEndPoint);
> System.out.println("start..." + locationPoint + "end..." +
> locationEndPoint);
>     SceneGraphPath[] closest = collidables.pickAllSorted(collisionPicker);
>
>     if(closest == null)
>         return;
>
>
>   boolean real_collision = false;
>
>     for(int i = 0; (i < closest.length) && !real_collision; i++)
>     {
>         Shape3D i_shape = (Shape3D)closest[i].getObject();
>
>   System.out.println("shape" + i_shape);
>
>         Enumeration geom_list = i_shape.getAllGeometries();
>
>         while(geom_list.hasMoreElements() && !real_collision)
>         {
>             GeometryArray geom = (GeometryArray)geom_list.nextElement();
>
>             if(geom == null)
>                 continue;
>
>             real_collision = true;    // call specialist routine here
>             System.out.println("geom" + geom);
>         }
>     }
> ========================================================================
>
> ========================================================================
> The settings
> ========================================================================
>    wallsBranch = new BranchGroup();
>    wallsBranch.setPickable(true);
>
>    //Here I only post one, but I have 8 of these transformGroups
>    TransformGroup trGrp = new TransformGroup();
>    trGrp.setPickable(true);
>
>    //Here I only post one, but I have 8 of these QuadArrays
>    QuadArray wall = new QuadArray(4, QuadArray.COORDINATES|
>                                      QuadArray.TEXTURE_COORDINATE_2);
>    wall.setCapability(QuadArray.ALLOW_COORDINATE_READ);
>    wall.setCapability(QuadArray.ALLOW_FORMAT_READ);
>    wall.setCapability(QuadArray.ALLOW_COUNT_READ);
>
>    //Here I set the coordinates of the vertex, code not worth posting?
>
>    //Here I only post one, but I have 8 of these Shape3D
>    Shape3D theWall = new Shape3D(wall, appWalls) ;
>    theWall.setCapability(Shape3D.ALLOW_GEOMETRY_READ);
>
>    //I append the shape3D to the transformGroup, and then this last one
>    //to the branch
>    wallsBranch.compile();
>
>
===========================================================================
> 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".
>

--
+++ Jetzt WLAN-Router für alle DSL-Einsteiger und Wechsler +++
GMX DSL-Powertarife zudem 3 Monate gratis* http://www.gmx.net/dsl

===========================================================================
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".

Reply via email to