Seite 1 von 2

Collison mit den "NodesEntity"

Verfasst: 27.12.2008 23:25
von sechsrad
Hallo, ich bekommen die Collison mit dem "NodesEntity" nicht hin.
Habe die Demo "SimpleCollisions.pb" mit einem "Nodeskörper" ausprobiert.

Geht nicht.

mfg

Verfasst: 28.12.2008 01:58
von THEEX
Leut, gewöhnt Euch doch bitte mal an, den nicht funktionierenden Code zu posten (und bitte vollständig)....

Verfasst: 28.12.2008 11:23
von sechsrad
Hier ist der Code mit dem Nodes.
Der Roboterkörper(Nodes) colligiert nicht.

Wo ist der fehler.

Code: Alles auswählen

#CameraSpeed=10
#EntitySpeed=4

#Camera=0

Dim entity(5)
Dim Node(5)

Define.f KeyX,KeyY,MouseX,MouseY

  InitEngine3D()

  Add3DArchive("Data\", #PB_3DArchive_FileSystem)
 
  InitSprite()
  InitKeyboard()
  InitMouse()
 
  hWnd = OpenWindow(0,0,0,800,600,"Nodes",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
  OpenWindowedScreen(hWnd,220,10,500,400,0,0,0)

    EnableWorldPhysics(#True)
    EnableWorldCollisions(#True)
      
    CreateMaterial(0,LoadTexture(0,"gruen.jpg"))
    CreateMaterial(1,LoadTexture(1,"hintergr.jpg"))
    CreateMaterial(2,LoadTexture(2,"gelb.jpg")) 
   
    Restore NumericalData
    Read.l Vert
    Read.l Tria
    Read.l Max
 
    CreateMesh(0, vert)
    
    SetMeshData(0, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color  | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
    SetMeshData(0, #PB_Mesh_Face, ?Triangle, Tria); 1)
    
    CreateMesh(1, vert)
    
    SetMeshData(1, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color  | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
    SetMeshData(1, #PB_Mesh_Face, ?Triangle, Tria); 1)
    
    CreateMesh(2, vert)
    
    SetMeshData(2, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color  | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
    SetMeshData(2, #PB_Mesh_Face, ?Triangle, Tria); 1)
   
    CreateCamera(#Camera,0,0,100,100)  
    CameraLocate(#Camera,0,200,300)
    CameraLookAt(#Camera,0,0,0)

    CreateLight(0,RGB(255,255,255),0,500,0)
    AmbientColor(RGB(200,200,200))
  
    
       Floor=CreateEntity(#PB_Any,MeshID(0),MaterialID(1),0,-45,0)
       ScaleEntity(Floor,300,10,300)
       EntityPhysicBody(Floor,#PB_Entity_StaticBody)
   
       For x=-2 To 2 Step 2
        For z=-2 To 2 Step 2
          Block=CreateEntity(#PB_Any,MeshID(0),MaterialID(0),x*80,0,z*80)
          EntityPhysicBody(Block,#PB_Entity_StaticBody)
          ScaleEntity(block,30,30,30) 
          SetEntityMass(Block,10)
        Next
       Next
      
      Node(0) = CreateNode(#PB_Any,0,0,0)
      Entity(0) = CreateEntity(#PB_Any,MeshID(2),MaterialID(2)) 
      EntityPhysicBody(Entity(0),#PB_Entity_BoxBody ,#PB_Entity_AbsoluteBodyMove)
      SetEntityMass(Entity(0),0.01)
      ScaleEntity(Entity(0),10,5,10)   
      AttachNodeObject(Node(0),EntityID(Entity(0)),#PB_Node_Entity)

      MoveNode(Node(0),50,0,0)
      
      Repeat
     
        ExamineKeyboard()
         
        Active=0
         
        If KeyboardPushed(#PB_Key_PageUp)
          Speed=-#CameraSpeed
        ElseIf KeyboardPushed(#PB_Key_PageDown)
          Speed=#CameraSpeed
        Else
          Speed=0
        EndIf
       
        If KeyboardPushed(#PB_Key_Left)
          Turn_X+1
          RotateNode(Node(0),0,Turn_x,0,#PB_Absolute)
        ElseIf KeyboardPushed(#PB_Key_Right)
          Turn_X-1
          RotateNode(Node(0),0,Turn_x,0,#PB_Absolute)
        EndIf
       
        If KeyboardPushed(#PB_Key_X)
          Move_X=-#EntitySpeed
          Active=1
        ElseIf  KeyboardPushed(#PB_Key_C)
          Move_X=#EntitySpeed
          Active=1
        EndIf
                 
        If  KeyboardPushed(#PB_Key_A)
            Move_Y=#EntitySpeed
            Active=2
        ElseIf  KeyboardPushed(#PB_Key_Z)
            Move_Y=-#EntitySpeed
            Active=2
        EndIf
       
        If KeyboardPushed(#PB_Key_Up)
            Move_Z=#EntitySpeed
            Active=3
        ElseIf KeyboardPushed(#PB_Key_Down)
            Move_Z=-#EntitySpeed
            Active=3   
        EndIf
       
        If Turn_X>360
          Turn_X-360
        ElseIf Turn_X<0
          Turn_X+360
        EndIf
       
        Deg_X=Turn_X+90
        If Deg_X>360
          Deg_X-360
        ElseIf Deg_X<0
          Deg_X+360
        EndIf
                           
       Select Active
          Case 1
            deg.f=(#PI/180)*Turn_X
             MoveNode(Node(0),Sin(deg)*Move_X,0,Cos(deg)*Move_X)
          Case 2
             MoveNode(Node(0),0,Move_Y,0)
          Case 3
            deg.f=(#PI/180)*Deg_X
            MoveNode(Node(0),Sin(deg)*Move_Z,0,Cos(deg)*Move_Z)
           Default
            MoveNode(Node(0),0,0,0)
       EndSelect 
     
      If ExamineMouse()
        MouseX=-(MouseDeltaX()/30)*#CameraSpeed/2
        MouseY=-(MouseDeltaY()/30)*#CameraSpeed/2
      EndIf
     
      RotateCamera(0,MouseY/2,MouseX/2,RollZ,#PB_Relative)
      MoveCamera(0,0,0,Speed)
         
      RenderWorld()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit=1
  
End

DataSection
   StringSect:
      Data.s ""

   NumericalData:
   Data.l 24,12,2

   Vertice:  ;x,y,z,nx,ny,nz,col,u,v = Vertex + Normal + Col + UV Koordinaten
   Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
   Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
   Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
   Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
   Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
   Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0
   Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
   Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
   Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
   Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
   Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
   Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
   Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
   Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
   Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
   Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
   Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
   Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
   Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0
   Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
   Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
   Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
   Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
   Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0

   Triangle: ; Vertice x,y,z verbinden/Create Triangle
   Data.w 2,0,3
   Data.w 1,0,2
   Data.w 6,4,7
   Data.w 5,4,6
   Data.w 10,8,11
   Data.w 9,8,10
   Data.w 14,12,15
   Data.w 13,12,14
   Data.w 18,16,19
   Data.w 17,16,18
   Data.w 22,20,23
   Data.w 21,20,22
EndDataSection

Verfasst: 01.01.2009 15:44
von sechsrad
Hallo, habe mal die Code reingestellt.

Woran liegt nun der Fehler.

Danke.

mfg

Verfasst: 01.01.2009 15:45
von DarkDragon
Und noch einmal antworte ich auf denselben Thread:
Bug mit den Nodes und der Kollision ist bekannt:

http://www.purebasic.fr/english/viewtopic.php?t=35840
Hier ist deine alte Frage verschwunden:

http://www.purebasic.fr/german/viewtopic.php?t=18707

:evil: :evil: :evil:

Verfasst: 02.01.2009 12:05
von sechsrad
Der kann gelöscht werden.
Im Code sind die Körper nicht mit dabei.

mfg

Verfasst: 02.01.2009 12:06
von sechsrad
Wann kann man damit rechnen , das die Nodes mit bei der Collison erkannt werden. Wird daran gearbeitet?
Ansonsten ist die 3dBearbeitung mit Purebasic und den Nodeskörpern eine tolle Sache, die wirklich gelungen ist.

mfg

Verfasst: 02.01.2009 12:14
von DarkDragon
sechsrad hat geschrieben:Wann kann man damit rechnen , das die Nodes mit bei der Collison erkannt werden. Wird daran gearbeitet?
Dazu kann ich dir nichts genaueres sagen. Ich denke schon, dass daran gearbeitet wird.

Als Workaround kannst du einen Würfel erstellen, den du mit dem Node bewegst und mit HideEntity unsichtbar machst.

Verfasst: 02.01.2009 12:24
von sechsrad
Als Workaround kannst du einen Würfel erstellen, den du mit dem Node bewegst und mit HideEntity unsichtbar machst.
Hört sich gut an.

Kann es nur nicht umsetzen, wie du es meinst.

kannst du mal etwas kurze herstellen oder oben mein Code ändern mit deinem Vorschlag.

Danke.

mfg

Verfasst: 02.01.2009 13:00
von DarkDragon
So ungefähr:

Code: Alles auswählen

#CameraSpeed=10
#EntitySpeed=4

#Camera=0

Dim entity(5, 1)
Dim Node(5)

Define.f KeyX,KeyY,MouseX,MouseY

  InitEngine3D()

  Add3DArchive("Data\", #PB_3DArchive_FileSystem)
 
  InitSprite()
  InitKeyboard()
  InitMouse()
 
  hWnd = OpenWindow(0,0,0,800,600,"Nodes",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
  OpenWindowedScreen(hWnd,220,10,500,400,0,0,0)

    EnableWorldPhysics(#True)
    EnableWorldCollisions(#True)
     
    CreateMaterial(0, LoadTexture(0, "gruen.jpg"))
    CreateMaterial(1, LoadTexture(1, "hintergr.jpg"))
    CreateMaterial(2, LoadTexture(2, "gelb.jpg"))
   
    Restore NumericalData
    Read.l Vert
    Read.l Tria
    Read.l Max
 
    CreateMesh(0, vert)
   
    SetMeshData(0, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color  | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
    SetMeshData(0, #PB_Mesh_Face, ?Triangle, Tria); 1)
   
    CreateMesh(1, vert)
   
    SetMeshData(1, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color  | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
    SetMeshData(1, #PB_Mesh_Face, ?Triangle, Tria); 1)
   
    CreateMesh(2, vert)
   
    SetMeshData(2, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color  | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
    SetMeshData(2, #PB_Mesh_Face, ?Triangle, Tria); 1)
   
    CreateCamera(#Camera,0,0,100,100) 
    CameraLocate(#Camera,0,200,300)
    CameraLookAt(#Camera,0,0,0)

    CreateLight(0,RGB(255,255,255),0,500,0)
    AmbientColor(RGB(200,200,200))
 
   
       Floor=CreateEntity(#PB_Any,MeshID(0),MaterialID(1),0,-45,0)
       ScaleEntity(Floor,300,10,300)
       EntityPhysicBody(Floor,#PB_Entity_StaticBody)
   
       For x=-2 To 2 Step 2
        For z=-2 To 2 Step 2
          Block=CreateEntity(#PB_Any,MeshID(0),MaterialID(0),x*80,0,z*80)
          ScaleEntity(block,30,30,30)
          EntityPhysicBody(Block,#PB_Entity_StaticBody)
        Next
       Next
     
      Node(0) = CreateNode(#PB_Any,0,0,0)
      Entity(0, 0) = CreateEntity(#PB_Any,MeshID(2),MaterialID(2))
      Entity(0, 1) = CreateEntity(#PB_Any,MeshID(2),MaterialID(2)) ; Bounding Box
      
      HideEntity(Entity(0, 1), 1)
      
      ScaleEntity(Entity(0, 0),10,5,10)   
      
      EntityLocate(Entity(0, 1), 50,0,0)
      EntityPhysicBody(Entity(0, 1),#PB_Entity_BoxBody, #PB_Entity_AbsoluteBodyMove)
      SetEntityMass(Entity(0, 1),10)
      ScaleEntity(Entity(0, 1),0.5, 0.25, 0.5)
      
      AttachNodeObject(Node(0),EntityID(Entity(0, 0)),#PB_Node_Entity)
      
      WorldDebug(#PB_World_DebugBody)
     
      Repeat
     
        ExamineKeyboard()
         
        Active=0
         
        If KeyboardPushed(#PB_Key_PageUp)
          Speed=-#CameraSpeed
        ElseIf KeyboardPushed(#PB_Key_PageDown)
          Speed=#CameraSpeed
        Else
          Speed=0
        EndIf
       
        If KeyboardPushed(#PB_Key_Left)
          Turn_X+1
          RotateNode(Node(0),0,Turn_x,0,#PB_Absolute)
        ElseIf KeyboardPushed(#PB_Key_Right)
          Turn_X-1
          RotateNode(Node(0),0,Turn_x,0,#PB_Absolute)
        EndIf
       
        If KeyboardPushed(#PB_Key_X)
          Move_X=-#EntitySpeed
          Active=1
        ElseIf  KeyboardPushed(#PB_Key_C)
          Move_X=#EntitySpeed
          Active=1
        EndIf
                 
        If  KeyboardPushed(#PB_Key_A)
            Move_Y=#EntitySpeed
            Active=2
        ElseIf  KeyboardPushed(#PB_Key_Z)
            Move_Y=-#EntitySpeed
            Active=2
        EndIf
       
        If KeyboardPushed(#PB_Key_Up)
            Move_Z=#EntitySpeed
            Active=3
        ElseIf KeyboardPushed(#PB_Key_Down)
            Move_Z=-#EntitySpeed
            Active=3   
        EndIf
       
        If Turn_X>360
          Turn_X-360
        ElseIf Turn_X<0
          Turn_X+360
        EndIf
       
        Deg_X=Turn_X+90
        If Deg_X>360
          Deg_X-360
        ElseIf Deg_X<0
          Deg_X+360
        EndIf
                           
       Select Active
          Case 1
            deg.f=(#PI/180)*Turn_X
             MoveEntity(Entity(0,1),Sin(deg)*Move_X * 10.0,0,Cos(deg)*Move_X * 10.0)
          Case 2
             MoveEntity(Entity(0,1),0,Move_Y,0)
          Case 3
            deg.f=(#PI/180)*Deg_X
            MoveEntity(Entity(0,1),Sin(deg)*Move_Z * 10.0,0,Cos(deg)*Move_Z * 10.0)
           Default
            MoveEntity(Entity(0,1),0,0,0)
       EndSelect
     
      If ExamineMouse()
        MouseX=-(MouseDeltaX()/30)*#CameraSpeed/2
        MouseY=-(MouseDeltaY()/30)*#CameraSpeed/2
      EndIf
     
      RotateCamera(0,MouseY/2,MouseX/2,RollZ,#PB_Relative)
      MoveCamera(0,0,0,Speed)
      
      NodeLocate(Node(0), EntityX(Entity(0, 1)), EntityY(Entity(0, 1)), EntityZ(Entity(0, 1)))
         
      RenderWorld()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit=1
 
End

DataSection
   StringSect:
      Data.s ""

   NumericalData:
   Data.l 24,12,2

   Vertice:  ;x,y,z,nx,ny,nz,col,u,v = Vertex + Normal + Col + UV Koordinaten
   Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
   Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
   Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
   Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
   Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
   Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0
   Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
   Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
   Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
   Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
   Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
   Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
   Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
   Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
   Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
   Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
   Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
   Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
   Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0
   Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
   Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
   Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
   Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
   Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0

   Triangle: ; Vertice x,y,z verbinden/Create Triangle
   Data.w 2,0,3
   Data.w 1,0,2
   Data.w 6,4,7
   Data.w 5,4,6
   Data.w 10,8,11
   Data.w 9,8,10
   Data.w 14,12,15
   Data.w 13,12,14
   Data.w 18,16,19
   Data.w 17,16,18
   Data.w 22,20,23
   Data.w 21,20,22
EndDataSection