Kollision ......... Reaction

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

tft

Betreff: Kollision ......... Reaction

BeitragFr, Sep 23, 2005 7:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo....

nach dem erkennen einer Kollision möchte ich das der kollidierte gegenstand die richtung in Abhängigkeit der Kolidierten Fläche ändert.
Kann man mittels der Normalen die jede Fläche hat das machen?
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

tobiasm767

BeitragFr, Sep 23, 2005 9:24
Antworten mit Zitat
Benutzer-Profile anzeigen
du bekommst den Normal-Wert der Kollision durch die Befehle CollisionNX(id,index), CollisionNY(id,index) und CollisionNZ(id,index)

tft

BeitragFr, Sep 23, 2005 10:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi....

ja das weis ich.... aber wie wende ich dies an um daraus eine Richtung zu machen. Damit ich das Object entsprechend dieser Richtung bewegen kann. Haste mal ein Beispiel?
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!
 

MegaTefyt

BeitragFr, Sep 23, 2005 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Befehl den du brauchst heißt BlitzBasic: [AUSKLAPPEN]
AlignToVector  ;  <-- KLICK


Beispielsweise benutze ich das in meinem aktuellen Projekt, um Partikel auszurichten. Ein Laser schlägt auf einer Oberfläche ein, den Kollisionspunkt ermittel ich einfach per CollisionX, CollisionY und CollisionZ. An diese Stelle positioniere ich den Emitter für die Partikel und richte diesen mit AlignToVector und den CollisionNX, CollisionNY und CollisionNZ Werten aus. Als Achse bei AlignToVector nehme ich Y, also Wert 2. Dann sprühen in diese Richtung die Funken (weg vom Auftreffpunkt), wenn ich den Partikel-Emitter starte. Würde dann in etwa so aussehen (stark vereinfacht):

BlitzBasic: [AUSKLAPPEN]

If EntityCollided(LaserEntity, UmgebungsobjektKollision) Then

PositionEntity PartikelEmitter, CollisionX(LaserEntity, 1), CollisionY(LaserEntity, 1), CollisionZ(LaserEntity, 1), 1
AlignToVector PartikelEmitter, CollisionNX(LaserEntity, 1), CollisionNY(LaserEntity, 1), CollisionNZ(LaserEntity, 1), 2

; Hier würde der Partikel-Emitter gestartet, das LaserEntity ge\"FREE\"t, eventuelle Type-Einträge gelöscht usw.

End If


Als Kollisionsindex nehme ich hier 1, die Wahrscheinlichkeit, dass ein Laser mehrere Objekte auf einmal trifft ist (bei meinem Projekt zuminest) praktisch Null. ^^

Zum einfachen Verständnis habe ich mal ein kleines Beispielprogramm geschrieben:
BlitzBasic: [AUSKLAPPEN]

Graphics3D 800, 600, 16, 2
SetBuffer BackBuffer()

Camera = CreateCamera()
CameraViewport Camera, 0, 0, GraphicsWidth(), GraphicsHeight()
CameraRange Camera, 0.001, 1000

Cube = CreateCube()
EntityColor Cube, 255, 0, 0
PositionEntity Cube, 0, 0, 5
RotateEntity Cube, 45, 0, 0
EntityType Cube, 2

Kugel = CreateSphere(8)
EntityColor Kugel, 0, 255, 0
ScaleEntity Kugel, 0.1, 0.1, 0.1
PositionEntity Kugel, 0, -0.5, 1
EntityType Kugel, 1
EntityRadius Kugel, 0.1

Delay 1000

Collisions 1, 2, 2, 2

While Not KeyHit(1)

; Kugel alle 10 Sekunden zurücksetzen und Kollision anschalten
If MilliSecs() - LastTime > 10000 Then
LastTime = MilliSecs()
PositionEntity Kugel, 0, -0.5, 1
RotateEntity Kugel, 0, 0, 0
EntityType Kugel, 1
End If

; Bei Kollision von Kugel mit Cube die Kugelrichtung ausrichten und Kollisionsbehandlung abschalten
If EntityCollided(Kugel, 2) Then
AlignToVector Kugel, CollisionNX(Kugel, 1), CollisionNY(Kugel, 1), CollisionNZ(Kugel, 1), 3
EntityType Kugel, 0
End If

If KeyDown(200) Then TurnEntity Cube, 1, 0, 0
If KeyDown(208) Then TurnEntity Cube, -1, 0, 0
If KeyDown(203) Then TurnEntity Cube, 0, 0, 1
If KeyDown(205) Then TurnEntity Cube, 0, 0, -1

MoveEntity Kugel, 0, 0, 0.02

UpdateWorld
RenderWorld

Flip

Wend

End


Mit den Richtungtasten kannst du den Cube drehen und somit die Abprallrichtung der Kugel beeinflussen. Müsste recht verständlich sein, das Beispiel.

tft

BeitragFr, Sep 23, 2005 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi...

das ist genau was ich suche. Danke.......
wäre gut wenn du das Beispiel in COde Archiv stellst.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!
 

MegaTefyt

BeitragSa, Sep 24, 2005 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke, dass das zu primitiv fürs Codearchiv ist. Wink

tft

BeitragSa, Sep 24, 2005 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi...

ich denke nicht. Ich Code mit Blitz3D seit dem es zu haben ist. Und trotzdem weis ich noch längst nicht alles. Und anderen geht es bestimmt ebenso. Und da mir bis jetzt noch kein Demo Code in Deutsch untergekommen ist der mir das Problem auf so einfache weise beseitigt.
Ist es im CodeArchiv bestimmt gut aufgehoben.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group