ogre Engine3d - Tuch erstellen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Purebasium
Beiträge: 74
Registriert: 05.02.2014 22:08
Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte
Wohnort: Mars, Kraterstr. 57b, Apartment 7

ogre Engine3d - Tuch erstellen

Beitrag von Purebasium »

Hallo,
weiß hier irgendjemand wie man ein Tuch mit Purebasic in der engine3d erstellen kann?

ich habe es bereits mit einzelnen, miteinander über Gelenke verbundenen, Boxen Versucht, allerdings kam nur ein seltsamer Konten raus.
Vielen Dank für Antworten.
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: ogre Engine3d - Tuch erstellen

Beitrag von Chimorin »

Man kann es irgendwie hinmurksen, für richtiges Clothing benötigt man PhysX (Nicht in PB implementiert, da Bullet Physik).

Man kann es auch über SoftBodies lösenhttp://www.ogre3d.org/addonforums/viewt ... =12&t=7476, was wiederum nicht in PB implementiert ist.

Es gibt doch das Beispiel "Bridge" im PBordner. Du könntest das rauskramen und kleine (10x10cm; Kommt auf deine Skalierung an) Plättchen über diese Methode miteinander verbinden.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
Purebasium
Beiträge: 74
Registriert: 05.02.2014 22:08
Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte
Wohnort: Mars, Kraterstr. 57b, Apartment 7

Re: ogre Engine3d - Tuch erstellen

Beitrag von Purebasium »

Ich habe es hier mal probiert:

Code: Alles auswählen



IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY
#CameraSpeed = 1


If InitEngine3D(3)
  
  Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Models"  , #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Packs/desert.zip", #PB_3DArchive_Zip)
  Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)
  Parse3DScripts()
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
  
   
    CreateMaterial(0, LoadTexture(0, "Dirt.jpg"))
    CreateMaterial(1, LoadTexture(1, "doscarte.png"))
    
 
   
    
    
    CreateCube(0, 1)

  
    
  
    CreateEntity(0, MeshID(0), MaterialID(0), 0,  0, 0)
    ScaleEntity(0, 1, 0.5, 1)
    
    
    
    ;entity erstellen
     mid=1
     For ye = 1 To 10
       For ye2 = 0  To 10
         If ye =10
           mid=0
         EndIf
           
         
       CreateEntity(ye3, MeshID(0), MaterialID(mid), 0, ye*3.5-ye*7, ye2*3.5-ye2*7)
       ScaleEntity(ye3, 1, 2, 2) 
        ye3+1
       Next ye2
     Next ye
     
     
     ; physicbodies erstellen
  
    EntityPhysicBody(0, #PB_Entity_StaticBody,1)

    ye3=0
    For ye = 1 To 10
      For ye2 = 0  To 10
        
    EntityPhysicBody(ye3, #PB_Entity_BoxBody, 1)
    ye3+1
    Next ye2
  Next ye 
  
    
    
    
    
    
    
    
    
    ConeTwistJoint(0, EntityID(0), 0, -1, 0, EntityID(1), 0, 1, 0)
    SetJointAttribute(0, #PB_ConeTwistJoint_SwingSpan, 0)
    SetJointAttribute(0, #PB_ConeTwistJoint_SwingSpan2, 0)
    SetJointAttribute(0, #PB_ConeTwistJoint_TwistSpan, 1)

    
    
    ;     #-----------------------------------------------------------------#
    ;     # yea3: gelenk nummer                                             #
    ;     #                                                                 #
    ;     # yea & yea2: zwei for:next schleifen um höhe * Breite anzugeben  #
    ;     #-----------------------------------------------------------------#

    
    ;verbindungen senktrecht
    
    yea3=0
    For yea = 1 To 10
      For yea2 = 1 To 11
        yea3+1
        If yea2<> 11
     ConeTwistJoint(yea3, EntityID(yea3-1), 0, -2, 0, EntityID(yea3), 0, 1.5, 0)
    SetJointAttribute(yea3, #PB_ConeTwistJoint_SwingSpan, 1)
    SetJointAttribute(yea3, #PB_ConeTwistJoint_SwingSpan2, 1)
    SetJointAttribute(yea3, #PB_ConeTwistJoint_TwistSpan, 0)
  EndIf
  
    Next yea2
  Next yea
  
  
  
  
  ;verbindungen waagerecht
  
yea=0
  yea2=0
    For yea = 1 To 10
       Debug "yea: "+Str(yea) 
      For yea2 = 1 To 10
        yea3+1
       Debug "yea3: "+Str(yea3)    
        
        
        If yea<> 10
          
     ConeTwistJoint(yea3, EntityID(yea3-100-1), 0, -2, 0, EntityID(yea3-100+9), 0, 1.5, 0)
    SetJointAttribute(yea3, #PB_ConeTwistJoint_SwingSpan, 1)
    SetJointAttribute(yea3, #PB_ConeTwistJoint_SwingSpan2, 1)
   SetJointAttribute(yea3, #PB_ConeTwistJoint_TwistSpan, 0)
  EndIf
  
    Next yea2
  Next yea
  
  
  
  
  
    
    
    
    
    
  
    CreateCamera(0, 0, 0, 100, 100)
    MoveCamera(0, 0, 4, 22,1)
    CameraLookAt(0, 0, 0, 0)
    
    
   
    
    SkyBox("desert07fthh.jpg")
    
    WorldGravity(0)
    
    Repeat
      Screen3DEvents()
      
      If ExamineMouse()
        MouseX = -MouseDeltaX() * 1* 0.05
        MouseY = -MouseDeltaY() * 1 * 0.05
      EndIf

     
        
   
         
       
        
     
       

     
         
         
          If ExamineKeyboard()
      
        
         
        
        
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf
        
      EndIf
          
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf

End

Kann mir jemand sagen warum dort nur ein seltsamer Bommel entsteht?
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: ogre Engine3d - Tuch erstellen

Beitrag von bobobo »

vermutlich passen die conejoints nicht.

Nimm mal lieber pointjoints . die passen besser zu einem
"Tuch".

Allerdings sollte am Ende sowas

Code: Alles auswählen

E - E - E - E
|   |   |   |
E - E - E - E
|   |   |   |
E - E - E - E
|   |   |   |
E - E - E - E
|   |   |   |
E - E - E - E
|   |   |   |
E - E - E - E
entstehen.
die - und | sind die pointjoints
die E die Entities.
Wenn Du als Entities Kugeln (sphere) nimmst, hast Du erstmal keine Probleme
mit der Orientierung.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: ogre Engine3d - Tuch erstellen

Beitrag von bobobo »

Also .. ich hab's nochmal angeguckt. Dein Code hat ein grosses Manko, denn bei dem 3D-dings
muss man drauf achten, dass jedes 3D-Entity auch eine eigene ID hat, zumindest insofern
man das später nochmal irgendwie weiter anfassen möchte.

Ich hab da mal was vorbereitet.
Hier kann man die Gravitation ändern mit den Tasten Add / Substract ( Plus und Minus auf dem Nummernblock)
und dem erzeugten Gebilde mit der Leertaste in den "Bauch pieken", damit das Ganze etwas in Schwung kommt.
R setzt die Tuchteile auf die Anfangsposition zurück

Von etwas weiter weg hat es sogar eine Tuchanmutung.

Bei mir bleibt das Spass ab und zu stehen (wenn man R und ADD oder Substract gleichzeitig hält), warum auch immer.

Bastel mal selber weiter dran rum.

Code: Alles auswählen

;
;PB 5.21
;sowas wie ein Tuch
;
;
IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY
#CameraSpeed = 1


If InitEngine3D(3)
  
  Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Models"  , #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Packs/desert.zip", #PB_3DArchive_Zip)
  Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)
  Parse3DScripts()
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  
  
  Structure Entities
    id.l
    x.f
    y.f
    z.f
    meshid.l
    matid.l
    scalex.l
    scaley.l
    scalez.l
    phys.l
    lineid1.l
    lineid2.l
  EndStructure
  
  Dim Netz.Entities(9,9)  ;Netz 10*10
  
    
  NewList ent.Entities()

  
  If Screen3DRequester()
    
    CreateMaterial(0, LoadTexture(0, "Dirt.jpg"))
    CreateMaterial(1, LoadTexture(1, "doscarte.png"))
    CreateSphere(0, 0.2)
    For x=0 To 9
      For y=0 To 9
        Netz(x,y)\id=id
        Netz(x,y)\lineid1=id
        Netz(x,y)\lineid2=id+500
        
        id+1
        Netz(x,y)\x=x
        Netz(x,y)\y=y
        Netz(x,y)\z=0
        Netz(x,y)\meshid=MeshID(0)
        If y<9
          Netz(x,y)\phys=#PB_Entity_BoxBody
          Netz(x,y)\matid=MaterialID(1)
        Else
          If x=9
            Netz(x,y)\phys=#PB_Entity_StaticBody
          Else
            Netz(x,y)\phys=#PB_Entity_BoxBody
          EndIf
          
          Netz(x,y)\matid=MaterialID(0)
        EndIf
        CreateEntity(Netz(x,y)\id,Netz(x,y)\meshid,Netz(x,y)\matid,Netz(x,y)\x,Netz(x,y)\y,Netz(x,y)\z)
        EntityPhysicBody(Netz(x,y)\id,Netz(x,y)\phys)
      Next y
    Next x
    For x=0 To 8
      For y=0 To 9
        pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x+1,y)\id),-1,0,0)
        SetJointAttribute(pj,#PB_PointJoint_Tau,0)
      Next y
    Next x
    For x=0 To 9
      For y=0 To 8
        pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x,y+1)\id),0,-1,0)
        SetJointAttribute(pj,#PB_PointJoint_Tau,0)
      Next y
    Next x
    
    CreateCamera(0, 0, 0, 100, 100)
    MoveCamera(0, 0, 4, 22,1)
    CameraLookAt(0, 0, 0, 0)
    SkyBox("desert07.jpg")
    wg.f=-0.981
    WorldGravity(wg)
    Debug wg.f
    Repeat
      Screen3DEvents()
      For x=0 To 8
        For y=0 To 9
          CreateLine3D(netz(x,y)\lineid1,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
                       EntityZ(Netz(x,y)\id),#Red,EntityX(Netz(x+1,y)\id),
                       EntityY(Netz(x+1,y)\id),EntityZ(Netz(x+1,y)\id),#Green)
        Next y
      Next x
      For x=0 To 9
        For y=0 To 8
          CreateLine3D(netz(x,y)\lineid2,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
                       EntityZ(Netz(x,y)\id),#Blue,EntityX(Netz(x,y+1)\id),
                       EntityY(Netz(x,y+1)\id),EntityZ(Netz(x,y+1)\id),#Yellow)
        Next y
      Next x
      If ExamineMouse()
        MouseX = -MouseDeltaX() * 1* 0.05
        MouseY = -MouseDeltaY() * 1 * 0.05
      EndIf
      
      If ExamineKeyboard()
        If KeyboardPushed(#PB_Key_Space)
              ApplyEntityImpulse(Netz(5,5)\id,0,0,-10)
        EndIf
        
          
        If KeyboardPushed(#PB_Key_Subtract)
          wg.f=wg.f-0.1
          WorldGravity(wg)
          Debug wg
        EndIf
        If KeyboardPushed(#PB_Key_Add)
          wg.f=wg.f+0.1
          WorldGravity(wg)
          Debug wg
        EndIf
        
        If KeyboardPushed(#PB_Key_R)
          For x= 0 To 9
            For y=0 To 9
              MoveEntity(Netz(x,y)\id,x,y,z,#PB_Absolute)
              ;ScaleEntity(ye3, 1, 2, 2) 
              
            Next y
          Next x
        EndIf
  
          
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf
        
      EndIf
      
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf

End
weiteres 3d-animationszeug finzte hier
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Purebasium
Beiträge: 74
Registriert: 05.02.2014 22:08
Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte
Wohnort: Mars, Kraterstr. 57b, Apartment 7

Re: ogre Engine3d - Tuch erstellen

Beitrag von Purebasium »

Danke
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: ogre Engine3d - Tuch erstellen

Beitrag von bobobo »

kleine Anpassung
die Netzgröße ist nun per Variable anpassbar. (ab 30 mal 30 wird es hier auf meinem Krüppelrechner extrem unflüssig,
was auch an der in der Schleife immer wieder neu erzeugten Linien liegt, ohne die geht es flüssiger)
Außerdem habe ich das Tuch an die "Leine" gehängt.

(der Abstand sowie die Größe der Entities hängen von der Gitterweite (hier 1 in x und y-Richtung)
ab und ist hier eher fix)

Code: Alles auswählen

;
;PB 5.21
;sowas wie ein Tuch
;
;
IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY
#CameraSpeed = 1


If InitEngine3D(3)
  
  Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Models"  , #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Packs/desert.zip", #PB_3DArchive_Zip)
  Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)
  Parse3DScripts()
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  maxx=20
  maxy=20
  
  Structure Entities
    id.l
    x.f
    y.f
    z.f
    meshid.l
    matid.l
    scalex.l
    scaley.l
    scalez.l
    phys.l
    lineid1.l
    lineid2.l
  EndStructure
  
  Dim Netz.Entities(maxx,maxy)  ;Netz 10*10
  
    
  NewList ent.Entities()

  
  If Screen3DRequester()
    
    CreateMaterial(0, LoadTexture(0, "Dirt.jpg"))
    CreateMaterial(1, LoadTexture(1, "doscarte.png"))
    ;CreateSphere(0, 0.2,3,3)
    CreateCube(0, 0.2)
    
    For x=0 To maxx
      For y=0 To maxy
        Netz(x,y)\id=id
        Netz(x,y)\lineid1=id
        Netz(x,y)\lineid2=id+(maxx*maxy*2) ; hier Addition eines Wertes, damit es eindeutig wird (bei größeren Netzen anpassen)
        
        id+1
        Netz(x,y)\x=x
        Netz(x,y)\y=y
        Netz(x,y)\z=0
        Netz(x,y)\meshid=MeshID(0)
        If y<maxy
          Netz(x,y)\phys=#PB_Entity_BoxBody
          Netz(x,y)\matid=MaterialID(1)
        Else
          If x=maxx-2 Or x=2
            Netz(x,y)\phys=#PB_Entity_StaticBody
          Else
            Netz(x,y)\phys=#PB_Entity_BoxBody
          EndIf
          
          Netz(x,y)\matid=MaterialID(0)
        EndIf
        CreateEntity(Netz(x,y)\id,Netz(x,y)\meshid,Netz(x,y)\matid,Netz(x,y)\x,Netz(x,y)\y,Netz(x,y)\z)
        EntityPhysicBody(Netz(x,y)\id,Netz(x,y)\phys)
      Next y
    Next x
    For x=0 To maxx-1
      For y=0 To maxy
        pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x+1,y)\id),-1,0,0)
        SetJointAttribute(pj,#PB_PointJoint_Damping,1)
        SetJointAttribute(pj,#PB_PointJoint_Tau,0)
      Next y
    Next x
    For x=0 To maxx
      For y=0 To maxy-1
        pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x,y+1)\id),0,-1,0)
        SetJointAttribute(pj,#PB_PointJoint_Damping,1)
        SetJointAttribute(pj,#PB_PointJoint_Tau,0)
      Next y
    Next x
    
    CreateCamera(0, 0, 0, 100, 100)
    MoveCamera(0, 0, 4, 22,1)
    CameraLookAt(0, 0, 0, 0)
    SkyBox("desert07.jpg")
    wg.f=-0.981
    WorldGravity(wg)
    Debug wg.f
    Repeat
      Screen3DEvents()
      WorldGravity(wg)
      For x=0 To maxx-1
        For y=0 To maxy
          CreateLine3D(netz(x,y)\lineid1,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
                       EntityZ(Netz(x,y)\id),#Red,EntityX(Netz(x+1,y)\id),
                       EntityY(Netz(x+1,y)\id),EntityZ(Netz(x+1,y)\id),#Green)
        Next y
      Next x
      For x=0 To maxx
        For y=0 To maxy-1
          CreateLine3D(netz(x,y)\lineid2,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
                       EntityZ(Netz(x,y)\id),#Blue,EntityX(Netz(x,y+1)\id),
                       EntityY(Netz(x,y+1)\id),EntityZ(Netz(x,y+1)\id),#Yellow)
        Next y
      Next x
      If ExamineMouse()
        MouseX = -MouseDeltaX() * 1* 0.05
        MouseY = -MouseDeltaY() * 1 * 0.05
      EndIf
      
      If ExamineKeyboard()
        If KeyboardPushed(#PB_Key_Space)
              ApplyEntityImpulse(Netz(maxx/2,maxy/2)\id,0,0,-10)
        EndIf
        
          
        If KeyboardPushed(#PB_Key_Subtract)
          wg.f=wg.f-0.1
          
          Debug wg
        EndIf
        If KeyboardPushed(#PB_Key_Add)
          wg.f=wg.f+0.1
          ;WorldGravity(wg)
          Debug wg
        EndIf
        
        If KeyboardPushed(#PB_Key_R)
          For x= 0 To maxx
            For y=0 To maxy
              MoveEntity(Netz(x,y)\id,x,y,z,#PB_Absolute)
              ;ScaleEntity(ye3, 1, 2, 2) 
              
            Next y
          Next x
        EndIf
  
          
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf
        
      EndIf
      
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf

End
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Purebasium
Beiträge: 74
Registriert: 05.02.2014 22:08
Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte
Wohnort: Mars, Kraterstr. 57b, Apartment 7

Re: ogre Engine3d - Tuch erstellen

Beitrag von Purebasium »

Hier noch ein paar verbesserungen:

Code: Alles auswählen

;
;PB 5.21
;sowas wie ein Tuch
;
;Orginal Code von bobobo 



IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY
#CameraSpeed = 1


If InitEngine3D(3)
  
  Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Models"  , #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Packs/desert.zip", #PB_3DArchive_Zip)
  Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)
  Parse3DScripts()
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  maxx=30
  maxy=30
  linienan=0
  
  
  Structure Entities
    id.l
    x.f
    y.f
    z.f
    meshid.l
    matid.l
    scalex.l
    scaley.l
    scalez.l
    phys.l
    lineid1.l
    lineid2.l
  EndStructure
  
  Dim Netz.Entities(maxx,maxy)  ;Netz 10*10
  
    
  NewList ent.Entities()

  
  If Screen3DRequester()
    
    CreateMaterial(0, LoadTexture(0, "Dirt.jpg"))
    CreateMaterial(1, LoadTexture(1, "doscarte.png"))
    ;CreateSphere(0, 0.2,3,3)
    CreateCube(0,0.8)
    CreateSphere(1,1)
    
    For x=0 To maxx
      For y=0 To maxy
        Netz(x,y)\id=id
        Netz(x,y)\lineid1=id
        Netz(x,y)\lineid2=id+(maxx*maxy*2) ; hier Addition eines Wertes, damit es eindeutig wird (bei größeren Netzen anpassen)
        
        id+1
        Netz(x,y)\x=x
        Netz(x,y)\y=y
        Netz(x,y)\z=0
        Netz(x,y)\meshid=MeshID(0)
        If y<maxy
          Netz(x,y)\phys=#PB_Entity_BoxBody
          Netz(x,y)\matid=MaterialID(1)
        Else
          If x=maxx-2 Or x=2
            Netz(x,y)\phys=#PB_Entity_StaticBody
          Else
            Netz(x,y)\phys=#PB_Entity_BoxBody
          EndIf
          
          Netz(x,y)\matid=MaterialID(0)
        EndIf
        CreateEntity(Netz(x,y)\id,Netz(x,y)\meshid,Netz(x,y)\matid,Netz(x,y)\x,Netz(x,y)\y,Netz(x,y)\z)
        EntityPhysicBody(Netz(x,y)\id,Netz(x,y)\phys)
      Next y
    Next x
    For x=0 To maxx-1
      For y=0 To maxy
        pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x+1,y)\id),-1,0,0)
        SetJointAttribute(pj,#PB_PointJoint_Damping,1)
        SetJointAttribute(pj,#PB_PointJoint_Tau,0)
      Next y
    Next x
    For x=0 To maxx
      For y=0 To maxy-1
        pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x,y+1)\id),0,-1,0)
        SetJointAttribute(pj,#PB_PointJoint_Damping,1)
        SetJointAttribute(pj,#PB_PointJoint_Tau,0)
      Next y
    Next x
    
    CreateCamera(0, 0, 0, 100, 100)
    MoveCamera(0, 0, 4, 22,1)
    CameraLookAt(0, 0, 0, 0)
    SkyBox("desert07.jpg")
    wg.f=-0.981
    WorldGravity(wg)
    Debug wg.f
    
  
    Repeat
      Screen3DEvents()
      WorldGravity(wg)
      If linienan=1
      For x=0 To maxx-1
        For y=0 To maxy
          CreateLine3D(netz(x,y)\lineid1,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
                       EntityZ(Netz(x,y)\id),#Red,EntityX(Netz(x+1,y)\id),
                       EntityY(Netz(x+1,y)\id),EntityZ(Netz(x+1,y)\id),#Green)
        Next y
      Next x
      For x=0 To maxx
        For y=0 To maxy-1
          CreateLine3D(netz(x,y)\lineid2,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
                       EntityZ(Netz(x,y)\id),#Blue,EntityX(Netz(x,y+1)\id),
                       EntityY(Netz(x,y+1)\id),EntityZ(Netz(x,y+1)\id),#Yellow)
        Next y
      Next x
      EndIf
      
      
      If ExamineMouse()
        MouseX = -MouseDeltaX() * 1* 0.05
        MouseY = -MouseDeltaY() * 1 * 0.05
      EndIf
      
      If ExamineKeyboard()
        If KeyboardPushed(#PB_Key_Space)
              ApplyEntityImpulse(Netz(maxx/2,maxy/2)\id,0,0,-20)
        EndIf
        
        
        If KeyboardReleased(#PB_Key_B)
         
          CreateEntity(maxy*maxx+1,MeshID(1),0,CameraX(0),CameraY(0),CameraZ(0))
          EntityPhysicBody(maxy*maxx+1, #PB_Entity_SphereBody )
          ApplyEntityImpulse(maxy*maxx+1,CameraDirectionX(0)*100,CameraDirectionY(0)*100,CameraDirectionZ(0)*100)
          
          
        EndIf
        
        
          
        If KeyboardPushed(#PB_Key_Subtract)
          wg.f=wg.f-0.1
          
          Debug wg
        EndIf
        If KeyboardPushed(#PB_Key_Add)
          wg.f=wg.f+0.1
          ;WorldGravity(wg)
          Debug wg
        EndIf
        
        If KeyboardPushed(#PB_Key_R)
          For x= 0 To maxx
            For y=0 To maxy
              MoveEntity(Netz(x,y)\id,x,y,z,#PB_Absolute)
              ;ScaleEntity(ye3, 1, 2, 2) 
              
            Next y
          Next x
        EndIf
  
          
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf
        
      EndIf
      
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf

End





Nun können die Linien per Variable abgeschaltet werden und wenn Man B drückt wird ein Ball geschossen. ( damit kann man seine Tuch Eigenschaften besser erkennen)
Außerdem habe ich die Würfel etwas größer gemacht
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Benutzeravatar
Purebasium
Beiträge: 74
Registriert: 05.02.2014 22:08
Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte
Wohnort: Mars, Kraterstr. 57b, Apartment 7

Re: ogre Engine3d - Tuch erstellen

Beitrag von Purebasium »

Kleiner Bugfix noch

Code: Alles auswählen

;
;PB 5.21
;sowas wie ein Tuch
;
;Orginal Code von bobobo 



IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY
#CameraSpeed = 1


If InitEngine3D(3)
  
  Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Models"  , #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Packs/desert.zip", #PB_3DArchive_Zip)
  Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)
  Parse3DScripts()
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  maxx=30
  maxy=30
  linienan=0
  
  
  Structure Entities
    id.l
    x.f
    y.f
    z.f
    meshid.l
    matid.l
    scalex.l
    scaley.l
    scalez.l
    phys.l
    lineid1.l
    lineid2.l
  EndStructure
  
  Dim Netz.Entities(maxx,maxy)  ;Netz 10*10
  
    
  NewList ent.Entities()

  
  If Screen3DRequester()
    
    CreateMaterial(0, LoadTexture(0, "Dirt.jpg"))
    CreateMaterial(1, LoadTexture(1, "doscarte.png"))
    ;CreateSphere(0, 0.2,3,3)
    CreateCube(0,0.8)
    CreateSphere(1,4)
    
    For x=0 To maxx
      For y=0 To maxy
        Netz(x,y)\id=id
        Netz(x,y)\lineid1=id
        Netz(x,y)\lineid2=id+(maxx*maxy*2) ; hier Addition eines Wertes, damit es eindeutig wird (bei größeren Netzen anpassen)
        
        id+1
        Netz(x,y)\x=x
        Netz(x,y)\y=y
        Netz(x,y)\z=0
        Netz(x,y)\meshid=MeshID(0)
        If y<maxy
          Netz(x,y)\phys=#PB_Entity_BoxBody
          Netz(x,y)\matid=MaterialID(1)
        Else
          If x=maxx-2 Or x=2
            Netz(x,y)\phys=#PB_Entity_StaticBody
          Else
            Netz(x,y)\phys=#PB_Entity_BoxBody
          EndIf
          
          Netz(x,y)\matid=MaterialID(0)
        EndIf
        CreateEntity(Netz(x,y)\id,Netz(x,y)\meshid,Netz(x,y)\matid,Netz(x,y)\x,Netz(x,y)\y,Netz(x,y)\z)
        EntityPhysicBody(Netz(x,y)\id,Netz(x,y)\phys)
      Next y
    Next x
    For x=0 To maxx-1
      For y=0 To maxy
        pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x+1,y)\id),-1,0,0)
        SetJointAttribute(pj,#PB_PointJoint_Damping,1)
        SetJointAttribute(pj,#PB_PointJoint_Tau,0)
      Next y
    Next x
    For x=0 To maxx
      For y=0 To maxy-1
        pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x,y+1)\id),0,-1,0)
        SetJointAttribute(pj,#PB_PointJoint_Damping,1)
        SetJointAttribute(pj,#PB_PointJoint_Tau,0)
      Next y
    Next x
    
    CreateCamera(0, 0, 0, 100, 100)
    MoveCamera(0, 0, 4, 22,1)
    CameraLookAt(0, 0, 0, 0)
    SkyBox("desert07.jpg")
    wg.f=-0.981
    WorldGravity(wg)
    Debug wg.f
    
  
    Repeat
      Screen3DEvents()
      WorldGravity(wg)
      If linienan=1
      For x=0 To maxx-1
        For y=0 To maxy
          CreateLine3D(netz(x,y)\lineid1,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
                       EntityZ(Netz(x,y)\id),#Red,EntityX(Netz(x+1,y)\id),
                       EntityY(Netz(x+1,y)\id),EntityZ(Netz(x+1,y)\id),#Green)
        Next y
      Next x
      For x=0 To maxx
        For y=0 To maxy-1
          CreateLine3D(netz(x,y)\lineid2,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
                       EntityZ(Netz(x,y)\id),#Blue,EntityX(Netz(x,y+1)\id),
                       EntityY(Netz(x,y+1)\id),EntityZ(Netz(x,y+1)\id),#Yellow)
        Next y
      Next x
      EndIf
      
      
      If ExamineMouse()
        MouseX = -MouseDeltaX() * 1* 0.05
        MouseY = -MouseDeltaY() * 1 * 0.05
      EndIf
      
      If ExamineKeyboard()
        If KeyboardPushed(#PB_Key_Space)
              ApplyEntityImpulse(Netz(maxx/2,maxy/2)\id,0,0,-20)
        EndIf
        
        
        If KeyboardReleased(#PB_Key_B)
         
          CreateEntity((maxy+1)*(maxx+1)+1,MeshID(1),0,CameraX(0),CameraY(0),CameraZ(0))
          EntityPhysicBody((maxy+1)*(maxx+1)+1, #PB_Entity_SphereBody,10 )
          ApplyEntityImpulse((maxy+1)*(maxx+1)+1,CameraDirectionX(0)*2000,CameraDirectionY(0)*2000,CameraDirectionZ(0)*2000)
          
          
        EndIf
        
        
          
        If KeyboardPushed(#PB_Key_Subtract)
          wg.f=wg.f-0.1
          
          Debug wg
        EndIf
        If KeyboardPushed(#PB_Key_Add)
          wg.f=wg.f+0.1
          ;WorldGravity(wg)
          Debug wg
        EndIf
        
        If KeyboardPushed(#PB_Key_R)
          For x= 0 To maxx
            For y=0 To maxy
              MoveEntity(Netz(x,y)\id,x,y,z,#PB_Absolute)
              ;ScaleEntity(ye3, 1, 2, 2) 
              
            Next y
          Next x
        EndIf
  
          
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf
        
      EndIf
      
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf

End
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: ogre Engine3d - Tuch erstellen

Beitrag von Chimorin »

Das sieht ja Hammer aus (Ich habe das Gefühl, dass die Framerate sehr stark sinkt bei Bewegung des Tuches).
Poste das doch auch noch bitte im englischen Forum, die anderssprachigen PB-Mitglieder sehen solche Sachen auch gerne (Fred schaut sich zudem solche Sachen auch gerne an).
:bounce:
Bild

- formerly known as Bananenfreak -
Antworten