Woher Kollisionsdaten?
-
Hi!
Woher nehmt Ihr in Euren 3d-Spielen die Kollisionsdaten her?
Das Problem ist ja, dass sich die Levelgeometrie in einem oder mehreren Vertexbuffern befindet, und wenn ich da ran will muss ich ja mit ->Lock() erstmal den ganzen Level aus dem VRAM runterladen. Zusätzlich braucht man dann ja noch die Polygone im Indexbuffer der auch geLockt() werden müsste...Ist es sinnvoll, den Level an 2 verschiedenen Stellen zu speichern, einmal im VRAM und einmal im Heap? Oder ist das mit dem Lock()en gar nicht so langsam dass es den zusätzlichen Speicherplatz rechtfertigen würde?
Wie löst ihr das Problem?
-
Hier kann dir niemand dazu eine Antwort geben.
-
Ein Abbild des ganzen im RAM sollte helfen. Aber bevor du Meshcollision betreibst checke zuvor erst mal die Bounding Sphere oder Bounding Box.
-
... und dann bei größeren Modellen nach einem Octree mit Bounding-Boxen auf Kollision testen.
M.T.
-
Nur ist das Grundmodell vom Octree auch nicht ganz ohne Probleme.
Z.B. Objekte die in mehreren Leafes zu finden sind usw.
Aber es gibt dafür ganz gute Ansätze, z.B. den leicht verschobenen Tree der sich nicht 100%ig nach den Geteilten Maßen aufteilt.usw.
-
Ne, das ist umständlich, dann müsste man ja Splittung und andere potentiellle Fehlerbringer einbauen - da sollte man lieber mal ein Polygon doppelt einordnen ...
M.T.
-
OK, danke für die Antworten. Es ging mir weniger um die Technik sondern mehr um die Art der Speicherung. Ich werde es dann so machen, dass es jeweils eine Kopie der Geometrie im Ram und eine im VRam gibt. Das macht es dann nebenbei auch einfacher den Level zu zerteilen.
Danke