Mesh Kollision
Übersicht

Gerhard |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... ![]() 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... ![]() @ Scretchy Das werde ich nochmal probieren... Vielen Dank Euch erstmal, bis dann, Gina. |
||
www.jk-spiele.de |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... ![]() |
||
www.jk-spiele.de |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Setze mal das
Code: [AUSKLAPPEN] Collisions 1,2,2,1
in die Hauptschleife... Gina. |
||
www.jk-spiele.de |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group