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