Collison mit den "NodesEntity"

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
sechsrad
Rüpel
Beiträge: 112
Registriert: 01.02.2008 13:31

Collison mit den "NodesEntity"

Beitrag 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
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Leut, gewöhnt Euch doch bitte mal an, den nicht funktionierenden Code zu posten (und bitte vollständig)....
Eine Art Query-Planner soll die Ausführung von Map/Reduce-Funktionen in Hadoop stark beschleunigen.
sechsrad
Rüpel
Beiträge: 112
Registriert: 01.02.2008 13:31

Beitrag 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
sechsrad
Rüpel
Beiträge: 112
Registriert: 01.02.2008 13:31

Beitrag von sechsrad »

Hallo, habe mal die Code reingestellt.

Woran liegt nun der Fehler.

Danke.

mfg
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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:
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
sechsrad
Rüpel
Beiträge: 112
Registriert: 01.02.2008 13:31

Beitrag von sechsrad »

Der kann gelöscht werden.
Im Code sind die Körper nicht mit dabei.

mfg
sechsrad
Rüpel
Beiträge: 112
Registriert: 01.02.2008 13:31

Beitrag 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
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
sechsrad
Rüpel
Beiträge: 112
Registriert: 01.02.2008 13:31

Beitrag 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
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten