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

28.10.2013, 00:37

3D Physikengine (BoundingMeshes)

Hallo Leute,

ich versuche seit geraumer Zeit irgendetwas zu BoundingMeshes zu finden, jedoch finde ich weder Tutorial noch fertige Physikengine.
Im Moment versuche ich einen 3D SpaceShooter zu programmieren und da lassen sich BoundingBoxen nicht wirklich einsetzen,
da ich zB bei einem Capital Ship mit einem Loch darin auf keinen Fall eine simple Box darum ziehen darf.
Nervt die Spieler bestimmt wenn sie dauerhaft gegen Luft fliegen und verrecken.
Als Beispiel sei hier aus dem Spiel Homeworld 2 das "Bentusi" genannt, in der Mitte ist dort auch keine Kollision.

http://imageshack.us/photo/my-images/129/megbentusni0.jpg

Im übrigen entwickel ich mit dem XNA Framework und C#, hoffe mir kann da jemand entweder ein Tutorial, Buch oder fertige Engine empfehlen.

MfG
LaT3St

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

28.10.2013, 07:09

Ich versteh die Frage nicht ganz. Willst du wissen ob

  1. Was für Alternativen es zu Boundingboxen gibt
  2. Wie man Bounding-Meshes baut
  3. Einen Vorschlag, wie die Bounding-Geometry für dieses Schiff aussehen könnte
  4. Wie du die Kollision programmiertechnisch gelöst wird
  5. Was für Physik-Engines es gibt

Zu letzterem, du könntest dir ja mal PhysX.Net anschauen. Ich selbst kenne nur die SDK und kann nichts zum .Net Wrapper sagen, aber das sieht auf den ersten Blick nach einer Alternative für dich aus.
@D13_Dreinig

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

3

28.10.2013, 11:09

Soweit ich das bisher verstehe, ist die Bounding Box eine Box (möglicherweise auch permanent achsenausgerichtet), die zur Vereinfachung der Kollisionsprüfungen verwendet wird, die Kollision des Objekts selbst kann aber dennoch mit einem anderen Kollisions-Element (Collider/CollisionComponent/...). Die Vereinfachung hat den Hintergrund, dass die Prüfung der Überlappung zweier achsenausgerichteten Boxen (oder Vierecke) wesentlich schneller ist, als zweier Objekte, die andere Primitiven (Kugel/Kreis, Kapsel, Zylinder, Dreiecke, regelmäßige Vielecke, ...), nicht ausgerichtete Boxen/Viereckeandere konvexe oder gar konkave Objekte sind. Die BoundingBox also durch ein "BoundingMesh" austauschen zu wollen dürfte nicht viel Sinn ergeben.
Das eigentliche Problem, sofern es ein Problem gibt und du dir nicht nur vorher Gedanken gemacht hast, dürfte also mit dem Killisionsobjekt zu tun haben.

PhysX wurde ja bereits genannt, für 2D-Spiele ist wohl Farseer geeignet. (Man sollte für ein Spiel, dessen Gameplay im 2 dimensionalen Raum stattfindet, keine 3D-Physik verwenden, auch wenn die Visualisierung 3D ist.)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

4

28.10.2013, 14:29

Es ist ein 3D Spiel (sowohl Gameplay als auch Grafik sind komplett 3D) und nein BoundingBoxes sind viel zu ungenau, insbesonders an den Achsen ausgerichtete.
Und ja entweder will ich wissen wie man die BoundingMeshes (vereinfachte Modelle) in XNA selbst implementieren kann oder aber auch gerne nehme ich eine fertige Physikengine in der BoundingMeshes unterstützt werden.
PhysX ist bei AMD-Karten viel zu langsam da dort entsprechender Chip fehlt.

MfG
LaT3St

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

28.10.2013, 14:56

Es ist ein 3D Spiel (sowohl Gameplay als auch Grafik sind komplett 3D) und nein BoundingBoxes sind viel zu ungenau, insbesonders an den Achsen ausgerichtete.

Na dann eben ausgerichtete Boxen, Prismen, Zylinder etc.? Wo steht denn, dass man nur eine Bounding Box pro Mesh verwenden kann? ;)

PhysX ist bei AMD-Karten viel zu langsam da dort entsprechender Chip fehlt.

Hast du das ausprobiert, oder woher weißt du, dass es zu langsam ist? Meines Wissens nach, nutzt PhysX weder AMD noch NVIDIA Karten für wirklich relevante Dinge...aber in einem richtigen Spiel verwendet man die Grafikkarte ja sowieso lieber zum Rendern... ;)
Ansonsten gibt es natürlich auch bullet...

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

6

28.10.2013, 15:06

PhysX ist bei AMD-Karten viel zu langsam da dort entsprechender Chip fehlt.

Hast du das ausprobiert, oder woher weißt du, dass es zu langsam ist? Meines Wissens nach, nutzt PhysX weder AMD noch NVIDIA Karten für wirklich relevante Dinge...aber in einem richtigen Spiel verwendet man die Grafikkarte ja sowieso lieber zum Rendern... ;)
Ansonsten gibt es natürlich auch bullet...


Für relevante, also spielverlaufsbeeinflussende Dinge habe ich PhysX auch noch nie in Aktion gesehen. Mehr für Eyecandy wie Rauch der sich um Objekte windet, Blätter die vom Winde verweht werden, etc. Und da hab ich auch schon selber erlebt wie PhysX ohne starke GPU richtig langsam sein kann und dann die Framerate drückt ...
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

7

28.10.2013, 15:28

Ja PhysX ist lediglich für nicht spielrelevante Dinge da, und ja nur NVIDIA Karten haben den PhysX Chip, bei AMD müsste das laut unbestätigten Quellen via CPU berechnet werden, Physik via CPU => äußerst schlechte Performance.
Fazit: PhysX ist nicht geeignet.

Physik wird übrigens in vielen Spielen bereits von der Grafikkarte berechnet, dennoch bleibt die Frage welche Physikengine ich nutzen kann.
Und ja ein aus vielen verschiedenen BoundingSpheren, -Boxen, -Kegeln etc zusammengesetztes BoundingMesh ist mir auch schon in den Sinn gekommen, jedoch seh ich das als ein bisschen aufwändiger an.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

28.10.2013, 15:38

Es ist mit Sicherheit aufwendiger eine genaue Polygonkolliosion zu entwickeln, als Kollisionsmodelle durch einzelne primitive Meshs zusammen zu setzen. Ansonsten wurde ja noch Bullet als Physik Engine angesprochen. Im Prinzip kannst du einfach mal nach 3D Physik Engines bei Google suchen. Ich vermute mal du hast du zu sehr auf den Begriff Bounding Mesh versteift. Das muss nicht immer so heißen. Im Prinzip suchst du einfach eine Physik Engine mit "irgendeiner"(mehr oder weniger) Möglichkeit zur Kollision. Was du suchst sollten meiner Meinung nach so gut wie alle Physik Engines bieten.
„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.“

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

28.10.2013, 16:03

Ja PhysX ist lediglich für nicht spielrelevante Dinge da, und ja nur NVIDIA Karten haben den PhysX Chip, bei AMD müsste das laut unbestätigten Quellen via CPU berechnet werden, Physik via CPU => äußerst schlechte Performance.

Fazit: PhysX ist nicht geeignet.

NVIDIA Karten haben keinen "PhysX Chip". PhysX nutzt lediglich für gewisse Dinge eine NVIDIA GPU, vermutlich über CUDA...
Was genau für hardwarebeschleunigte Effekte planst du denn, in deinem Spiel einzusetzen? Die Kollisionserkennung wird, auch in PhysX, jedenfalls sehr wahrscheinlich nicht hardwarebeschleunigt sein und auch in Rechnern mit NVIDIA GPU auf der CPU berechnet werden...

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

10

28.10.2013, 16:12

Übrigens haben auch bei den angesprochenen Capital Ships Boundingboxen ihren Sinn: Schnell erst einmal vorberechnen wo überhaupt eine Kollision möglich sein könnte. Meistens macht es überhaupt erst Sinn eine Kollision Polygon für Polygon zu berechnen, wenn sich die Boundingboxen überlappen. Denn ob HW beschleunigt oder nicht: Relativ Aufwendig dürfte so eine Berechnung schon sein und du wirst bei einem echten Spiel nicht nur den Spieler und ein großes Schiff auf dem Schlachtfeld haben.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Werbeanzeige