Kollision im 3D Raum

korbmeister

Aktives Mitglied
Hallo Leute, ich schreibe gerade ein 3D Spiel (shooter) in Java dafür verwende ich Jogl, bisher lade ich eine Map, welche ich in Blender erstellt und in Koordinaten und Punkte in eine txt Datei exportiert habe. Diese wird dann Dreieck für Dreieck gerendert. Jetzt hab ich mir überlegt wie ich das mit der Kollision anstelle nehmen wir mal an ich hab einmal den shortbuffer (für die Punkte) und einmal den Floatbuffer (koordinaten) jeweils für die Map und den Spieler, wie kann ich jetzt anhand dieser Daten feststellen ob die beiden "Objekte" miteinander kollidieren, da Jogl sowas ja nicht kann soweit ich weiß hab ich mir gedacht ich könnte es ja selber schreiben, aber einen Ansatz habe ich bisher nicht gefunden. Hatte an die JBullet Engine gedacht, weiß aber noch nicht wie viel arbeit das ist und ob es sich lohnt, da ich eigentlich das meiste selber machen wollte.

Hättet ihr Vorschläge oder Ideen wie ich das mit der Kollision lösen könnte, so das es zum einen recht einfach gehalten ist und zum anderen nicht zuviel performance schluckt?
 

jemandzehage

Aktives Mitglied
Moin,

Prinzipiell ist Kollisionserkennung und vor allem auch das korrekte Auflösen der Kollision relativ Aufwändig. Wenn du nur einen Spieler auf einem Terrain hast, ist das allerdings noch recht einfach, da die Polygone des Terrains geordnet sind. Du kannst also rausfinden, zwischen welchen 4 Punkten des Terrains sich der Spieler befindet und kannst dann die Höhe als Interpolation der Nachbarhöhen berechnen. Hilfreich ist zum Beispiel die erste Antwort in diesem Beitrag: interpolating a point on a heightmap

Falls du dich allgemein mit Collision Detection weiter befassen willst, empfehle ich zum Beipspiel die Tutorials hier Tutorial Kollision1 ? DGL Wiki . Ist zwar Delphi, aber dafür deutsch. Allgemein wirst du in diesem Wiki den ein oder anderen Hinweis zur Programmierung mit OpenGL erhalten.

Grüße
 

korbmeister

Aktives Mitglied
Hey das zweite was du mir geschickt hast, hab ich mir angeguckt aber die variante gefällt mir nicht ganz so gut, da die Kollision sehr sehr ungenau wird teilweise. Die erste Variante hab ich noch nicht so ganz verstanden aber, soviel ich verstehe wird der Spieler einfach immer auf die höchste Position des Terrains an der Stelle gesetzt, gibt es bei der Methode nicht auch nachteile oder bugs? Naja ich bräuchte auf jeden Fall noch eine andere Methode für die Kollision mit Mauern, Häuser bzw "Objekten" hat jemand da noch ne gute Idee?

PS: Danke für die Antwort :)
 

jemandzehage

Aktives Mitglied
Moin,

Prinzipiell wird der Spieler immer auf den höchsten Punkt gesetzt. Wenn du aber noch Gravitation mit einbaust kannst du einfach überprüfen, ob der Spieler tiefer als der Punkt ist und ihn gegebenenfalls auf dieses Punkt setzen.

Detaillierte Anleitung für Kollisionserkennung findest du auch in diesem Buch: Mathematics and Physics for Programmers (Charles River Media Game Development):Amazon.de:Englische Bücher wie gesagt es ist ein komplexes Thema. Ich finde die in dem buch vorgestellten Methoden sehr lehrreich, würde sie aber nicht genau so implementieren, da sie sehr aufwändig sind. Aber du solltest mit dem Buch einen guten Überblick über das Thema bekommen sodass du hinterher selber überlegen kannst wie du das genau implementierst.

Achja: du findest das Buch als PDF auch im Netz.
 

Ähnliche Java Themen

Neue Themen


Oben