# LWJGL 3D Objekt Collision: Wie?



## TheCreeper202 (12. Nov 2012)

hallo forummitglieder
wie man am titel schon höhrt geht es um eine collision von 3d objekten und frage mich: wie?
ich habe angefangen ein first person spiel zu programmieren und schon folgende klasse die ein 3d objekt perfekt rendern nur die collision fehlt


```
package de.creeperfans.opengl.fps;


import de.creeperfans.opengl.model.ObjModel;
import de.creeperfans.opengl.texture.Texture;

/**
 *
 * @author Roman
 */
public class GameObject {
    
    private boolean collider;
    private ObjModel model;
    private Texture tex;
    private float positionX;
    private float positionY;
    private float positionZ;
    private float rotationX;
    private float rotationY;
    private float rotationZ;
    
    
    public GameObject(ObjModel model, Texture tex) {
        this.model = model;
        this.tex = tex;
        positionX = model.getX();
        positionY = model.getY();
        positionZ = model.getZ();
        rotationX = 0;
        rotationY = 0;
        rotationZ = 0;
        this.collider = false;
    }
    
    public void addCollider() {
        this.collider = true;
    }
    
    public void render() {
        tex.bind();
        model.render();
    }

    public boolean collides(Camera other) {   
	return Collision???;
    }

    public boolean hasCollider() {
        return collider;
    }
    
}
```

man bekommt die positionen von der camera so:

```
other.vector.x
other.vector.y
other.vector.z
```

um die rotationen wollt ich mich später kümmern

bitte um schnelle hilfe
thecreeper202


----------



## Helgon (13. Nov 2012)

Grad keine Zeit weiter drauf einzugehen, aber googel mal Collision Boxes oder Spheres. Das ist so das Gängige bei 3D Objekten


----------



## skappler (20. Nov 2012)

Wenn es ganz einfach sein soll und ohne viel aufwand, dann such mal nach Axis Aligned Bounding Boxes.
Ansonsten intressiert mich das Thema auch. Hat noch jemand Vorschläge?


----------



## Kr0e (20. Nov 2012)

Octree in Kombination mit Bounding boxes.


----------



## Guest2 (20. Nov 2012)

Moin,

das ist einfach ein weites Feld. Neben den rein CPU basierten Verfahren gibt es auch GPU basierte. Diese können dann beliebig komplex aufgebaut sein. Zwei Beispiele sind z.B.:

mit OpenGL: GPU Gems 3 - Chapter 29. Real-Time Rigid Body Simulation on GPUs
mit CUDA: GPU Gems 3 - Chapter 33. LCP Algorithms for Collision Detection Using CUDA

Für einen einfachen Shooter reichen aber CPU Bounding Boxes, es sei den man möchte das ganze Level physikalisch korrekt in Schutt und Asche legen können.

Viele Grüße,
Fancy


----------



## Helgon (20. Nov 2012)

Die 2 Links sind ja mal geil, vielen Dank


----------



## skappler (20. Nov 2012)

Die Octrees sehen intressant aus. Hab ich nie was von gehört. Das würde auch mein Problem lösen, effizient rauszufinden welche Objekte in Frage kommen.

Ansonsten sind diese ganzen CUDA Ansätze ja ganz schön und wahrscheinlich auch extrem schnell, aber zumindest für meine Zwecke eher mit Kanonen auf Spatzen


----------



## Marco13 (21. Nov 2012)

Hatte in http://www.java-forum.org/spiele-mu.../143308-pixelgenaue-kollision.html#post954611 mal ein paar Sätze (zu nicht-Pixelgenauen Verfahren) geschrieben. Wie Fancy schon sagte: Das ist ein weites Feld.


----------



## TheCreeper202 (23. Nov 2012)

ok ich hab mir alles mal angeguck (bis auf pixelgenaue collision werd ich aber noch)
1. Axis Aligned Bounding Boxes (wird auch in minecraft verwendet) eignet sich aber nicht gut für mein space shuttle
2. ich hab mir die links angeguckt und nicht wirklich viel verstanden gibts die auch auf deutsch?


----------



## Empire Phoenix (25. Nov 2012)

Ich empfehle jbullet, zudem kann ich JME3 in dem zusammenhang empfehlen da dort ein jni wrapper für natives bullet drinnen ist.


----------



## Helgon (25. Nov 2012)

TheCreeper202 hat gesagt.:


> ok ich hab mir alles mal angeguck (bis auf pixelgenaue collision werd ich aber noch)
> 1. Axis Aligned Bounding Boxes (wird auch in minecraft verwendet) eignet sich aber nicht gut für mein space shuttle
> 2. ich hab mir die links angeguckt und nicht wirklich viel verstanden gibts die auch auf deutsch?



bounding boxes eignen sich für alles, ob 2d oder 3d


----------



## TheCreeper202 (30. Nov 2012)

ich hab eine first person camera und eine 3d welt jetzt wollte ich sowas wie den mesh collider bei unity 3d machen (aabb ist für würfel also nicht ganz so gut dafür)
das ist mein erstes problem
mein zweites ist dass man mit der camera auch die y achse verändern soll:
- sprung
- objekte bis zu einer größe von 0.5f kann man hach gehen
- tiefer als 0 kann man nicht fallen
das sind weitere probleme auch wie man bei fp herrausfindet welche seite das space shuttle berührt
wenn das alles iwer lösen kann: danke!!!


----------

