Collisions"problem" - EntityRadius mit Y-Wert

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

MegaTefyt

Betreff: Collisions"problem" - EntityRadius mit Y-Wert

BeitragDo, Sep 08, 2005 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

eine kleine Beschreibung zur Sachlage:

Zur Zeit "experimentiere" ich ein bisschen mit der Kollision in Blitz3D. Ich habe mir überlegt, wie ich eine vernünftige Kollisionsabfrage an mein Raumschiff bekomme, da ich keine einfache Kugel darum als Kollisionsabfrage nehmen will - ist mir zu ungenau. In kurz: EntityRadius mit nur einer Koordinate kommt für mich nicht in Frage. Zum besseren Verständnis eine Skizze:

user posted image
(das Rote ist der Kollisionsradius, oben und unten ist mir zuviel Freiraum)

Ich überlegte mir, ähnlich wie bei Counter-Strike und anderen FPS-Games, mehrere Hit-Boxen mit Pivots anzubringen, ein Pivot für den Rumpf, zwei Pivots für die Flügel und dann mit EntityBox die Größe definieren. Das scheitert allerdings daran, dass man mit Collisions immer nur Kugel-Irgendwas abfragen kann, nicht Box-Irgendwas.

Dann kam ich auf die Idee einfach die drei Entities anstatt mit Boxes auch mit EntityRadius zu bestücken, allerdings mit Y Wert. Damit wird die Kugel nach oben und unten in die Länge gezogen. (Zum Selbsttest wie das aussieht: erstellt eine Kugel und skaliert diese mit 1, 2, 1 - so wäre dann die Kollision) Da man ja nur Y strecken kann würde dies zu Beginn am Rumpf-Pivot so aussehen:

user posted image
(man erkennt gut die Y-Streckung)

Nun versuche ich folgendes: ich drehe das Rumpf-Entity um 90° um die X-Achse, so dass die Kollision am Raumschiff nun eigentlich so aussehen sollte:

user posted image
(90°-Drehung des Rumpf-Pivots)

Tja, und genau da liegt das große Problem: Blitz3D dreht den Kollisionsraum nicht mit, ich kann das Pivot (und das Raumschiff) drehen wie ich will, der Kollisionsraum steht immer genau so wie auf Bild 2 ganz gerade und dreht sich kein Stück mit. Natürlich habe ich vieles getestet um das zu "beheben", aber nichts hat so wirklich funktioniert. Ich habe mit meinem Arbeitskollegen darüber diskutiert und kamen zu dem Schluss, dass es daran liegen könnte, dass EntityRadius früher nur einen Wert hatte und es damals sinnlos gewesen wäre die Kollision mitzudrehen (was macht es schon für einen Sinn eine Kugel drehen zu wollen Wink). Als sie die Y-Streckung mit einbauten haben sie wohl vergessen, dass mit diesem Zusatz auch ein Mitdrehen sinnvoll wäre. Meint ihr, dass das ein Bug ist oder ein "fehlendes Feature"? Also mir fehlt es definitiv, ich könnte so viel genauere Kollisionsabfragen für mein Raumschiff machen. Natürlich könnte ich auch das ganze Raumschiff mit 8-10 "kleineren" Kollisionskugeln ausstatten, das wäre aber arg umständlich und natürlich auch rechenaufwändiger. Mit meiner geplanten Methode oben könnte ich auch wunderbar zwischen "Rumpftreffer" und "Flügeltreffer" unterscheiden.

P.S.: Und für die Skeptiker unter euch kann ich auch noch erklären, wie ich das ganze getestet habe: den EntityRadius eines Pivots auf 0.5, 1 setzen (wäre dann 1 in der Breite und 2 in der Höhe). Nun erstelle ich einen kleinen Cube (0.025 Skalierung) und setze diesen auf -1, -1, -1. Nun gehe ich den X Wert von 1 bis -1 in 0.1er-Schritten durch, nach einem Durchlauf erhöhe ich Y um 0.1 und setze X zurück auf -1, erreicht Y die 1 erhöhe ich Z um 0.1 und setze Y zurück auf -1. Das ganze bis Z 1 erreicht hat. Also vom Prinzip her gehe ich in einem 2*2*2 großen Würfel, der rund um den Kollisionsradius liegt, mit dem kleinen Würfel jede mögliche Position in 0.1er-Schritten durch und teste auf Kollision. Sobald der kleine Würfel mit dem EntityRadius kollidiert markiere ich an diese Stelle mit einem kleinen Würfel. Somit wird an jeder Kollisionsstelle ein Würfel erstellt und letztendlich hat man nach einem kompletten Durchlauf den Kollisionsraum grob sichtbar gemacht. Klar geht das auch einfacher, aber ist ja nix was dauerhaft in einem Programm sein sollte, sondern zur zum schnellen Test.

P.P.S.: Die Kollisionsboxen bei EntityBox drehen sich ohne Probleme mit!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Sep 09, 2005 2:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuche mal den Kollisionsradius nicht zu strecken sondern zu stauchen... Dann hast du ein 'platten Teller'. Die Flügel werden dann auch in die Kollisionsabfrage mit einbezogen... Oder wenn sich eine Kollisionsbox mitdreht (hab ich nicht ausprobiert), dann benutze zwei davon. Eine Box für den Rumpf und eine Box für die Flügel...
 

MegaTefyt

BeitragFr, Sep 09, 2005 7:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Zum 1. Vorschlag: das Raumschiff kann auch "Schräglage" und auch da würde sich eine gestauchte Kugel nicht mitdrehen.

Zum 2. Vorschlag: da zitiere ich einen Absatz von mir:

Zitat:
Ich überlegte mir, ähnlich wie bei Counter-Strike und anderen FPS-Games, mehrere Hit-Boxen mit Pivots anzubringen, ein Pivot für den Rumpf, zwei Pivots für die Flügel und dann mit EntityBox die Größe definieren. Das scheitert allerdings daran, dass man mit Collisions immer nur Kugel-Irgendwas abfragen kann, nicht Box-Irgendwas.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group