2017-04-02 3 views
1

Ich versuche, ein einfaches Ego-Shooter-Spiel mit Bullet und OpenGL zu machen. Ich habe das Problem, dass meine starren Körper nicht mit hoher Geschwindigkeit kollidieren.Bullet - Steife Körper kollidieren nicht mit hoher Geschwindigkeit?

Meine Kugeln werden direkt durch andere starre Körper, die ich habe, wie Wände. Verringern der Geschwindigkeit auf weniger als 10 führt zu Kollisionen, aber dies ist für ein sich bewegendes Geschoss zu gering. Die Kugel bewegt sich auch wahnsinnig schnell (ich weiß, dass es eine sich schnell bewegende Kugel ist, aber manchmal kann ich es nicht einmal sehen, nicht sicher, ob das erwartet wird).

Ich denke, dass es damit zu tun hat, wie ich die Simulation mache? Das Nachlesen hat mich verwirrt. Wie kann ich es so machen, dass meine Objekte immer kollidieren (zumindest wenn es ziemlich schnell geht), und wenn möglich, gibt es eine Möglichkeit, die Simulation zu verlangsamen, während die korrekte Geschossgeschwindigkeit etc. beibehalten wird, so dass ich das tatsächlich sehen kann Kugel bewegt sich und kollidiert?

+0

Ist das in der Einheit? –

+0

Wie erkennen Sie Kollisionen im Code? –

+0

Nicht in Unity, nur C++ - Code mit OpenGL und Bullet. Und um Kollisionen zu erkennen, lasse ich Bullet einfach damit umgehen, ich habe keine Kollisionsfahnen. Ich glaube Bullet behandelt standardmäßig Kollisionen (siehe Bullet's falling sphere Tutorial), und meine Kugeln kollidieren mit Wänden, Fußböden etc., wenn sie relativ langsam fahren (Sie werden auf den Boden fallen und auf dem Boden ruhen Körper zum Beispiel) –

Antwort

1

Hier sind einige Ansätze zu lösen: -
Aus How can I avoid missing collisions for fast moving objects? - an official FAQ

  • kleinen Zeitschritten das Objekt entlang der Bewegung
  • ray Besetzung in die neuen Position kopiert Extrudieren
  • Wobbelkollisionstest (konvex gegossen, linear gegossen)
  • kontinuierliche Kollisionserkennung, einschließlich Rotationsbewegung

Lesen Sie den Link für mehr Details. Es ist kein triviales Problem.
Eine wichtige Sache zu fragen, vor allem versuchen: brauchen Sie wirklich High-Speed-Objekt?
Es ist nicht kostenlos (kostet mehr CPU).

Hier ist ein weiterer nützlicher Link (weniger nützlich obwohl): https://gamedev.stackexchange.com/questions/11961/how-can-i-enable-ccd-in-bullet-physics

+0

Interessant, viele mögliche Lösungen, danke. Ich werde Ihr für jetzt als akzeptiert markieren, und ich könnte hier mit meiner Lösung posten. Ich brauche die Objekte jedoch sehr schnell, da es sich um Kugeln handelt und aufgrund dessen, was ich versuche zu implementieren, ist das Ray Casting in eine Position keine Option. –

+1

Eigentlich war @javaLover, der letzte Punkt in Ihren Vorschlägen war eine schnelle und einfache Lösung, die kontinuierliche Kollisionserkennung war ein guter Weg. Für jeden anderen mit diesem Problem versuchen Sie etwas in diesen Zeilen: \t \t \t bulletRigidBody-> setCcdMotionThreshold (1e-7); bulletRigidBody-> setCcdSweptSphereRadius (0.50); –

+0

@Jack Phipps Vielen Dank für das Teilen eines Snippets. Es wird für viele wirklich nützlich sein. – javaLover

Verwandte Themen