Page 1 sur 1

Pendule double 3D

Publié : jeu. 05/juil./2018 20:44
par comtois
une adaptation du code de Fig (voir ici) avec la lib 3D de PB. Ici c'est le moteur physique qui fait le boulot pour l'animation des pendules.

Code : Tout sélectionner

Structure Vector3
  x.f
  y.f
  z.f
EndStructure

IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"

If InitEngine3D()
 
  InitSprite()
  InitKeyboard()
  InitMouse()
 
  If Screen3DRequester()
    Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
    Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Scripts" , #PB_3DArchive_FileSystem)
    Parse3DScripts()
   
    ; First create materials
    ;
    CreateMaterial(0, LoadTexture(0, "Wood.jpg"))
    CreateMaterial(1, LoadTexture(1, "Dirt.jpg"))
    GetScriptMaterial(2, "Examples/LightRibbonTrail")
   
    ; Meshes
    ;
    CreateCube(0, 1)
    CreateSphere(1, 0.5)
   
    ; Entities
    ;
    CreateEntity(0, MeshID(0), MaterialID(0), 0,  0, 0)
    CreateEntity(1, MeshID(0), MaterialID(0), 0, -5.1, 0)
    CreateEntity(2, MeshID(1), MaterialID(1), 0, -5.1, 0)
    CreateEntity(3, MeshID(1), MaterialID(1), 0, 0, 0)
   
    ScaleEntity(0,1,10,1)
    ScaleEntity(1,1,10,1)   
   
    ;Ribbon
   
    CreateRibbonEffect(0, MaterialID(2), 1, 2800, 180)
    RibbonEffectColor(0, 0, RGBA(0, 255*0.8, 255*0.8, 255), RGBA(0, 255, 0, 5))
    RibbonEffectWidth(0, 0, 0.5, 0.2)
    AttachRibbonEffect(0, EntityParentNode(3))
   
    ; Bodies
    ;
    CreateEntityBody(0, #PB_Entity_BoxBody   , 1.0)
    CreateEntityBody(1, #PB_Entity_BoxBody   , 1.0)
    CreateEntityBody(2, #PB_Entity_SphereBody, 1.0)
    CreateEntityBody(3, #PB_Entity_SphereBody, 0.00001)   
   
    ; PointJoint
    ;
    PointJoint(0, EntityID(0), 0, 5.5, 0)
    PointJoint(1, EntityID(0),  0, -5.5, 0, EntityID(2), 0, 0, 0)
    PointJoint(2, EntityID(1),  0, 5.5, 0, EntityID(2), 0, 0, 0)
    PointJoint(3, EntityID(1),  0, -5.5, 0, EntityID(3), 0, 0, 0)   
   
   
    For i=0 To 3
      EntityLinearFactor(i, 1, 1, 0)
    Next
   
   
    ; Camera
    ;
    CreateCamera(0, 0, 0, 100, 100)
    MoveCamera(0, 0, 0, 50, #PB_Absolute)
   
    ;- Light
    ;
    AmbientColor(RGB(25, 25, 25))
    CreateLight(0, RGB(215, 190, 40), 75, 75, 75)
   
    ; GO
    ;
    ApplyEntityImpulse(1,  10, 0, 0)
   
    Repeat
      Screen3DEvents()
      ExamineKeyboard()
     
      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

Re: Pendule double 3D

Publié : jeu. 05/juil./2018 22:01
par djes
Belle démo pour la prochaine version ;)

Re: Pendule double 3D

Publié : ven. 06/juil./2018 19:13
par Kwai chang caine
Waouuuhhh !!! COMTOIS ça envoie du bois ton adaptation 8) :D