Kleine Kollisionsfrage, wirklich klein



  • Hallo!
    Das System das ich zur Kollisionserkennung verwende sieht ja wie folgt aus:
    Player ist von einer Kugel umhüllt. Das Level ist mit vielen Octrees bis zu einer bestimmten Tiefe überspannt. Nun will ich wenn meine Kugel ein Octree schneidet, schauen in welchem das passiert und immer tiefer gehen, je nachdem wie weit ich die Octrees verschachtelt habe bis ich in der letzten Ebene bin. Dann möchte ich alle Polygone meines Models mit denen des letzten Octrees, das geschnitten wird, vergleichen. Nur wann soll ich feststellen welche Polygone in welchen Octrees sind? Ich könnte bei jeder Kollisionsabfrage alle Polygone des Levels durchgehen ob sie in der Box liegen oder nicht, was denke ich jedoch die Performance so stark reduziert, dass das Spiel nicht mehr spielbar ist. Dann könnte ich für jede Tiefe ein Array anlegen. So etwas wie einen Indexbuffer 🙂 Wenn ich sage mein Level wird verschachtelt bis zu einer Tiefe von "4" habe ich 4 "Indexbuffer" und überprüfe am Anfang (also beim Laden des Models) welche Polygone in den jeweiligen Tiefen in welchem Octree liegen. Dann muss ich bei der Kollisionsdetection im Spiel nur noch den passenden "Indexbuffer" hernehmen und mit den Playerpolygonen überprüfen. Was haltet ihr davon?

    Kevin



  • Berechne mal, wie weit welches Objekt weg ist und merke dir, wann frühestens eine Kollision eintreten kann (zeit = strecke/geschwindigkeit).
    Frühestens nach dieser Zeit musst du wieder auf Kollision prüfen. Das ist eine Möglichkeit, die du natürlich noch mit anderen kombinieren kannst und solltest.



  • ist meine variante nich so toll?



  • Das habe ich nicht gesagt. Aber ich bezweifle irgendwie, dass alleine das für eine Polygongenaue Kollisionserkennung ausreicht.
    Ist jetzt natürlich sehr pauschal, bei ein paar billigen Raumschiffchen reicht das wahrscheinlich schon.
    Du sollst ja deine Idee nicht wegwerfen, sondern überlegen, mit was du das noch kombinieren kannst.



  • Ich versuchs jetzt mal mit der Methode dass jede BoundingBox ein Array hat mit den sie schneidenden Vertices 🙂



  • hi

    ist vieleicht nur ein Ansatz aber warum net. Sag wir mal das du eine Spielfigur hast die zwei Arme, zwei Beine und einen Kopf hat. Dann würde ich erstmal einen Boundingbox für das ganze Model machen. Im nächsten Schritt eine Boundingbox für die Arme(können auch zwei sein), Beine(können auch zwei sein)und den Kopf. Nun überprüfst du ob eine Kolision mit der ersten Boundingbox stattgefunden hat.

    Nein->nichts tun.
    Ja->Überprüfen ob eine Boundingbox innerhalb der großen Boundingbox mit dem Object Kolidiert.

    Das ist so vom Teoretischen die einfacheste und schnellste Methode. Man kannes natürlich noch weiter spannen das man sagt die Finger usw. bekommen auch eine Box.

    gruß
    de_Bert



  • genau das habe ich vor 🙂
    Nur weiß ich nicht bis zu welcher Tiefe ich das Level aufteilen soll...naja einfach mal rumprobieren... Wie viele habt ihr da in etwa wenn ihr euer Level gleichmäßig in Octrees aufteilt? Geht ihr dann im letzten Schritt zu den Polygonen über oder?



  • hi

    Surkevin schrieb:

    Geht ihr dann im letzten Schritt zu den Polygonen über oder?

    das würde ich schon speedmäßig nicht machen. Das höchste was ich machen würde währe bis zu jedem Knochen. Also bei den Fingern 5 * 3, an einer hand. Bis auf Polygonebene zu gehen ist sinnlos, das sieht man auch net im Game.

    gruß
    de_Bert



  • Ja ok aber was soll ich im Level machen? Das teile ich regelmäßig in Octrees auf und ich kann ja überprüfen mit welchen Boxen aus dem Level mein Model kollidiert. Jedoch muss ich doch irgendwann überprüfen ob es mit den Polygonen meines Levels kollidiert oder nicht weil ich sonst ja nicht sagen kann ob es wirklich kollidiert oder nicht sondern nur ob es mit den Boxen kollidiert. Bei meinem Spielermodel ist das anders da ich da ja genau weiß wie jede Person aufgebaut ist. Beim Level weiß ich das allerdings nicht!!



  • wie habt ihr es denn gemacht?



  • seid ihr alle im Urlaub oder wollt ihr es mir verheimlichen? 🙂 Wunder mich nur..



  • 2teres

    Bye, TGGC (Der Held ist zurück)



  • mhh schade...wäre nett wenn ihr es mir trotzdem die Wahrheit offenbaren könntet 🙂


Anmelden zum Antworten