Ich habe meine eigene 3D Game Engine in den letzten paar Jahren geschrieben und wollte sie eigentlich für ein Spiel verwenden.Terrain Objekt Kollisionserkennung
stolperte ich accros das folgende Problem:
ich mehrere Flugzeuge in meinem Spiel, aber lässt über eine einzige Ebene sprechen. Natürlich können Flugzeuge nicht in den Boden eintauchen und unter dem Gelände fliegen. Dafür muss ich etwas implementieren, das die Kollision zwischen einem Flugzeug/Jet und meinem Boden erkennt.
Die angegebenen Informationen sind die folgenden:
- Gitter von Gelände [2- dimensionales Array; bei entsprechend x speichert Höhe Koordinate z]
- Hitbox meiner Ebene (es mit meiner Ebene bewegt, so dass die Grenzen usw. sind alle bereits berechnet und angegeben)
So über die Hitboxen: I zwar über welche Methode zu verwenden. Der beste in Bezug auf die Leistung scheinen einfache Kugeln mit unterschiedlichem Radius zu sein.
über den Boden: Grafisch wird der Boden in Dreiecke unterteilt:
Also, was ich jetzt brauche, ist die optimale Art der Hitbox (Kugel, AABB, ...) und die nach effizientesten Berechnungen.
Mein Versuch war, jedes umgebende Dreieck zu bekommen und den Abstand von diesem zu jedem Zentrum meiner Hitbox-Sphären zu berechnen. Wenn der Abstand kleiner als der Radius ist, hat er erfolgreich eine Kollision erkannt. Aber wenn ich bis zu 10/20 Kugeln in meinem Flugzeug habe und wie 100 Dreiecke zu überprüfen, wird es zu viel Zeit brauchen.
Ein weiterer Versuch bestand darin, aus jeder Hitbox-Sphäre den vertikalen Abstand zum Boden zu ermitteln. Dieser benötigt viel weniger Berechnungen, scheitert aber, wenn er in die Nähe von steilen Oberflächen kommt.
Ich würde mich sehr freuen, wenn mir jemand helfen könnte eine effiziente Version von Flugzeug/Geländekollisionserkennung Umsetzung :)
Die Beantwortung dieser Frage wäre wirklich breit. Sie sollten über [Octree] (https://en.wikipedia.org/wiki/Octree) lesen - siehe auch [Bester Algorithmus für effiziente Kollisionserkennung zwischen Objekten] (https: // stackoverflow.com/questions/7107231/best-algorithm-for-efficient-Kollisionserkennung-zwischen-Objekten) und [Bounding-Boxen in Octrees] (https://gamedev.stackexchange.com/questions/25626/bounding-boxes-in- octrees) – Rabbid76
für gerenderte Ebenen können Sie dies im Shader tun. Ich nehme an, dass das Terrain vor Objekten gerendert wird, sobald Sie versuchen, das Ebenenfragment unterhalb der Oberfläche zu rendern (Sie testen die vorgespeicherte Tiefenstruktur aus dem vorherigen Durchgang). Sie wissen, dass eine Kollision auftritt, damit Sie die ID ausgeben können. Dieser Weg ist pixelgenau und kann sogar den Ort des Treffers angeben. – Spektre
Nun, um die Geschwindigkeit meiner Shader zu erhöhen, berechnete ich vorher die Höhe jedes Eckpunkts. Es gibt also keine "Tiefenstruktur". Ich könnte auch die Eckpunktpositionen ändern, nachdem ich sie von meiner Höhenkarte gelesen habe. – Luecx