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

trash52

Treue Seele

  • »trash52« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Dresden

  • Private Nachricht senden

1

27.11.2008, 23:35

Kollisionserkennung Model Model

Also, ich bastel gerade an einer halbwegs funktionierenden Kollisionserkennung.

Hab alle Daten aus der X File geladen und die Dreieck Dreieck-Funktion funktioniert auch.

Es werden sämtliche Dreiecke miteinander getestet,

bei 2 Modellen mit 643 * 520 Dreiecken bricht die Framerate total ein, also hab dann nur noch 3,54 Bilder pro Sekunde.

Muss ich meinen Code jetzt in die Tonne stecken?

Oder welches Rezept fehlt mir?

LG Trash52

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

27.11.2008, 23:38

Boundingvolumes heißt das Rezept das die fehlt.
@D13_Dreinig

trash52

Treue Seele

  • »trash52« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Dresden

  • Private Nachricht senden

3

27.11.2008, 23:41

Ok, danke dir.

Hab mal bissel gekuckt, daraus resultieren weitere Fragen:

1.) Was für eine Boundingbox soll man denn nun nehmen?
(die Objekte fliegen später durch den 3d Raum, mit Rotation und Translation)

AABB oder die OBB?

2.) Wie unterteile ich den mein Modell?
( Unterteilt man einfach eine Box immer gleichmäßig in 8 weitere gleich große Boundingboxen?)

3.) Wie viele solcher Dreiecke min und maximal kommen den in eine Box?
( Ab wann lohnt sich das Prinzip den?)

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

4

28.11.2008, 08:31

Das kommt darauf an welche Genauigkeit du für dein Spiel benötigst. Ich würde jedoch mit einer Bounding Box oder eventuell noch besser einer Bounding Sphere/Elipsoid pro Model anfangen. Damit kannst du wenigstens schonmal sehr schnell prüfen ob überhaupt die Chance einer Kollision besteht. Wenn du dann mehr Genauigkeit brauchst kannst du nach dem Check mit der äußeren Volume weitere kleinere Volumes testen. Wie weit du das unterteilst kommt drauf an ob es dir reicht wenn die Figur abgeknallt wird oder ob du der Figur den Fingernagel wegschießen möchtest ;). Aber für viele Spiele reicht eine große Bounding Volume.

trash52

Treue Seele

  • »trash52« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Dresden

  • Private Nachricht senden

5

30.11.2008, 22:08

Kollision Box Box

So, hab mir jetzt eine Funktion geschrieben, welche die Kollision zwischen 2 frei drehbaren Boxen testen soll, es scheint mir nur relativ rechenaufwändig zu sein,

da nun jedes mal 12 Ebenen zu erstellen sind

und im ungünstigsten Fall werden alle Punkte mit den Ebenen überprüft,

falls ein Punkt einer Box innerhalb der 6 Ebenen der anderen Box ist, gibt es eine Kollision .

Wie habt ihr das Problem den gelöst?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

30.11.2008, 22:48

Weiß nicht was an einem Kollisionstest zwischen zwei OOBs rechenintensiv sein soll. Die Boxen werden einmal erstellt, danach kannst du immer auf eine Kollision zwischen den beiden Boxen testen, ganz einfach.
@D13_Dreinig

trash52

Treue Seele

  • »trash52« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Dresden

  • Private Nachricht senden

7

30.11.2008, 23:25

Und wieder scheint mir was zu fehlen,

kann man Ebenen in der Parameterform denn auch mit einer Matrix verschieben, bzw. rotieren?

( ok, dann stimm ich dir zu, bei mir werden die Ebenen jedes mal neu berechnet.)

Wie kann ich denn jetzt eine Ebene in parameterform mit einer Matrix rotieren und verschieben?

8

30.11.2008, 23:48

Naja... Der Stützvektor lässt sich einfach durch die Matrix manipulieren, das ist kein Thema. Aber die Richtungsvektoren der Ebene dürfen nur gedreht/skaliert werden, nicht aber verschoben. Wenn die Matrix wirklich nur rotiert/skaliert/verschiebt, dürfte es reichen die zusätzliche Koordinate einfach wegzulassen, aber ganz sicher bin ich mir da nicht (werds morgen früh vielleicht mal genau durchgehen)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

01.12.2008, 09:17

Wieso eigentlich Ebenen? Für ein OOB reichen drei Achsen und der Mittelpunkt.
@D13_Dreinig

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

01.12.2008, 12:19

Du kannst ja auch mehrere Bounding-Volumes und entsprechende Tests miteinander kombinieren. Z.B. kannst du zunächst eine Kugel als Bounding-Volume nehmen, die das jeweilige Modell komplett umschließt, unabhängig von der Ausrichtung des Modells. Im Gegensatz zu OOBs sind die Kugelparameter dabei konstant und per Vergleich des quadrierten Abstands zweier Modellmittelpunkte (bzw. Referenzpunkte) mit dem Quadrat der Summe der beiden Kugelradien lässt sich eine Kollision der Kugeln checken. Falls eine Kollision der Kugeln vorliegt, checkst du die Kollision der OOBs. Falls dort wiederum eine Kollision vorliegt, ... stufenweise halt: Die kaskadierenden Checks werden immer genauer und rechenintensiver, bis du bei den eigentlichen Primitven angelangt bist. Durch "billige" Checks am Anfang werden meistens sehr schnelle "Early-Outs" realisiert. Insbesondere bei einer Welt, wie du sie vorhast zu bauen: Da kommt es ja nur in den seltensten Fällen überhaupt zur Kollision.
Kommen Sie nie mit einem Schwert zu einer Schießerei.

Werbeanzeige