Thanks Mate! This really solved one month trouble! Best regards Fredrik
-----Ursprungligt meddelande----- Fran: Discussion list for Java 3D API [mailto:[EMAIL PROTECTED] Ben Logan Skickat: den 26 november 2003 10:05 Till: [EMAIL PROTECTED] Amne: Re: [JAVA3D] Problems - Collision detection (full test source) Hi See the ticktockcollision demo that you should have got with your Java SDK, that was where I started when implementing collision detection, itl show you the basics, I havent looked at your code but I suspect part of the problem is that you may not be adding the listeners to the scenegraph directly. >-----Original Message----- >From: Fredrik Andersson [mailto:[EMAIL PROTECTED] >Sent: 26 November 2003 07:56 >To: [EMAIL PROTECTED] >Subject: [JAVA3D] Problems - Collision detection (full test source) > >Hello! >I have struggled with this problem for a month now, so I >really need some help. >I try to develop a game with collision detection with Java3D. >To narrow it down I have made two test-java-files for you. >File 1) Applet where I add all my objects (2 ColorCubes) File >2) A KeyListener to stear one of the cubes. The key listener >also checks for collisions. >All code is below, just compile and try. >The idea is that the cube that I can stear should stop >immediately outside the other cube from any direction. I >should not intersect at all. But I can't detect that other >cube at all. Now it just run through. >So if any one could try the code and give me some hints or >example I would be most thankfull. > >Best regards >Fredrik > >//The Main class >import java.applet.*; >import java.awt.*; >import java.awt.Frame;import java.awt.event.*; import >com.sun.j3d.utils.applet.MainFrame; >import com.sun.j3d.utils.universe.*; >import com.sun.j3d.utils.geometry.*; >import com.sun.j3d.utils.behaviors.keyboard.*; >import javax.media.j3d.*; >import javax.vecmath.*; >import javax.swing.*; >import java.util.*; >public class Test extends Applet >{ > BranchGroup branchGroup; > ColorCube colorCube1 = new ColorCube(0.4); //The cube that >you can navigate ColorCube colorCube2 = new ColorCube(0.4); >TransformGroup transformGroup1; public void init() { > setLayout(new BorderLayout()); > GraphicsConfiguration config = >SimpleUniverse.getPreferredConfiguration(); >Canvas3D canvas3D = new Canvas3D(config); > add("Center", canvas3D); > SimpleUniverse simpleUniverse = new SimpleUniverse(canvas3D); > branchGroup = new BranchGroup(); > //Cube1 > transformGroup1 = new TransformGroup(); > Transform3D transform3D1 = new Transform3D(); > transform3D1.set(new Vector3f(0.0f, 0.0f, -20.0f)); > transformGroup1.setTransform(transform3D1); > transformGroup1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); > //for setShapeBounds > transformGroup1.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); > colorCube1.setCapability(Node.ALLOW_BOUNDS_READ); > transformGroup1.setPickable(false); > transformGroup1.addChild(colorCube1); > branchGroup.addChild(transformGroup1); > canvas3D.addKeyListener( new TestListener(transformGroup1, this) ); > //Cube2 > TransformGroup transformGroup2 = new TransformGroup(); > Transform3D transform3D2 = new Transform3D(); > transform3D2.set(new Vector3f(0.0f, 2.0f, -20.0f)); > transformGroup2.setTransform(transform3D2); > colorCube2.setPickable(true); > transformGroup2.addChild(colorCube2); > branchGroup.addChild(transformGroup2); > branchGroup.compile(); > simpleUniverse.addBranchGraph(branchGroup); > } > public static void main(String[] args) > { > Frame frame = new MainFrame(new Test(), 600, 400); } } > >//The KeyListener and Collision detection class > >import java.awt.event.*; >import javax.media.j3d.*; >import javax.vecmath.*; >import java.awt.Frame; >import com.sun.j3d.utils.applet.MainFrame; >import com.sun.j3d.utils.picking.*; >import com.sun.j3d.utils.geometry.*; >public class TestListener implements KeyListener { final >static float DISTANCE = 0.1f; final static double TURNANGLE >= 0.1; float x = 0.0f; float y = 0.0f; float z = -20.0f; >private double angle = 0.0; TransformGroup transformGroup; >Transform3D positionTransform3D = new Transform3D(); >Transform3D angleTransform3D = new Transform3D(); Test test; >PickTool pickTool; Point3d point3d; Vector3d vector3d; >Transform3D transform3D; public TestListener(TransformGroup >tfg, Test t) { > test = t; > transformGroup = tfg; > pickTool = new PickTool(test.branchGroup); > pickTool.setCapabilities(test.colorCube2, PickTool.INTERSECT_FULL); > pickTool.setMode( PickTool.BOUNDS ); > positionTransform3D.set(new Vector3f(x, y, z)); } > > public void keyTyped(KeyEvent e) > { > } > > public void keyPressed(KeyEvent e) > { > if( e.getKeyCode() == KeyEvent.VK_UP ) > { > if(isMovePossible(DISTANCE)) > { > Transform3D temp = new Transform3D(); > temp.set(new Vector3f(0, DISTANCE, 0)); > positionTransform3D.mul(temp); > transformGroup.setTransform( positionTransform3D ); > > } > } > else if( e.getKeyCode() == KeyEvent.VK_DOWN ) > { > if(isMovePossible(-DISTANCE)) > { > Transform3D temp = new Transform3D(); > temp.set(new Vector3f(0, -DISTANCE, 0)); > positionTransform3D.mul(temp); > transformGroup.setTransform( positionTransform3D ); > } > } > else if( e.getKeyCode() == KeyEvent.VK_LEFT ) > { > angle = angle + TURNANGLE; > angleTransform3D.rotZ(TURNANGLE); > positionTransform3D.mul(angleTransform3D); > transformGroup.setTransform( positionTransform3D ); > } > else if( e.getKeyCode() == KeyEvent.VK_RIGHT ) > { > angle = angle - TURNANGLE; > angleTransform3D.rotZ(-TURNANGLE); > positionTransform3D.mul(angleTransform3D); > transformGroup.setTransform( positionTransform3D ); > } > } > > public void keyReleased(KeyEvent e) > { > } > > public boolean isMovePossible(float distance) { > boolean retValue = true; > PickBounds pickBounds = new PickBounds( >test.colorCube1.getBounds() ); > pickTool.setShape( pickBounds, getCordinate(test.transformGroup1) ); > PickResult pickResult = pickTool.pickAny( ); > if ( pickResult != null ) > { > System.out.println("Boink"); > retValue = false; > } > else > { > retValue = true; > } > return retValue; > } > > public static void main(String[] args) > { > Frame frame = new MainFrame(new Test(), 600, 350); } > > public Point3d getCordinate(TransformGroup transformGroup) { > Transform3D pointTransform3D = new Transform3D(); > transformGroup.getTransform( pointTransform3D ); > float[] cordinates = new float[16]; > pointTransform3D.get(cordinates); > Point3d point = new Point3d(cordinates[3], cordinates[7], > cordinates[11]); return point; > } > > public void printOutCordinates(TransformGroup transformGroup) { > Transform3D printOutTransform3D = new Transform3D(); > transformGroup.getTransform( printOutTransform3D ); > float[] cordinates = new float[16]; > printOutTransform3D.get(cordinates); > for(int i = 0; i < cordinates.length; i++) > { > System.out.println(i + ":" + cordinates[i]); > } > System.out.println(); > } >} > >=============================================================== >============ >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".