Mesh Kollision

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen

 

Gerhard

BeitragDo, Okt 28, 2004 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du schon mal 2 (full sliding collision) als letzte Ziffer probiert? Du hast nämlich bei deiner map eine 2, bei deinem Fahrstuhl aber eine 1 (stop).

Möglicherweise hilft es....

Gina

BeitragFr, Okt 29, 2004 9:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Morgen,

habe schon so viele verschiedene Varianten probiert, dass ich gar nicht mehr weiß, was ich noch machen könnte. Mit full sliding meinst du die 3? Ja, das hatte ich auch probiert. Wenn ich nur die 2 nehme, rutscht entweder meine Figur oder der Fahrstuhl weg... Very Happy Das ist nicht so ganz das was ich wollte.

Die 1 für stop hat allerdings auch so seine Vorteile. Ich fand es zumindest gut, dass der Fahrstuhl stehen bleibt, wenn er meiner Figur sozusagen auf den Kopf gefallen ist. Allerdings kommt er danach nicht mehr in Gang, was nicht so toll ist.

Aber egal, welche Nummer ich gewählt habe, so ist meine Figur beim hochfahren immer durchgefallen. Es hat auch keinen Unterschied gemacht, ob ich die Kollision von Figur auf Fahrstuhl oder umgekehrt geprüft habe, oder gar beides.

Vor lauter Verzweiflung habe ich die Kollisionsprüfung dann 5x eingebaut, für den Fall, dass ich den richtigen Zeitpunkt verpaßt habe, aber auch das hat nix geholfen.

Ich werde mal versuchen, eine Kurzfassung meines Codes mit samt Meshes zusammenzustellen, so dass ihr selbt mal schauen könnt.

@ BIGBUG
Das Problem besteht generell... Sad Da ich beim runterfahren durch ihn durch rauf springen kann. Manchmal fährt er dann mit dem Fahrstuhl zusammen runter.

@ Scretchy
Das werde ich nochmal probieren...

Vielen Dank Euch erstmal, bis dann, Gina.
www.jk-spiele.de

BladeRunner

Moderator

BeitragFr, Okt 29, 2004 11:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab noch ein bissl rumgespielt, sehr seltsame Geschichte das Ganze. Die Einzige variante bei der ich bei 2 bewegten Objekten eine vernünftige Kollisionserkennung hatte war mit meshesintersect() - anscheinend sind die Boardeigenen Kugel/Boxkollisionen mit Bewegungen überfordert.

Hier ein Modifiziertes Beispiel aus der OH, es ist noch etwas wacklig (wie gesagt meine ersten Gehversuche in 3D), aber der Fahrstuhl funktioniert schon mal.

Probleme:
- meshesintersect ist lauf OH langsam, ich hab im Normalbetrieb nichts von gemerkt, allerdings: klemmt man die Kugel zwischen Zylinder und Box ein kommt das Proggie arg ins stocken. Also müsste man eigentlich noch eine Abfrage auf die Posiion der Kugel reinhämmern und ggf. den "Aufzug" stoppen.

- ebenfalls sehr seltsam : der zweite collisionsbefehl musste drinbleiben, kommentiere ich ihn aus versinkt mir die Kugel oO
Code: [AUSKLAPPEN]
Graphics3D 640,480
SetBuffer BackBuffer()
camera=CreateCamera()
RotateEntity camera,45,0,0
PositionEntity camera,0,15,-10
light=CreateLight()
RotateEntity light,45,0,0

sphere=CreateSphere(32)
EntityType sphere,1
EntityRadius sphere,1
PositionEntity sphere,0,11,0

cube=CreateCube()
EntityType cube,2
EntityColor cube,0,100,0
PositionEntity cube,0,-5,0
ScaleEntity cube,10,10,10

cylinder=CreateCylinder(32)
EntityType cylinder,2
EntityColor cylinder,255,0,0
PositionEntity cylinder,0,7,0
ScaleEntity cylinder,2,2,2

While Not KeyDown(1)
If MeshesIntersect (sphere,cylinder) Then MoveEntity sphere,-1.01*x#,(-1.01*y#)+(2*yc#),-1.01*z#   
x#=0
   y#=0
   z#=0
yc#=0
   If KeyDown(203)=1 Then x#=-0.1
   If KeyDown(205)=1 Then x#=0.1
   If KeyDown(208)=1 Then z#=-0.1
   If KeyDown(200)=1 Then z#=0.1
   If KeyDown(201)=1 Then yc#=0.1
   If KeyDown(209)=1 Then yc#=-0.1

MoveEntity sphere,x#,-0.1,z#
   
MoveEntity cylinder,0,yc,0



Collisions 1,2,2,2

   UpdateWorld
   RenderWorld
   col=CountCollisions(sphere)
   Text 0,0,"Kollision(en):"
   For i=1 To col
      Text 000,i*20,"Entity="+CollisionEntity(sphere,i)
      Text 150,i*20,"Surface="+CollisionSurface(sphere,i)
      Text 300,i*20,"Triangle="+CollisionTriangle(sphere,i)
   Next
   Flip
Wend
End


Steuerung: Cursor bewegt kugel, mit Bild auf/ab bewegt man den Zylinder

EDIT: das mit dem Collibefehl hab ich durchschaut- war ein Fehler meinerseits- die Gravitation wird ja nicht per Variable erreicht. Habe es zu ändern versucht, aber dann lässt sich die Kugel nimmer auf dem Zylinder verschieben und die Performance bricht ein (meshesintersect(?)). Daher code unverändert bis auf Änderung des Collitypes des Zylinders zu 2 und entfernen des 2en Collibefehles.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Gina

BeitragFr, Okt 29, 2004 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Uii, tausend Dank erstmal. Ich schau mir das gleich in Ruhe an...

Habe meinen Code nochmal sortiert und kommentiert und etwas gekürzt:

download

Bis gleich, Gina.

PS: In der fahrstuhl.x sind zwei Würfel ineinander. Das hat leider auch nicht geholfen... Sad
www.jk-spiele.de

Gina

BeitragFr, Okt 29, 2004 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist ja sehr interessant:

Wenn der Fahrstuhl durch mich durchgeht, wird die Kollision mit Meshesintersect angezeigt. Wenn ich jedoch auf dem Fahrstuhl stehe nicht. Ebensowenig, wenn ich den Fahrstuhl an der Unterseite berühre.

Sehr merkwürdig. Offensichtlich findet die Kollision nur im Innern des Würfels/Fahrstuhls statt...

Gina.

EDIT: Habe nochmal Die "Zwei-Würfel-Kombination" probiert und dabei einen Würfel mit 0 Höhe sozusagen oben drauf gelegt. Leider hat sich das gewünschte Ergebnis nicht eingestellt...

EDIT2: Das Problem ist also die Gravitation. Diese muss ich bei Kollision mit dem Fahrstuhl ausschalten, aber eigentlich auch nur, wenn ich richtig drauf bin. Dann muss ich sie der Bewegung des Fahrstuhls anpassen. Mit Meshesintersect hat das jetzt ganz gut geklappt, allerdings gehen die frames wirklich um 30% runter. Das ist heftig...
www.jk-spiele.de

Gina

BeitragFr, Okt 29, 2004 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
So... Da ich nun mit Sicherheit weiß, dass alle blitzeigenen Kollisionsabfragen (mit Ausnahme von Meshesintersect, welche den Rechner lahm legt) zu ungenau für meinen Fahrstuhl sind (wenn ich gegen den Farstuhl stoße, wird die Kollision erkannt, aber wenn ich drauf/drin stehe nicht mehr), habe ich das Ganze jetzt erstmal per Positionsabfrage gelöst.

Wenn sich meine Figur also im Bereich des Fahrstuhls befindet, wird die Gravitation ausgeschaltet und sie folgt der Bewegung des Fahrstuhls.

So ganz zufrieden bin ich allerdings nicht. Da mein Fahrstuhl ja nur eine Plattform ist und auch so sein soll, kann ich mich ja unter ihn stellen. Das führt natürlich zu merkwürdigen Ergebnissen (ich folge dem Fahrstuhl z.B. mit Abstand Wink), wofür mir noch nix eingefallen ist. Außerdem wollte ich ja einbauen, dass ich Schaden nehme, wenn mir der Fahrstuhl auf den Kopf rauscht... Rolling Eyes Na mal sehen...

Falls noch jemand sachdienliche Hinweise hat, wäre ich sehr, sehr dankbar. Vielleicht kann mir auch jemand ein paar Tipps geben, wie man eine eigene Kollisions-Prüf-Routine schreibt...

Tausend Dank, Gina.
www.jk-spiele.de
 

sven123

BeitragFr, Okt 29, 2004 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut das es so eine Thread gibt ich habe auch ein Problem mit Kollisionen,dass letzte mal habe ich eien Pivot eingesetzt,doch dann wurde keine Kollision geprüft.Jetzt habe ich das mal so gemacht wie hier in dem Thread und habe meinem Mesh(flieger) mit der Hilfe von entityradius einen Kugelförmige Kollisionsfläche gegeben,dieser Ansatz funktioniert zwar besser als der letzte aber richtig glücklich werde ich damit auch nicht.Den der Flieger verschwindet einfach irgendwann wenn er mit dem Terrain kollidiert anstat zu stoppen.Was mache ich Falsch?
Code: [AUSKLAPPEN]
Graphics3D 800,600,0,1
AppTitle "Rammjäger"
HidePointer
WireFrame False
SetBuffer BackBuffer()
;Laden der Texturen und Meshs
terrain=LoadTerrain("f:\newheightmap.bmp")
text1=LoadTexture("f:\codestyle.bmp")
haus=LoadTexture("f:\glass30.bmp")
Mesh=LoadMesh("f:\3dModeller\Hand.3ds")
Gebaude=LoadMesh("f:\hhouse.x")
flieger=LoadMesh("f:\flieger.3ds")
himmel=LoadTexture("f:\Gitter.jpg")
;Globals für die Kollision
;Objekt richtig drehen
TurnEntity flieger,-90,0,90
;Erstellen eines Pivot für die Kollision
sky=CreateCube()
FlipMesh sky
ScaleEntity  sky,6350,9000,6400
PositionEntity sky,6500,-2000,6400
EntityOrder sky,1
;Das Terrain erstellen und Texturieren
EntityTexture terrain,text1,0,0
ScaleEntity terrain,100,200,100
ScaleTexture text1,100,200
;Spielfigur posizionieren
PositionMesh flieger,-8000,-5000,2000
TerrainDetail terrain,8000,True
;Position der Hand 
PositionMesh Mesh,4000,800,8000
;Position des Hauses
PositionMesh Gebaude,6000,30,9000
;Die Textur des Hauses bearbeiten und verwenden
RotateTexture  haus,180
EntityTexture Gebaude,haus
EntityTexture sky,himmel
;;;;;;;;;;;;;;;;;;;;;;;;;;------Die Eintsellung der Kamera auf Thirdperson sicht
;;
;;
;Kameravoreinstellungen   
cam=CreateCamera()
PositionEntity cam,5100,2050,8075
CameraRange cam,1,80000
light=CreateLight() 
LightRange light,80000
TurnEntity light,45,45,45
EntityParent light,cam
;Einstellungen für die Sicht
TurnEntity cam,10,106,0
EntityParent flieger,cam
PositionEntity cam,3007,1025,5845
TurnEntity cam,270,0,270
;Kollisionsabfrage
EntityRadius flieger,0.2,0.2
EntityType terrain,2
EntityType flieger,1
Collisions 1,2,2,1
;Steuerung des Spieler und der Cam
;;;;;;;;;;;;;;;;;;;;-------Hauptschleife
While Not KeyHit(1)
;Mausabfrage 
RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam)-MouseXSpeed(),0 ;muss immer mesh parent sein!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
If KeyDown(200)=1 Then MoveEntity cam,0,0,70
If KeyDown(203)=1 Then MoveEntity cam,-70,0,0
If KeyDown(205)=1 Then MoveEntity cam,70,0,0
UpdateWorld
RenderWorld
Flip
Wend
ClearWorld
End

ich hoffe der Code Hilft!!!!!
THX für die Hilfe
Amd Athlon 2200+,Saphire Atlantis Radeon9800pro,1024 MB DDR RAm,40 Gb Festblatte.
'in shâ'a llâh=so Gott will
Fertiges Projekt:Invasion der Heuschrecken

Gina

BeitragFr, Okt 29, 2004 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Setze mal das
Code: [AUSKLAPPEN]
Collisions 1,2,2,1

in die Hauptschleife...

Gina.
www.jk-spiele.de

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group