# Collisionserkennung in Java3D



## Developer_X (22. Mai 2009)

Für all diejenen unter euch, die meine noch ersten Threads in diesem Forum kennen, werdet ihr euch sicherlich noch an meine Fragen über Collisionen erinnern, nun ist es so lang her, und ich hab immer noch keine schöne Lösung, kann mir einer von euch, 
das folgende Programm, mit folgenden Angaben, modifiziert zurückposten please?

-es soll wenn sich 'ViewBounds' und 'BoxBounds' treffen, man sich nur noch so bewegen können, dass man von diesen 'BoxBounds' wegkommt.
-es soll wenn man bei den BoxBounds ist, auch was ausgegeben werden, und zwar : 'Collision!'


```
package Programms;

import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import java.awt.event.*;

import javax.media.j3d.AmbientLight;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JFrame;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;

@SuppressWarnings("serial")
public class CollisionTest extends JFrame implements KeyListener
{
	float step = 1;
	
	SimpleUniverse universe;
	Canvas3D canvas3D;
	
	float y;
	float z;
	
	Transform3D view;
	TransformGroup View;
	
	BoundingSphere ViewBounds= new BoundingSphere(new Point3d(), 1);
	
	BoundingSphere BoxBounds = new BoundingSphere(new Point3d(), 1);
	
	public CollisionTest()
	{
		this.setTitle("CollisionTest");
		this.setSize(400,400);
		this.setLocationRelativeTo(null);
		this.setLayout(new BorderLayout());
		
		GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        canvas3D = new Canvas3D(config);
        universe = new SimpleUniverse(canvas3D);       
        universe.addBranchGraph(Scene());
        this.add("Center", canvas3D);            
		canvas3D.addKeyListener(this);

		this.setVisible(true);
	}
	public BranchGroup Scene()
	{
		BranchGroup X = new BranchGroup();
		
		//View Initialisation
		view = new Transform3D();
		view.rotY(Math.toRadians(y));
		view.setTranslation(new Vector3f(0,0,z));

		View = new TransformGroup();
		View.setTransform(view);
		View.setBounds(ViewBounds);
		View = universe.getViewingPlatform().getViewPlatformTransform();
		
		//Box Initialisation
		Transform3D boxt = new Transform3D();
		boxt.setTranslation(new Vector3f(0,0,0));
		
		TransformGroup BoxT = new TransformGroup();
		BoxT.setTransform(boxt);
		BoxT.addChild(new ColorCube(1));
		BoxT.setBounds(BoxBounds);
		X.addChild(BoxT);
		
		//Rest of Lights
		Color3f lightColor = new Color3f(.1f,.6f,.6f);
	    AmbientLight ambientLight= new AmbientLight(lightColor);
        ambientLight.setInfluencingBounds(new BoundingSphere());
	    X.addChild(ambientLight);
	    DirectionalLight directionalLight = new DirectionalLight();
	    directionalLight.setColor(lightColor);
	    directionalLight.setInfluencingBounds(new BoundingSphere());
	    X.addChild(directionalLight);       
	        
		X.compile();
		return X;
	}
	public static void main(String[]args)
	{
		new CollisionTest();
	}
	
	public void keyPressed(KeyEvent arg0)
	{
		if(arg0.getKeyCode()==KeyEvent.VK_UP)
		{
			z = z - step;
			view.setTranslation(new Vector3f(y,0,z));
			View.setTransform(view);
			System.out.println(view);
		}
		if(arg0.getKeyCode()==KeyEvent.VK_DOWN)
		{
			z = z + step;
			view.setTranslation(new Vector3f(y,0,z));
			View.setTransform(view);
			System.out.println(view);
		}
		if(arg0.getKeyCode()==KeyEvent.VK_LEFT)
		{
			y = y + step;
			view.setTranslation(new Vector3f(y,0,z));
			View.setTransform(view);
			System.out.println(view);
		}
		if(arg0.getKeyCode()==KeyEvent.VK_RIGHT)
		{		
			y = y - step;
			view.setTranslation(new Vector3f(y,0,z));
			View.setTransform(view);
			System.out.println(view);
		}
	}
	public void keyReleased(KeyEvent arg0) {}
	public void keyTyped(KeyEvent arg0) {}

}
```

Ich danke jedem für seine Antwort, denn ich habe schon sehr lange damit zu tun, kau dran rum, und hab immer noch keine lösung...

Thanks at all,


----------



## Developer_X (24. Mai 2009)

hört mal ich hab hier extra ein KSKB gemacht, einer von euch hat doch Ahnung von Java3D oder?
Und dann weiß doch sicherlich einer von euch, wie man das hier einbaut, mit den Colidierungen oder?


----------



## Noctarius (24. Mai 2009)

Du merkst auch nicht, dass dich deine "Weinerei" nach Hilfe nicht weiterbringt, oder?

Wenn keiner antworten mag / will / kann, dann tut das auch keiner und wenn du 30x fragst.


----------



## Developer_X (24. Mai 2009)

also bei der API
BoundingSphere (Java 3D API))
hab ich das mit intersect gefunden:

```
package Enterprise_Astroids;
 
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import java.awt.event.*;
 
import javax.media.j3d.AmbientLight;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JFrame;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;
 
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
 
@SuppressWarnings("serial")
public class CollisionTest extends JFrame implements KeyListener
{
    float step = 1;
    
    SimpleUniverse universe;
    Canvas3D canvas3D;
    
    float y;
    float z;
    
    Transform3D view;
    TransformGroup View;
    
    BoundingSphere ViewBounds= new BoundingSphere(new Point3d(), 1);
    
    BoundingSphere BoxBounds = new BoundingSphere(new Point3d(), 1);
    
    public CollisionTest()
    {
        this.setTitle("CollisionTest");
        this.setSize(400,400);
        this.setLocationRelativeTo(null);
        this.setLayout(new BorderLayout());
        
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        canvas3D = new Canvas3D(config);
        universe = new SimpleUniverse(canvas3D);       
        universe.addBranchGraph(Scene());
        this.add("Center", canvas3D);            
        canvas3D.addKeyListener(this);
 
        this.setVisible(true);
    }
    public BranchGroup Scene()
    {
        BranchGroup X = new BranchGroup();
        
        //View Initialisation
        view = new Transform3D();
        view.rotY(Math.toRadians(y));
        view.setTranslation(new Vector3f(0,0,z));
 
        View = new TransformGroup();
        View.setTransform(view);
        View.setBounds(ViewBounds);
        View = universe.getViewingPlatform().getViewPlatformTransform();
        
        //Box Initialisation
        Transform3D boxt = new Transform3D();
        boxt.setTranslation(new Vector3f(0,0,0));
        
        TransformGroup BoxT = new TransformGroup();
        BoxT.setTransform(boxt);
        BoxT.addChild(new ColorCube(1));
        BoxT.setBounds(BoxBounds);
        X.addChild(BoxT);
        
        //Rest of Lights
        Color3f lightColor = new Color3f(.1f,.6f,.6f);
        AmbientLight ambientLight= new AmbientLight(lightColor);
        ambientLight.setInfluencingBounds(new BoundingSphere());
        X.addChild(ambientLight);
        DirectionalLight directionalLight = new DirectionalLight();
        directionalLight.setColor(lightColor);
        directionalLight.setInfluencingBounds(new BoundingSphere());
        X.addChild(directionalLight);       
            
        X.compile();
        return X;
    }
    public static void main(String[]args)
    {
        new CollisionTest();
    }
    
    public void keyPressed(KeyEvent arg0)
    {
        if(arg0.getKeyCode()==KeyEvent.VK_UP)
        {
            z = z + step;
            view.setTranslation(new Vector3f(y,0,z));
            View.setTransform(view);
            System.out.println(view);
        }
        if(arg0.getKeyCode()==KeyEvent.VK_DOWN)
        {
        	if(ViewBounds.intersect(BoxBounds)==true)
        	{
            z = z - step;
            view.setTranslation(new Vector3f(y,0,z));
            View.setTransform(view);
            System.out.println(view);
        	}
        	else if(ViewBounds.intersect(BoxBounds)==false)
        	{
        		System.out.println("ouais!");
        	}
        }
        if(arg0.getKeyCode()==KeyEvent.VK_LEFT)
        {
            y = y + step;
            view.setTranslation(new Vector3f(y,0,z));
            View.setTransform(view);
            System.out.println(view);
        }
        if(arg0.getKeyCode()==KeyEvent.VK_RIGHT)
        {       
            y = y - step;
            view.setTranslation(new Vector3f(y,0,z));
            View.setTransform(view);
            System.out.println(view);
        }
    }
    public void keyReleased(KeyEvent arg0) {}
    public void keyTyped(KeyEvent arg0) {}
 
}
```
aber jetzt, kann man nur noch nach hinten, und überhaupt nicht nach vorne, wieso?


----------

