Kollision funktioniert nicht (3D)...

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Nerle

Betreff: Kollision funktioniert nicht (3D)...

BeitragDo, Sep 06, 2007 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ein Kollisionsproblem. Genau gesagt, kollidiert es bei mir gar nicht... und ich weiß einfach nicht woran es liegt.
Ich habe mich einige Stunden durch die Boardsuche gewühlt, aber bin einfach nicht schlauer als zuvor.

Ich glaube zwar, das Prinzip der Kollisionsabfrage "einigermaßen" zu verstehen, aber mein Code funktioniert trotzdem nicht, es findet in keinster Weise eine Kollision statt, egal was ich versuche.

Hier erstmal das Schema, nachdem ich vorgehe:

Code: [AUSKLAPPEN]

Spieler-Mesh
EntityType 1
EntityRadius 1

Wand-Mesh
EntityType 2

Collisions 1,2,2,2

HAUPTSCHLEIFE:

Bewegung-Spieler

UpdateWorld
RenderWorld


Das stimmt doch so, oder? Aber die Figur läuft immer noch wie ein Geist durch alle Objekte hindurch.

Kann es vielleicht daran liegen, dass es sich bei der SpielerFigur um ein animiertes (MD2-)Objekt handelt? Macht das einen Unterschied?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Sep 06, 2007 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Aus deinem Pseudocode werde ich nicht ganz schlau, da ich nicht sicher sagen kann ob du was vergessen hast oder nicht.

Es müsste schonmal wie folgt heissen:

Code: [AUSKLAPPEN]
EntityType SpielerEntity,1
EntityRadius SpielerEntity,1

EntityType WandEntity,2

Collisions 1,2,2,2

;HAUPTSCHLEIFE:

;Bewegung-Spieler

UpdateWorld
RenderWorld


selbst dann sollte man wisse, dass Kollisionen unter 3D nur aus der Bewegung her kommen. Wird dabei ein Spieler innerhalb einer Kollisionsgrenze erstellt oder die Kollision eingeschaltet, so kann er sich in diesem Bereich ganz normal bewegen. Erst wenn dieser den Bereich verlässt und aufs neue gegen eine Wand läuft, geht er einer Kollision ein.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Nerle

BeitragDo, Sep 06, 2007 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Hectic,

Zitat:
Aus deinem Pseudocode werde ich nicht ganz schlau, da ich nicht sicher sagen kann ob du was vergessen hast oder nicht.


Ich hab das schon so gemacht, wie in Deinem Sample - glaube ich...

Hier der entsprechende Code meines Colli-Tests:

Code: [AUSKLAPPEN]

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



AmbientLight 255,255,255


Hero%          = LoadMD2    ("Media/tris.md2")
HeroTex%       = LoadTexture("Media/armour.pcx")
EntityTexture         Hero,HeroTex
EntityShininess      Hero,1
EntityType        Hero,1
EntityRadius      Hero,1

GLOBAL Camera      = CreateCamera(Hero)
PositionEntity         Camera,0,180,-8
PointEntity         Camera,Hero


Global Labyrinth%   = LoadMD2("Media/Labyrinth_test.md2")
LabyrinthTex           = LoadTexture("Media/wall3.bmp")
PositionEntity        Labyrinth,0,0,0
ScaleEntity        Labyrinth,3,3,3
EntityTexture         Labyrinth,LabyrinthTex
ScaleTexture        LabyrinthTex,.2,.2
EntityType        Labyrinth,2


AnimateMD2      Hero,1,0.2,0,37; look/wait

Collisions 1,2,2,2


; -----------------------------------------------------
; MAIN LOOP
; -----------------------------------------------------

While KeyHit(1) = 0
      

    ; PLAYER MOVE & ANIMATE
   MoveForward  =0
   MoveBackward =0
   ; Move Forward
   If KeyDown(200)=1 Then
       MoveEntity Hero,0,0,+.12
      If walking=0
              AnimateMD2 Hero,1,0.08,40,45 ; run fwd
             EndIf
           Walking       =1
           MoveForward =1
   EndIf
   ; Move Backward
   If KeyDown(208)=1 Then
      MoveEntity Hero,0,0,-.12
      If walking=0
               AnimateMD2 Hero,1,0.08,40,45 ; run bwd
      EndIf
      walking=1
           MoveForward=1
   EndIf
   ; Move Left
   If KeyDown(205)=1 Then
      MoveEntity Hero,+.12,0,0
      If walking=0
               AnimateMD2 Hero,1,0.08,40,45 ; run bwd
      EndIf
      walking=1
           MoveForward=1
   EndIf   
   ; Move Right
   If KeyDown(203)=1 Then
      MoveEntity Hero,-.12,0,0
      If walking=0
               AnimateMD2 Hero,1,0.08,40,45 ; run bwd
      EndIf
      walking=1
           MoveForward=1
   EndIf      
   ; Look/Wait
   If MoveForward=0 And MoveBackward=0 And walking=1
      AnimateMD2 Hero,1,0.2,0,37 ; look/wait
      walking=0
       EndIf

   UpdateWorld   
    RenderWorld

 
     Flip
 
 Wend
    
End


user posted image

"Labyrinth" ist ein Mesh mit Boden und Wänden, die alle aus einem einzigen Mesh bestehen. Beim Start erscheint die Spielerfigur in der Mitte auf diesem Mesh - und kann leider bequem durch alle Wände laufen.
Aber auch wenn ich eine Kiste irgendwo dort plaziere, läuft er bequem durch diese hindurch.
  • Zuletzt bearbeitet von Nerle am Do, Sep 06, 2007 20:14, insgesamt einmal bearbeitet
 

Dreamora

BeitragDo, Sep 06, 2007 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast es so gemacht, nur den EntityRadius vergessen für den Hero.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Nerle

BeitragDo, Sep 06, 2007 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Hast es so gemacht, nur den EntityRadius vergessen für den Hero.


Hatte ich vergessen, ja, und eben hinzugefügt - aber leider funktioniert es noch immer nicht. Sad Question

EDIT: Habe es eben mit einem Cube statt mit dem Labyrinth-Mesh versucht - da funktionierts... Aber eben nicht beim Labyrinth-Mesh...
 

Dreamora

BeitragDo, Sep 06, 2007 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe leider MD2 nie genutzt.
Aber wenn die Kollision nicht geht, hat MD2 eventuell keine Normalen und ohne Normalen gibts keine Meshkollision.

Gibt es überhaupt nen Grund den Level als MD2 zu machen? Das Format ist dafür höchst "untauglich" eigentlich, mit B3D und Hierarchie könntest du bessere Performance erreichen sowie Lightmapping nutzen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Nerle

BeitragDo, Sep 06, 2007 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Neenee, das Level-Labyrinth ist ein .3ds-Modell. Nur die Spielerfigur ist ein MD2 Smile

Und an der Spieler-Figur liegt es definitiv nicht, wie es scheint: Ich habe jetzt eben testweise noch ein weiteres 3ds-Objekt hineingeladen, und gegen dieses kollidiert die Spieler-Figur wie sie soll.

Nur eben nicht beim Labyrinth-Objekt... ich weiß aber einfach nicht warum. Irgendwas übersehe ich, weiß aber einfach nicht was.
 

Nerle

BeitragFr, Sep 07, 2007 9:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Es funktioniert - Lag an der Mesh-Erstellung, und nicht an BB. Smile

PS: Dreamora, Du hattest übrigens Recht, ich hatte das LevelMesh doch erst als MD2 erstellt, nicht als 3ds, sorry, aber war total übermüdet und deshalb dämlich gestern Smile
 

Dreamora

BeitragFr, Sep 07, 2007 10:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte keine Doppelposts.


Und freut mich das es jetzt klappt Smile
generell: UpdateNormals sollte das Problem beheben
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group