Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.01.2015, 09:56

Kollisionserkennung mit Voxeln, aber wie?

Hi,

ich suche eine Möglichkeit, die Kollisionserkennung in meinem Spiel zu implementieren. Der Spieler soll sich praktisch ganz normal bewegen, also auch richtig fallen (gleichmäßig beschleunigte Bewegung). Er soll auch auf den Block vor ihm steigen, wenn sich darüber kein Block befindet und er darauf stehen kann.

Kann man für solche Dinge bullet physics benutzen? Wenn ja, dann habe ich folgende Fragen dazu:

1) Welche von den Unterklassen von btCollisionShape ist eine ganz normale AABB? Ich dachte, es wäre btBoxShape, aber irgendwie sah die Klasse nicht danach aus...

2) In einem Tutorial wurde erklärt, wie man eine Kugel hinzufügt, die vom Boden abprallt. Kann man das Abprallen auch ausschalten (humanoide Körper sollten ja eigentlich nicht abprallen nach einem Sturz)?

3) Wie erkenne ich, wie schnell der Spieler oder NPC war, als er den Boden getroffen hat, um daraus den Fallschaden zu berechnen?

4) Wie kann ich den Spieler dazu bringen, auf einen Würfel vor ihm draufzusteigen (sofern möglich) statt dagegen zu laufen?

Wenn nein, gibt es irgendwo ein gutes Tutorial zur Kollisionserkennung? Ich habe es auf verschiedene Arten versucht, allerdings hatte ich immer entweder eine Kollisionserkennung mit zu schlechter Performance oder eine, die nicht funktioniert und ebenfalls eine zu schlechte Performance hatte...

Grüße,
Magogan
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

07.01.2015, 10:27

Zu Bullet speziell kann ich dir wenig sagen aber deine erste Frage sollte sich denke ich mit Google gut klären lassen.
Körper prallen nicht ab ohne dass es ihnen gesagt wird. Ich kenne dein Tutorial jetzt ja nicht von daher kann ich nur raten was da gemacht wird. Entweder die Kugel bewegt sich immer und bei Kollision wird nur die Richtung geändert oder es wird mit irgendwelchen physikalischen Materialien gearbeitet die bestimmen wie elastisch so ein Körper ist. Vielleicht gibt es noch andere Möglichkeiten. An sich gibt es zwei Möglichkeiten für Kollision in Bewegung:
1.
Bewegen, Kollision registrieren, Kollision auflösen indem sich zum Beispiel zurück bewegt wird.
2.
Position nach Bewegung bestimmen, Kollision prüfen, gegebenenfalls nur so weit bewegen wie möglich.
Mit einer Physikengine verfolgt man normalerweise Möglichkeit 1. Nach meinem Wissen zumindest.

Merk dir deine Geschwindigkeit. Irgendwo wirst du sie ja speichern. Sobald die Kollision auftritt ist eben das dein gesuchter Wert.

Du könntest bei frontaler Kollision einen Ray nach vorne schießen und gucken ob das vor dir liegende Objekt klein genug ist um darauf zu klettern. Wenn ja kannst du deine Spielfigur eben dahin bewegen.

Ich glaube allgemein du denkst dir Pysikengine würde dir mehr abnehmen als sie es kann. Guck vielleicht mal weiter nach Tutorials. Oder vielleicht ja hier der ein oder andere noch gute dazu.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

3

07.01.2015, 11:02

Zu 1) Ok, btBoxShape scheint tatsächlich eine AABB zu sein. Ich werde mir das nochmal genauer angucken.

Zu 2) Ich schau mal genauer, irgendwie lässt sich das bestimmt konfigurieren.

Zu 3) Die Geschwindigkeit wird von Bullet intern gespeichert. Ich kann sie zwar auslesen, allerdings weiß ich nicht, wie ich sie zum Zeitpunkt des Aufpralls herausfinden kann. Andererseits dürfte das auch egal sein, die Geschwindigkeit erhöht sich pro Zeitschritt (1/60 s) bei einer Gravitation von -10 m/s² nur um 0,6 km/h. Bei höherer Gravitation (die in meinem Spiel auch vorkommen kann) ist das aber ein höherer Geschwindigkeitsunterschied... Hmm...

Zu 4) Das mit dem Nach-Oben-Bewegen ist nun auch nicht so einfach, es soll ja nicht abrupt geschehen, sondern schon 0.25 Sekunden oder so dauern, bis man den Höhenunterschied von bis zu 50 cm überwunden hat. Ich weiß aber nicht, wie ich sowas mit Bullet machen kann... Ich habe ja schon Probleme gehabt, das ohne Bullet zu implementieren, weshalb ich ja Bullet verwenden möchte.
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

4

07.01.2015, 11:09

Konkret zu Bullet kann ich Dir nix sagen, aber allgemein:

1) ein BoxShape ist in den meisten Physiklibs ein Quader. Eine AABB ist zusätzlich zu "Quader" auch noch "axis aligned". Und beide werden sehr unterschiedlich verwendet. Das sind Äpfel und Birnen, evtl. kriegst Du deswegen keinen Fuß auf den Boden.

2) Da müsste man mit den Parametern des Materials arbeiten können. Heißt bei den meisten Libs "restitution", und besagt sinngemäß, wie stark ein Objekt von einem anderen wegprallt.

3) Geschwindigkeit merken ist das einfachste. Du kannst Dich aber auch in den Pre-Kollision-Callback reinhängen, falls Bullet sowas hat

4) Das ist ne üble Sache, die man vor allem für Voxel nicht so einfach sagen kann. Schau mal, ob Bullet einen "Character Controller" mitbringt. Der sollte zumindest für normale Geometrie sowas eingebaut haben.

Und mich würde interessieren, was Du rausbekommst. Ich habe nämlich auch noch vor, Bullet in mein Voxelspiel einzubauen. Dafür müsste ich dann höchstwahrscheinlich eigene Collider bauen, also die Kollisionstests in der Narrow Phase selbst schreiben. Und das wird spannend.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Werbeanzeige