kollisionsabfrage.



  • Gibt es eigentlich nocht einen besseren Weg, um auf Kollision zu prüfen.

    Im Moment mache ich das so:

    Boundingbox min und max vectoren liegen in objectspace koordinaten vor.
    jetzt rechne ich die vier vectoren (von zwei Boundingboxes) mit den matrizen der objecte in worldspace Koordinaten um und teste dann ob ein vector von der einen box in der anderen box drinne ist.

    Nur mir scheint es sehr umständlich zu sein und auch performance fressend wenn ich jetzt sagen wir mal zB bei 1000 objecte diese ganzen umrechungn machen würde.



  • du studierst mathe, oder? 😃

    nimm doch einfach ne RECT struktur, in die du die world koordinaten deines
    objects reinschreibsch und berechne dann einfach, ob die punkte "ineinander"
    liegen.

    Bsp:

    if (rect1.right > rect2.left && rect1.left < rect2.right && rect1.bottom > rect2.top && rect1.top < rect2.bottom) {
      //Kollision
     }
    }
    

    es ist zwar auch mit boundingboxen, aber nicht so rechenintensiv wie
    vektoren. hoffe du weisst wie ich des meine. ich hab meine eigene struktur
    geschrieben, um die vierecke zu speichern, da ich mehr als nur die pos
    abspeichern wollte, aber mit RECT sollte es so funktionieren.
    hoffe das ist, was du wolltest. ausser du redest von 3D.

    das spielfeld darf halt nur positive koordinaten haben, sonst müsstest du des umschreiben.



  • Danke für deine antwort, aber ich hatte leider vergessen zu sagen das es in 3d ist. sorry.



  • dann kannste doch versuchen, dass irgendwie in 3D zu übernehmen.
    brauchste halt n punkt mehr (tiefe). müsste eigentlich auch gehn,
    oder???


  • Mod

    ich weiß ja nicht wie ungenau du es haben möchtest, aber ansonsten nimm 2 kugeln und berechne jeweils deren radius um die boxen und den abstant zwishcen den zentren, der muss kleiner als die summe der zwei radien sein ...

    naja nur ne möglichkeit von vielen 🙂

    rapso->greets();



  • Timo 2003 schrieb:

    Gibt es eigentlich nocht einen besseren Weg, um auf Kollision zu prüfen.
    Im Moment mache ich das so:
    Boundingbox min und max vectoren liegen in objectspace koordinaten vor.
    jetzt rechne ich die vier vectoren (von zwei Boundingboxes) mit den matrizen der objecte in worldspace Koordinaten um und teste dann ob ein vector von der einen box in der anderen box drinne ist.

    dann sind die boxes ja schräg und windschief.
    boxes sind aber nur wirklich geil, wenn sie achsenparallel sind.
    könntest du statt der boxes kugeln nehmen?



  • Man kann auch einfach ein neues Koordinatensystem mit den Vektoren, welche die Box aufspannen, als Basisvektoren erzeugen und alles darin umrechnen. Aber deine Frage zielt glaube ich eher auf Space partioning ab, damit nicht alle 1000 Boxes miteinander getestet werden.


Anmelden zum Antworten