# Kollisions abfrage bei 3D spiel?



## MrTroble (10. Mai 2015)

Ich Programmiere ein 3D Spiel ich möchte eine Kollisions abfrage zwischen der Kamera und den Objekten so wie den Objekten selbst haben wie mach ich das am besten


----------



## AntiMuffin (10. Mai 2015)

Hallo,
bei solchen Berechnungen brauchst du immer relativ viel Mathematisches Verstehen. Ich weiß nicht wie weit du dieses Besitz, aber wenn nicht (oder auch wenn du es hast) würde ich dir irgendeine Physik Engine empfehlen, das erspart dir unheimlich Arbeit und Stress ^_^

Gruß,
AntiMuffin


----------



## Androbin (11. Mai 2015)

Mit Vektor-Geometrie.


----------



## MrTroble (12. Mai 2015)

AntiMuffin hast recht aber ich will ne eigen Engin haben ich kann mit sowas
wie jogel oder jwgl nichts anfangen


----------



## MrTroble (12. Mai 2015)

Wie mach ich das am besten?


----------



## Gucky (12. Mai 2015)

Wie weit bist du denn schon mit der Programmierung?
Guck dir mal die JMonkeyEngine an.
Ich weiß nicht, wie gut dein Englisch ist aber hier gibt es für den Anfang mehr als genug Infos dazu.


----------



## MrTroble (13. Mai 2015)

Ich kenn JMonkey aber ich kann mit sowat nich umgehen daher ich will es selber machen
aber danke und mein Englisch is in ordnung


----------



## lord239123 (13. Mai 2015)

Zum Lernen der Bedienung der JMonkeyEngine kann ich dir das Buch JMonkeyEngine 3.0 empfehlen.
Es vermittelt alle wichtigen Informationen, die es zum Umgang mit der Engine zu wissen gibt.
Falls dir das nicht reichen sollte, kannst du dir als weiterführendes Buch JMonkeyEngine 3.0 Cookbook holen.

Natürlich kannst du die Bedienung auch mit Tutorials im Internet lernen, allerdings ist das deutlich aufwändiger.

Falls du es wirklich selber machen willst, solltest du dich mit Oberstufenmathematik auseinandersetzen.
Das Wichtigste ist dabei die Vektorrechnung. Wenn du mit Skalarprodukt, Abstandsbestimmung und Winkelbestimmung zwischen 2 Vektoren umgehen kannst, kannst du noch einmal über sowas nachdenken.


----------



## MrTroble (14. Mai 2015)

na das klingt ja schon besser also Oberstufenmathematik wird ja irgend wie machbar sein


----------



## Major_Sauce (14. Mai 2015)

Man sollte vielleich dazu sagen dass es drauf ankommt was für Objekte hast.
Wenn das einfach nur Würfel sind, dann kannst du die Kollision auch viel einfacher Lösen.

Mfg Major


----------



## Tobse (14. Mai 2015)

MrTroble hat gesagt.:


> na das klingt ja schon besser also Oberstufenmathematik wird ja irgend wie machbar sein



Sei dir da mal nicht so sicher  Was man in der Oberstufe über Mathematik lernt ist zwar genau das Theoriewissen, welches du für eine Kollisionsprüfung brauchst; aber das lässt sich nicht 1:1 programmieren:
Mathematische Aufgaben löst man ggf. pro Aufgabe mit einer anderen Formel. Du musst also die kompletten Vorgänge bei den Berechnungen erstmal stark abstrahieren und dann ja nach Fall sehr viel konkreten Code einbauen.
Dazu kommt: Wissenschaftliche Taschenrechner rechnen einen großen Term nicht einfach nur aus. Sie suchen nach optimierungen, vereinfachen das ganze mehrfach und haben eine auf Mathematik zugeschnittene Prozessorachitektur. In Java ist der double das höchste der Gefühle. Er hat zwar mehr genauigkeit als der Wissenschaftliche Taschenrechner aber die JVM kann keine Optimierungen zur Laufzeit ausführen. Mit einer Mathematik-Bibliothek zu rechnen, die all das implementiert, das der wissenschaftliche Taschenrechner tut, ist von der Performance her nicht machbar.
Faitz: gaaanz oft wirst du anstatt == prozentual > und < prüfen müssen; damit das suber läuft brauchst du vieeeeeel Feintuning, was alleine (und nur mit bloßer Oberstufenmathematik) nicht zu stämmen ist. Engines bringen das mit.


----------



## lord239123 (14. Mai 2015)

Du solltest auch um die eigentlichen Modelle einfachere Kollisionsmodelle herumlegen.
Einen Menschen könntest du z.B. mit einer Kugel und einem Zylinder beschreiben.
Das beschleunigt das um einiges.


----------



## MrTroble (14. Mai 2015)

naja sagen wir mal so ich hatte mir da selbst mal n ansatz parat gelegt 
1. abspeichern in arrays die Koordinaten ,länge ,höhe und breite von allen objekten
2. diese genzen zahlen dann erstmal in einem neun thread herum rechnen und mit den postionen der kamera bzw abjekt abgleichen
3.wenn das objekt jetzt also bei dem anderen objekt ist wird irgendwas ausgelöst

das ist aber sehr rechenleistungs belastend und Ineffizient des halb werd ich das wohl er mit Vector geometry machen


----------

