2016-11-20 5 views
1

Ich bin gerade dabei, ein sehr einfaches 3D-OpenGL-Spiel in C++ als Teil eines kleinen College-Projekts zu entwickeln. Wir bekommen jedoch von den Lehrern nicht viele Einsichten und nur eine sehr begrenzte Dokumentation sowie einen kleinen Zeitrahmen, daher bin ich im Moment ein wenig verloren.Grundlegende 3D-OpenGL-Kollisionserkennung C++

Mein Spiel ist eine Panzerschlacht auf einer orthogonalen Ebene, die ziemlich genau wie das Bild aussieht, das ich unten skizziert habe. Jeder Panzer (A und B) kann von einem anderen Spieler kontrolliert werden, und jeder kann Projektile abfeuern, die die Kollision des anderen Panzers beeinflussen sollen.

enter image description here

Meine Frage ist, was die einfachste Art der effektive Umsetzung Kollisionen für die Tanks sein würde? (Tank vs. Tank, Tank vs. Map boundaries und Tank vs jede Art von quaderförmigen Objekt wie das in der Mitte des Bildes - und das gleiche gilt aber für die Geschosse aus den Panzertürmen geschossen).

Idealerweise ohne die Notwendigkeit, eine externe Physik-Engine zu verwenden, aber auch akzeptiert, wenn die Implementierung einfach durchgeführt werden kann. Im Moment verwende ich ausschließlich die GLUT-Bibliothek.

Antwort

2

Laden Sie Box2D (http://box2d.org) herunter und integrieren Sie sie in Ihr Projekt.

Wenn Ihr Projekt nicht eine Physik-Engine implementiert, dann machen Sie sich keine Mühe, es selbst zu machen. Ihre Zeit wird viel besser damit verbracht, zu lernen, Bibliotheken zu integrieren und wie richtige Physik-Engines funktionieren.

Sie können dann leicht einen Box Collider für Ihre Panzer, Kreis für Projektile und 4 Linien für Ihren Perimeter verwenden. Sie können Rückrufe erstellen, um Sie zu benachrichtigen, wenn ein Projektil mit einem anderen Panzer kollidiert ist.

Sie müssen Kräfte und Drehmomente verwenden, um Ihre Tanks zu bewegen und zu drehen, anstatt nur ihre Positionen zu aktualisieren. Aber Sie müssten das wahrscheinlich sowieso tun, wenn Sie die Physik selbst implementieren würden.