Kollision - Seil (Poly) mit Box(en)

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

onkelz89

Betreff: Kollision - Seil (Poly) mit Box(en)

BeitragFr, Feb 06, 2009 8:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich wollte ein Seil erstellen...

Aufbau sollte wie folgt sein:

- Taste zur Erstellung drücken
- 4 Vertexe werden erstellt
- Alle 4 auf Camera Position (2 Davon um 1 höher Y-Wert)
- diese 4 zusammenfügen...
- die 2 letzte mit der Camera bewegen...
# geht!

Wenn nun das Seil, welches aus 4 Triangles besteht mit einem Würfel kollidiert, soll einfach nur eine Meldung kommen.

Daten bisher:

Code: [AUSKLAPPEN]


collisions 1,2,2,3

block=CreateCylinder(16)
PositionEntity block,220,200,280
ScaleEntity block,10,10,10
EntityColor block,55,55,55
EntityRadius block,10

EntityType block,1


seil=CreateMesh()

surfs=CreateSurface(seil)
seilstart=0

EntityType seil,2

;## Mainloop
timer=CreateTimer(60)
While Not KeyDown(1)

If KeyHit(9) Then
   seilstart=1
   AddVertex surfs,EntityX(cam)-1,EntityY(cam),EntityZ(cam)
   AddVertex surfs,EntityX(cam)-1,EntityY(cam)+.5,EntityZ(cam)
   
   AddVertex surfs,EntityX(cam)-1,EntityY(cam),EntityZ(cam)
   AddVertex surfs,EntityX(cam)-1,EntityY(cam)+.5,EntityZ(cam)
   
   AddTriangle surfs,0,1,2
   AddTriangle surfs,3,2,1
   AddTriangle surfs,2,1,0
   AddTriangle surfs,1,2,3
EndIf

If seilstart=1 Then
   VertexCoords surfs,2,EntityX(cam)-1,EntityY(cam),EntityZ(cam)
   VertexCoords surfs,3,EntityX(cam)-1,EntityY(cam)+.5,EntityZ(cam)
   If CountCollisions(block)>0 Or CountCollisions(seil)>0 Then
      runtimeerror("Test")
   
   
   EndIf
EndIf


Eine Kollision wird nicht erkannt, die Box bewegt sich nicht.
Mit Meshesintersect geht es zwar, jedoch brauche ich später noch die genauen Kollisionskoordinaten....

weiß einer wie ich die möglichst Performacesparend errechnen kann?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Feb 06, 2009 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuche mal anstelle MeshesIntersect zwischen den Verbindungspunkten des Seiles mit LinePick zu arbeiten. Diese liefern dir dann auch über PickedX/Y/Z die Kollisionskoordinaten.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

onkelz89

BeitragFr, Feb 06, 2009 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank!!! Geht!

...allerdings ... nicht 100% genau....
Habe bei dem letzten Wert (Radius) von LinePick eine 1 eingetragen, das ist nicht das Problem, sondern das ich einen Cylinder "umschlingen" will.

INFO: Immer wenn eine Kollision zustande kommt, erstelle ich 2 neue Vertexpunkte und füge per Addtriangle zusammen - geht

Aber das passiert an Stellen wo der Cylinder gar nicht ist und auch sonst nichts...

Habe den alten Punkt in OldX/Y/Z gespeichert und mache das hier:

If Linepick(Oldx,oldy,oldz,entityx(cam)-oldx,entityy(cam)-oldy,entityz(cam)-oldz,1) then ...

Was mache ich falsch?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Feb 06, 2009 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Also: Erstmal sollte geklärt werden, ob sich der Zylinder bewegt oder dreht. Wenn ja, dann geht das ganze schonmal nicht so einfach mit Blitz3D-Bordmitteln. Dazu wäre eine gescheite Physikengine vorzuziehen.

Soll das ''Umschlagen'' nur rein grafisch geschehen, dann kann es u.U. sein, dass auch bei einer LinePick-Kollision keine erkannt wird, wenn der Startpunkt schon in einer Kollision statt findet. Und genau das passiert ja, wenn du nach einer Kollision um ein Zylinder neue Kollisionslinien erstellst. Wie genau LinePick arbeitet, habe ich diesbezüglich noch nicht ausprobiert.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

onkelz89

BeitragFr, Feb 06, 2009 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Bin auf der Arbeit, kann es momentan nicht testen... Aber das kann schon das Problem sein ... hm werde es heute Abend testen. Danke schonmal!

Der Cylinder bewegt sich nicht, rein statisch

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group